Siempre que intentemos conectarnos a la URL,
Si el servidor en el otro sitio se ejecuta en el protocolo https y exige que nos comuniquemos a través de la información proporcionada en el certificado, tenemos la siguiente opción:
1) solicite el certificado (descargue el certificado), importe este certificado en trustore. Los usos predeterminados de trustore java se pueden encontrar en \ Java \ jdk1.6.0_29 \ jre \ lib \ security \ cacerts, entonces si volvemos a intentar conectarnos a la URL, la conexión sería aceptada.
2) En casos comerciales normales, es posible que nos conectemos a URL internas en organizaciones y sepamos que son correctas. En tales casos, confía en que es la URL correcta. En los casos anteriores, se puede utilizar un código que no obligará a almacenar el certificado para conectarse a una URL en particular.
para el punto no 2 tenemos que seguir los siguientes pasos:
1) escriba a continuación el método que establece HostnameVerifier para HttpsURLConnection que devuelve verdadero para todos los casos, lo que significa que confiamos en el 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) escriba el método siguiente, que llama a doTrustToCertificates antes de intentar conectarse a la 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());
}
Esta llamada devolverá el código de respuesta = 200 significa que la conexión es exitosa.
Para obtener más detalles y un ejemplo de muestra, puede consultar la URL .