Ogni volta che proviamo a connetterci all'URL,
se il server sull'altro sito è in esecuzione sul protocollo https e ci impone di comunicare tramite le informazioni fornite nel certificato, abbiamo la seguente opzione:
1) richiedi il certificato (scarica il certificato), importa questo certificato in trustore. Gli usi java del trustore predefinito possono essere trovati in \ Java \ jdk1.6.0_29 \ jre \ lib \ security \ cacerts, quindi se proviamo a connetterci alla connessione URL verrebbe accettata.
2) Nei normali casi aziendali, potremmo connetterci a URL interni nelle organizzazioni e sappiamo che sono corretti. In tali casi, ci si fida che sia l'URL corretto. In tali casi sopra, è possibile utilizzare codice che non imporrà di memorizzare il certificato per connettersi a un determinato URL.
per il punto n. 2 dobbiamo seguire i seguenti passaggi:
1) scrivi sotto il metodo che imposta HostnameVerifier per HttpsURLConnection che restituisce true per tutti i casi, il che significa che ci fidiamo di 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) scrivi sotto il metodo, che chiama doTrustToCertificates prima di provare a connettersi all'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());
}
Questa chiamata restituirà il codice di risposta = 200 significa che la connessione è riuscita.
Per maggiori dettagli e un esempio di esempio, puoi fare riferimento a URL .