본문 바로가기
Programando/Error-Handling

[Android] CertPathValidatorException 오류

안드로이드 크롤링 코드를 테스트하는데 다음과 같은 오류가 생겼다.

"javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found."

 

구글에서 서칭을 해본 결과, 이 문제를 해결할 수 있게 도와줄 블로그 글을 찾을 수 있었다.

 

HttpsURLConnection.setDefaultSSLSocketFactory 기본으로 설정

    private void trustAllHosts() {
        // Create a trust manager that does not validate certificate chains
        TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {
            public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                return new java.security.cert.X509Certificate[] {};
            }

            @Override
            public void checkClientTrusted(X509Certificate[] chain,
                                           String authType) throws CertificateException {
            }

            @Override
            public void checkServerTrusted(X509Certificate[] chain,
                                           String authType) throws CertificateException {
            }
        }};

        // Install the all-trusting trust manager
        try {
            SSLContext sc = SSLContext.getInstance("TLS");
            sc.init(null, trustAllCerts, new java.security.SecureRandom());
            HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
        }
        catch (Exception e) {
            e.printStackTrace();
        }
    }
            try {
            
                trustAllHosts();
                // url을 열기 전에 trustAllHosts 호출
                String url = "https://www.gov.kr/portal/vfnews";
                Document d = Jsoup.connect(url).get();
                Elements data = d.select("div.gallery_wrap").select("ul").select("li");

                int size = data.size();
                for (int j = 0; j < size; j++) {
                    String title = data
                            .eq(j)
                            .select("dl")
                            .select("dt a")
                            .text();

                    Log.d(TAG, "FESTIVAL TITLE : " + title);

                }

            } catch (IOException e) {
                e.printStackTrace();
            }

 

자료 참조

 

[ Android ] SSLHandshakeException 오류 (링크)

[ Android ] SSLHandshakeException 오류 (링크)https://developer.android.com/training/articles/s...

blog.naver.com

반응형