URL에 연결하려고 할 때마다
다른 사이트의 서버가 https 프로토콜에서 실행 중이고 인증서에 제공된 정보를 통해 통신해야한다고 요구하는 경우 다음 옵션이 있습니다.
1) 인증서를 요청 (인증서 다운로드)하고이 인증서를 신뢰 저장소로 가져옵니다. 기본 trustore java 사용은 \ Java \ jdk1.6.0_29 \ jre \ lib \ security \ cacerts에서 찾을 수 있으며 URL 연결에 다시 연결을 시도하면 수락됩니다.
2) 일반적인 비즈니스 사례에서 우리는 조직의 내부 URL에 연결할 수 있으며 이것이 정확하다는 것을 알고 있습니다. 이러한 경우 올바른 URL이라고 신뢰합니다. 위의 경우 특정 URL에 연결하기 위해 인증서를 저장하도록 요구하지 않는 코드를 사용할 수 있습니다.
2 번 포인트에 대해서는 아래 단계를 따라야합니다.
1) 모든 경우에 true를 반환하는 HttpsURLConnection에 대해 HostnameVerifier를 설정하는 메소드를 작성하여 trustStore를 신뢰하고 있음을 의미합니다.
// trusting all certificate
public void doTrustToCertificates() throws Exception {
Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
TrustManager[] trustAllCerts = new TrustManager[]{
new X509TrustManager() {
public X509Certificate[] getAcceptedIssuers() {
return null;
}
public void checkServerTrusted(X509Certificate[] certs, String authType) throws CertificateException {
return;
}
public void checkClientTrusted(X509Certificate[] certs, String authType) throws CertificateException {
return;
}
}
};
SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, trustAllCerts, new SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
HostnameVerifier hv = new HostnameVerifier() {
public boolean verify(String urlHostName, SSLSession session) {
if (!urlHostName.equalsIgnoreCase(session.getPeerHost())) {
System.out.println("Warning: URL host '" + urlHostName + "' is different to SSLSession host '" + session.getPeerHost() + "'.");
}
return true;
}
};
HttpsURLConnection.setDefaultHostnameVerifier(hv);
}
2) URL에 연결을 시도하기 전에 doTrustToCertificates를 호출하는 아래 메소드를 작성하십시오.
// connecting to URL
public void connectToUrl(){
doTrustToCertificates();//
URL url = new URL("https://www.example.com");
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
System.out.println("ResponseCode ="+conn.getResponseCode());
}
이 호출은 응답 코드 = 200을 반환합니다. 연결이 성공했음을 의미합니다.
자세한 내용과 샘플 예는 URL을 참조하십시오 .