반응형

안드로이드 에뮬레이터에서 API 호출 시

java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.

에러가 났는데 해당 도메인은 신뢰할 수 없는 인증서라 그렇다고 한다.

 

해결방법으로는

1. 소스에서 API 호출하는 웹 서버의 CA 를 강제로 하드코딩해서 신뢰 시켜버리기

2. API 호출 웹 서버의 설정을 변경하기

 

가 있는데 웹 서버를 내가 만들었기 때문에 2번으로 진행한다.

 

안드로이드 에뮬레이터가 아닌 실제 디바이스에서는 API 호출 해서 잘 받아오는데

(안드로이드 에뮬이 아닌 실제 사용중인 모바일 디바이스에선 왜 잘 받아오냐 =>

 아마 이런걸 체인 에러(최신 디바이스 에서는 최신 루트, 최신 인증서를 보유하고 있는데

  일부 구형에서는 보유를 안하고 있어서 인식을 못하는 듯) 라고 하나보다)

 

 

API 서버는 정상적으로 SSL 이 적용 중이라고 나온다.

openssl 의 s_client 로 현재 운영중인 웹 서버의 SSL 정보를 봤다.

1. 네이버

>openssl s_client -connect naver.com:443 | openssl x509 -noout -subject -issuer

depth=2 C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert Global Root CA
verify error:num=19:self signed certificate in certificate chain
subject= /C=KR/ST=Gyeonggi-do/L=Seongnam-si/O=NAVER Corp./CN=*.www.naver.com
issuer= /C=US/O=DigiCert Inc/CN=DigiCert SHA2 Secure Server CA

 

2. 내 서버

>openssl s_client -connect www.maani.com:443 | openssl x509 -noout -subject -issuer

depth=0 CN = www.maani.com
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 CN = www.maani.com
verify error:num=21:unable to verify the first certificate
verify return:1
subject= /CN=www.maani.com
issuer= /C=GB/ST=Greater Manchester/L=Salford/O=Sectigo Limited/CN=Sectigo RSA Domain Validation Secure Server CA

 

unable to get local issuer certificate

unable to verify the first certificate

다른 정상적인 사이트와 달리 속을 들여다보면 이런 에러들이 들어가있다.

 


 

웹 서버의 설정을 바꿔야 한다.  nginx 를 사용중이고

 

SSL 구매 할 때 이렇게 3개 파일이 들어 있어서

 

nginx.conf 에 SSL 부분에

이렇게 설정 했었다.

 

저 파일들을 

도메인 인증서 -> 체인 인증서 -> 루트 인증서 순으로 하나의 파일로 만들어야 한다.

www.maani.com.key -> www.maani.com.crt -> Chain_RootCA_Bundle.crt

 

이렇게 순서대로 이어 붙였으면 pem 확장자로 저장한 다음에

www.maani.com.pem   뭐 이렇게.. 

nginx SSL config 도 방금 만든 pem 으로 셋 다 넣으면 된다.

 

 

 

반응형
도움이 되셨다면 공감 클릭 부탁드리며
출처만 남겨주시면 글 내용은 마음껏 퍼가셔도 좋습니다 :)