Android 오류 해결 : CertPathValidatorException: Trust anchor for certification path not found.
javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
InputStream을 통한 url 연결 시 위 오류가 발생했다.
원인은 연결하려는 사이트의 인증서가 android 단말에 존재하지 않아서였다.
문제 발생 코드
NetworkThread networkThread = new NetworkThread();
networkThread.start();
try {
networkThread.join();
} catch (Exception e) {
e.printStackTrace();
}
private class NetworkThread extends Thread {
@Override
public void run() {
try {
URL url = new URL("https://xxx");
InputStream inputStream = url.openStream(); // CertPathValidatorException 발생
. . .
}
}
}
일단 연결하려는 사이트의 인증서를 확인했다.
Chrome의 경우 해당 사이트에서 F12(Dev tool)을 누른 후 Security 탭에서 확인 가능하다
인증서 내보내기를 클릭하여 인증서를 다운받는다.
다운받은 인증서를 프로젝트 resource 내에 넣는다
그 다음 security config xml을 작성한다. (res > xml 위치)
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config>
<trust-anchors>
<certificates src="@raw/xxx"/> <!--추가한 certificate 파일-->
<certificates src="system"/>
</trust-anchors>
</base-config>
<domain-config>
<domain includeSubdomains="true">koreaexim.go.kr</domain> <!--접속 도메인-->
<trust-anchors>
<certificates src="@raw/koreaexim20241003" /> <!--추가한 certificate 파일-->
</trust-anchors>
</domain-config>
</network-security-config>
AndroidManifest에 추가한 security config 선언
AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="xxxxxx">
<uses-permission android:name="android.permission.INTERNET" />
<application
. . .
android:networkSecurityConfig="@xml/추가한 security config"
. . . . >
</application>
</manifest>
해결은 됐는데 그 다음 문제가 생겼다.
반응형
'Android' 카테고리의 다른 글
[Android] android.os.NetworkOnMainThreadException (1) | 2024.10.03 |
---|---|
[Android] Test에서 파일 읽어서 테스트하기 (0) | 2024.08.07 |
[Android] Google AdMob 광고 게재 중지 문제 해결 (0) | 2022.01.23 |
[Android] 앱 내에서 다크 모드 해제 (0) | 2021.08.16 |
[Android] 안드로이드 앱 타이틀바 색상 바꾸기 (0) | 2021.08.05 |