Sempre que tentamos nos conectar a URL,
se o servidor em outro site estiver executando no protocolo https e exigindo que devemos nos comunicar por meio das informações fornecidas no certificado, temos a seguinte opção:
1) peça o certificado (baixe o certificado), importe este certificado no trustore. Os usos do trustore java padrão podem ser encontrados em \ Java \ jdk1.6.0_29 \ jre \ lib \ security \ cacerts, então se tentarmos conectar novamente à URL, a conexão será aceita.
2) Em casos normais de negócios, podemos estar nos conectando a URLs internos em organizações e sabemos que eles estão corretos. Nesses casos, você confia que é o URL correto. Nesses casos acima, o código pode ser usado, o que não obriga a armazenar o certificado para se conectar a determinado URL.
para o ponto 2, temos que seguir os passos abaixo:
1) escreva abaixo o método que define HostnameVerifier para HttpsURLConnection, que retorna true para todos os casos, o que significa que estamos confiando no 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) escreva o método abaixo, que chama doTrustToCertificates antes de tentar se conectar ao 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 chamada retornará o código de resposta = 200 significa que a conexão foi bem-sucedida.
Para obter mais detalhes e exemplos de exemplo, você pode consultar a URL .