Wann immer wir versuchen, eine Verbindung zur URL herzustellen,
Wenn der Server am anderen Standort mit dem https-Protokoll ausgeführt wird und die Kommunikation über die im Zertifikat angegebenen Informationen vorschreibt, haben wir folgende Option:
1) Fordern Sie das Zertifikat an (laden Sie das Zertifikat herunter) und importieren Sie dieses Zertifikat in Trustore. Die standardmäßigen Java-Verwendungen von Trustore finden Sie unter \ Java \ jdk1.6.0_29 \ jre \ lib \ security \ cacerts. Wenn wir erneut versuchen, eine Verbindung zur URL-Verbindung herzustellen, wird dies akzeptiert.
2) In normalen Geschäftsfällen stellen wir möglicherweise eine Verbindung zu internen URLs in Organisationen her und wissen, dass diese korrekt sind. In solchen Fällen vertrauen Sie darauf, dass es sich um die richtige URL handelt. In den oben genannten Fällen kann Code verwendet werden, der nicht das Speichern des Zertifikats für die Verbindung mit einer bestimmten URL vorschreibt.
Für den Punkt Nr. 2 müssen wir die folgenden Schritte ausführen:
1) Schreiben Sie die folgende Methode, mit der HostnameVerifier für HttpsURLConnection festgelegt wird, die in allen Fällen true zurückgibt, was bedeutet, dass wir dem trustStore vertrauen.
// 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) Schreiben Sie die folgende Methode, die doTrustToCertificates aufruft, bevor Sie versuchen, eine Verbindung zur URL herzustellen
// 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());
}
Dieser Aufruf gibt den Antwortcode = 200 zurück, was bedeutet, dass die Verbindung erfolgreich ist.
Weitere Einzelheiten und ein Beispiel finden Sie unter URL .