URLに接続しようとするたびに、
他のサイトのサーバーがhttpsプロトコルで実行されており、証明書で提供される情報を介して通信する必要がある場合は、次のオプションがあります。
1)証明書を要求し(証明書をダウンロード)、この証明書をトラストアにインポートします。Trustore Javaのデフォルトの使用は\ Java \ jdk1.6.0_29 \ jre \ lib \ security \ cacertsにあり、URLへの接続を再試行すると、接続が受け入れられます。
2)通常のビジネスケースでは、組織の内部URLに接続している可能性があり、それらが正しいことがわかっています。そのような場合、それが正しいURLであると信頼します。上記のような場合、特定のURLに接続するための証明書の保存を要求しないコードを使用できます。
ポイント2では、以下の手順に従う必要があります。
1)HttpsURLConnectionのHostnameVerifierを設定するメソッドを以下に記述します。これは、trustStoreを信頼することを意味するすべての場合にtrueを返します。
// 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を参照してください。