프로그래밍 2017. 4. 18. 00:22

SSL(TLS) 인증 우회하는 JAVA 코드


여러 공공기관에서 많은 데이터를 개방하고 있죠~


예전에는 엑셀파일 형식으로 많이 개방했었는데, 요즘은 데이터 최신성 유지 및 활용성을 높이기 위해 OPEN API 방식으로 제공을 하고있습니다.


가끔 SSL(TLS)가 적용된 OPEN API 호출 시 인증서 오류(SSL통신)가 발생하기도 합니다. 인증서 만료 또는 인증서 없을 경우 발생하죠!


SSL의 개념에 대해 궁금하시면 여기를 참조하세요!


이러한 문제를 해결하는 방법으로 아래 소스코드처럼 인증우회(인증서 무시)하는 방법이 있습니다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
        Document xml = null;      
        HttpURLConnection connection = null;
        
        try{
            DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
            
            URL restUrl = new URL(url);
            String protocol = restUrl.getProtocol();
            
            /* 프로토콜이 HTTPS일 경우 서버쪽 인증서를 신뢰할 수 있도록 처리 */
            if(protocol.toLowerCase().equals("https")){
                TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {
                    public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                        return null;
                    }
                    @SuppressWarnings("unused")
                    public void checkClientTrusted(X509Certificate[] certs,String authType) {
                    }
                    @SuppressWarnings("unused")
                    public void checkServerTrusted(X509Certificate[] certs,String authType) {
                    }
                    @Override
                    public void checkClientTrusted(
                            java.security.cert.X509Certificate[] arg0,
                            String arg1) throws CertificateException {
                        // TODO Auto-generated method stub
                    }
                    @Override
                    public void checkServerTrusted(
                            java.security.cert.X509Certificate[] arg0,
                            String arg1) throws CertificateException {
                        // TODO Auto-generated method stub
                    }
                } };
 
                SSLContext sc = SSLContext.getInstance("SSL");
                sc.init(null, trustAllCerts, new java.security.SecureRandom());
                HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
            }
 
            /*connection 정보 설정*/
            connection = (HttpURLConnection) restUrl.openConnection();
            connection.setRequestProperty("Accept""text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
            connection.setRequestProperty("Accept-Language""ko-KR,ko;q=0.8,en-US;q=0.5,en;q=0.3");
            connection.setRequestProperty("Connection""keep-alive");
            connection.setConnectTimeout(Configure.HTTP_CONN_TIME_OUT);
            if(timeOut > 0){
                connection.setReadTimeout(timeOut);
            }else{
                connection.setReadTimeout(Configure.HTTP_READ_TIME_OUT);
            }
            
            /* 호출한 결과를 XML문서로 저장 */
            xml = documentBuilder.parse(connection.getInputStream());
            
        }catch(MalformedURLException me){
            me.printStackTrace();
            throw new MalformedURLException("MalformedURLException");
        }catch(Exception e){
            throw new Exception(e.getMessage());
        }finally{
            /* resource */
            connection.disconnect();
        }
 
cs



posted by 생각퍼즐
: