본문 바로가기

Android

[Android] CertPathValidatorException: Trust anchor for certification path not found.

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>

 

 

 

해결은 됐는데 그 다음 문제가 생겼다.

 

 

 

반응형