[안드로이드]java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.

안드로이드에서 java.security.cert.CertPathValidatorException: Trust anchor for certification path not found. 에러가 발생하는 일반적인 경우는..

 

안드로이드 단말에서 특정 서버로 https request를 했을 때.. 그 서버에서 사용 중인 인증서를

안드로이드 단말에서는 신뢰할 수 있는 인증서로 등록되어있지 않기 때문입니다.

 

 

설정 > 보안 쪽에서 잘 찾아보면.. 인증서 관련 메뉴가 있고.. 거기에 가면 단말에서 신뢰할 수 있는 인증서로 등록된 인증서를 확인할 수 있습니다.

 

특히.. 안드로이드 5.0(롤리팝, API 21) 을 포함한 버전까지는.. 몇몇 인증서가 신뢰된 인증서로 등록되어 있지 않아서 이런 문제가 생기는 것 같습니다.

 

안드로이드 API 22부터는 위의 에러가 발생하지 않더라구요.

 

이 문제는 안드로이드 공식 홈에도 설명이 있습니다.

 

https://developer.android.com/training/articles/security-ssl

 

HTTPS 및 SSL을 사용한 보안  |  Android 개발자  |  Android Developers

현재 기술적으로 전송 계층 보안(TLS)이라고 알려진 보안 소켓 레이어(SSL)는 클라이언트와 서버 간의 암호화된 통신을 위한 공통 기본 토대입니다. 애플리케이션이 SSL을 잘못 사용하면 악성 개체가 네트워크를 통해 앱 데이터를 가로챌 수 있습니다. 앱에 이러한 문제가 발생하지 않도록 하기 위해 이 도움말에서는 안전한 네트워크 프로토콜을 사용할 때 범하는 일반적인 실수를 다루며 공개키 인프라(PKI) 사용 시 우려되는 사항에 관한 해결 방법을 제시합니다.

developer.android.com

 

$ openssl s_client -connect wikipedia.org:443 | openssl x509 -noout -subject -issuer

putty 등으로 아무 서버나 접속해서.. 위의 명령어를 사용하면 특정 서버의 인증서가 어떤 것인지 알아낼 수 있습니다.

 

subject= /serialNumber=sOrr2rKpMVP70Z6E9BT5reY008SJEdYv/C=US/O=*.wikipedia.org/OU=GT03314600/OU=See www.rapidssl.com/resources/cps (c)11/OU=Domain Control Validated - RapidSSL(R)/CN=*.wikipedia.org issuer= /C=US/O=GeoTrust, Inc./CN=RapidSSL CA

 

위키피디아 홈페이지는.. RapidSSL CA를 쓰는군요.

 

 

또 다른 이유로도 이 문제가 발생할 수 있습니다.

 

$ openssl s_client -connect aaabbbccc.com:443 | openssl x509 -noout -subject -issuer
depth=0 C = GB, ST = Berkshire, L = Newbury, O = My Company Ltd
verify error:num=18:self signed certificate
verify return:1
depth=0 C = GB, ST = Berkshire, L = Newbury, O = My Company Ltd
verify return:1
subject= /C=GB/ST=Berkshire/L=Newbury/O=My Company Ltd
issuer= /C=GB/ST=Berkshire/L=Newbury/O=My Company Ltd

 

인증서가.. CA에서 사인된 게 아니라.. self signed된 경우에 이런 문제가 발생할 수 있다고 합니다.

 

 

 

 

작성자

Posted by 드리머즈

관련 글

댓글 영역