Java, 안드로이드 PKIX path building failed 에러 원인 및 해결 방법
인터넷 망분리 환경으로 인해 경험할 수 있는 에러였는데 어찌 저찌 해결이 되었다. 여러가지 해결 방법을 짬뽕하여 해결했다.
안드로이드 스튜디오에서 안드로이드 apk 빌드를 gradle로 시작하는데
PKIX path building failed
unable to find valid certification path to requested target
를 보게 되었다. 주요 내용은 아래와 같은데 ...
sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
unable to find valid certification path to requested target
회사 인터넷 환경에서 ssl 혹은 프록시 환경으로 막히는 것이라고 한다. 더 자세한건 잘 모르겠는데 인터넷에서 해결하는 방법은 인증서 파일을 보안 담당자한테 받으라고... 나오는데 굳이 연락하고 싶지 않아 다른 방법을 찾아보았다.
역시 찾아보니 내부적으로 주소만 알면 다운로드 해주는 방법이 있었고 받았다. 이 글을 찾아볼 정도면 아래 내용 정리로도 충분히 할수 있다고 생각한다. 아니라면 댓글 달아주면 보완하겠음.
-- InstallCert.java 다운로드
curl -O https://gist.githubusercontent.com/lesstif/cd26f57b7cfd2cd55241b20e05b5cd93/raw/InstallCert.java
-- java 파일 class 컴파일
javac InstallCert.java
-- 회사도메인 cert 다운로드
java -cp ./ InstallCert [회사도메인 ex) google.com]
Added certificate to keystore 'jssecacerts' using alias '[도메인별명]'
keytool -exportcert -keystore jssecacerts -storepass changeit -file output.cert -alias [도메인별명]
keytool -importcert -keystore "C:/Program Files/Android/Android Studio/jre/lib/security/cacerts" -storepass changeit -file output.cert -alias [도메인별명]
회사 도메인을 알아내는건 어렵지 않을것이고 java -cp ./ InstallCert [회사도메인 ex) google.com] 를 입력하게 되면 1번인지 2번인지 선택하게 나오는데 1,2번 해보고 되는놈으로 선택했다.
InstallCert를 실행하면 jssecacerts 파일로 떨어졌고 이를 keytool을 활용해서 output.cert로 변환한 다음에 다시 keytool로 import 하는 과정이다. 이 import 할 때 안드로이드 스튜디오가 참조하는 jre환경에 lib/security/cacerts 에 넣어주는 것이 중요하다.
나름 성공해서 잘 빌드하고 있다.