URL'ye ne zaman bağlanmaya çalışsak,
diğer sitedeki sunucu https protokolünde çalışıyorsa ve sertifikada sağlanan bilgiler aracılığıyla iletişim kurmamızı zorunlu kılıyorsa, şu seçeneğe sahibiz:
1) sertifikayı isteyin (sertifikayı indirin), bu sertifikayı trustore'da içe aktarın. Varsayılan trustore java kullanımları \ Java \ jdk1.6.0_29 \ jre \ lib \ security \ cacerts konumunda bulunabilir, bu durumda URL bağlantısına yeniden bağlanmayı denersek kabul edilecektir.
2) Normal iş durumlarında, kuruluşlarda dahili URL'lere bağlanıyor olabiliriz ve bunların doğru olduğunu biliyoruz. Bu gibi durumlarda, bunun doğru URL olduğuna güvenirsiniz. Yukarıdaki gibi durumlarda, belirli bir URL'ye bağlanmak için sertifikayı saklamayı zorunlu kılmayan kod kullanılabilir.
2 numaralı nokta için aşağıdaki adımları izlemeliyiz:
1) HttpsURLConnection için HostnameVerifier'i ayarlayan ve tüm durumlar için true döndüren, yani trustStore'a güvendiğimiz anlamına gelen yöntemi aşağıya yazın.
// 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) URL'ye bağlanmayı denemeden önce doTrustToCertificates'i çağıran yöntemi aşağıya yazın
// 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());
}
Bu çağrı yanıt kodunu döndürecektir = 200 bağlantının başarılı olduğu anlamına gelir.
Daha fazla ayrıntı ve örnek örnek için URL'ye başvurabilirsiniz .