Всякий раз, когда мы пытаемся подключиться к URL-адресу,
, если сервер на другом сайте работает по протоколу https и обязателен для связи через информацию, предоставленную в сертификате, у нас есть следующая опция:
1) запросить сертификат (загрузить сертификат), импортировать этот сертификат в доверенность. По умолчанию для использования функции доверия по умолчанию java можно найти в \ Java \ jdk1.6.0_29 \ jre \ lib \ security \ cacerts, тогда если мы попытаемся подключиться к URL-соединению, будет принято.
2) В обычном бизнесе мы можем подключаться к внутренним URL-адресам в организациях, и мы знаем, что они верны. В таких случаях вы доверяете правильному URL-адресу. В таких случаях выше может использоваться код, который не будет указывать на сохранение сертификата для подключения к определенному URL-адресу.
для точки 2 для выполнения следующих шагов:
1) напишите ниже метод, который устанавливает HostnameVerifier для HttpsURLConnection, который возвращает true для всех случаев, то есть мы доверяем 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) напишите ниже метод , который вызывает doTrustToCertificates перед попыткой подключиться к URL
// 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 .