'SSL'에 해당되는 글 2건

  1. 2017.04.18 :: SSL 인증 우회하기 1
  2. 2017.04.13 :: SSL(TLS)란?
프로그래밍 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 생각퍼즐
:
보안 2017. 4. 13. 00:54


Client와 Server간의 암호화 통신을 위한 SSL/TLS


SSL(TLS)란?

SSL은 Secure Socket Layer의 약자로 웹서버와 웹 브라우저 간의 암호화 통신을 위하여 응용계층과 TCP/IP 계층에서 동작하는 프로토콜이며, Netscape사에서 만들었으며 ISO표준 정식명칭은 TLS(Transport Layer Security)이다.



SSL/TLS의 주요기능

1) 인증 : 상대 사이트에 대한 신뢰성 인증

2) 암호화 : 다양한 암호화 알고리즘을 이용하여 메시지 암호화

3) 무결성 : 송/수신 메시지에 대한 Checksum기능, 변조 방지

4) 지원 프로토콜 : HTTPS(port:443), TELNETS(port:992), POP3S(port:995), SFTP(port:22)



SSL/TLS 처리과정


[Handshake 과정]


위의 그림에서 보듯이 많은 단계를 거쳐야 메시지 송/수신 처리가 가능하다. 그만큼 처리 속도가 떨어진다는 얘기다. 또한, DDOS 공격 시 그 만큼 부하가 많이 발생한다는 의미이기도 하다. 그래서 주요정보가 송/수신되는 기능에만 SSL/TLS 처리가 필요함.


그외 암호화 통신을 위해 SET(전자결제), IPSEC(VPN 구현) 등이 있음.

'보안' 카테고리의 다른 글

코드 난독화 (Obfuscation)  (0) 2017.01.26
Ransomware(랜섬웨어)  (1) 2017.01.25
posted by 생각퍼즐
: