[안드로이드]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
$ 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된 경우에 이런 문제가 발생할 수 있다고 합니다.
댓글 영역