Setiap kali kami mencoba menyambung ke URL,
jika server di situs lain berjalan pada protokol https dan mengamanatkan bahwa kami harus berkomunikasi melalui informasi yang diberikan dalam sertifikat, maka kami memiliki opsi berikut:
1) minta sertifikat (unduh sertifikat), impor sertifikat ini di trustore. Penggunaan java trustore default dapat ditemukan di \ Java \ jdk1.6.0_29 \ jre \ lib \ security \ cacerts, maka jika kita mencoba kembali untuk menyambung ke sambungan URL akan diterima.
2) Dalam kasus bisnis normal, kami mungkin terhubung ke URL internal dalam organisasi dan kami tahu bahwa itu benar. Dalam kasus seperti itu, Anda percaya bahwa itu adalah URL yang benar. Dalam kasus seperti di atas, kode dapat digunakan yang tidak akan mengamanatkan untuk menyimpan sertifikat untuk terhubung ke URL tertentu.
untuk poin no 2 kita harus mengikuti langkah-langkah di bawah ini:
1) tulis di bawah metode yang menetapkan HostnameVerifier untuk HttpsURLConnection yang mengembalikan nilai true untuk semua kasus yang berarti kita mempercayai 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) tulis metode di bawah ini, yang memanggil doTrustToCertificates sebelum mencoba menyambung ke 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());
}
Panggilan ini akan mengembalikan kode respons = 200 berarti koneksi berhasil.
Untuk detail lebih lanjut dan contoh contoh Anda dapat merujuk ke URL .