'TLS'에 해당되는 글 2건
- 2017.04.18 :: SSL 인증 우회하기 1
- 2017.04.13 :: SSL(TLS)란?
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 |
'프로그래밍' 카테고리의 다른 글
다운로드 파일명 깨짐현상 처리 (1) | 2017.05.22 |
---|---|
페이지 이동 시 검색조건 유지 (0) | 2017.04.18 |
스프링 프로젝트 - 공지사항 등록 테스트 (0) | 2017.03.17 |
스프링 프로젝트 - 공지사항 기능 구현 (0) | 2017.03.16 |
스프링 프로젝트 - 첨부파일 처리 (0) | 2017.03.10 |
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 |