프로그래밍
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 |
'프로그래밍' 카테고리의 다른 글
다운로드 파일명 깨짐현상 처리 (1) | 2017.05.22 |
---|---|
페이지 이동 시 검색조건 유지 (0) | 2017.04.18 |
스프링 프로젝트 - 공지사항 등록 테스트 (0) | 2017.03.17 |
스프링 프로젝트 - 공지사항 기능 구현 (0) | 2017.03.16 |
스프링 프로젝트 - 첨부파일 처리 (0) | 2017.03.10 |