Bất cứ khi nào chúng tôi cố gắng kết nối với URL,
nếu máy chủ tại trang web khác đang chạy trên giao thức https và bắt buộc chúng tôi phải giao tiếp thông qua thông tin được cung cấp trong chứng chỉ thì chúng tôi có tùy chọn sau:
1) yêu cầu chứng chỉ (tải xuống chứng chỉ), nhập chứng chỉ này vào cửa hàng tin cậy. Bạn có thể tìm thấy cách sử dụng java đáng tin cậy mặc định trong \ Java \ jdk1.6.0_29 \ jre \ lib \ security \ cacerts, sau đó nếu chúng tôi thử kết nối lại với kết nối URL sẽ được chấp nhận.
2) Trong các trường hợp kinh doanh thông thường, chúng tôi có thể đang kết nối với các URL nội bộ trong các tổ chức và chúng tôi biết rằng chúng đúng. Trong những trường hợp như vậy, bạn tin tưởng rằng đó là URL chính xác, Trong những trường hợp như vậy ở trên, mã có thể được sử dụng mà sẽ không bắt buộc phải lưu trữ chứng chỉ để kết nối với URL cụ thể.
đối với điểm số 2, chúng ta phải làm theo các bước sau:
1) viết bên dưới phương thức đặt HostnameVerifier cho HttpsURLConnection trả về true cho mọi trường hợp có nghĩa là chúng tôi đang tin tưởng 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) viết phương thức dưới đây, gọi doTrustToCertificates trước khi cố gắng kết nối với 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());
}
Cuộc gọi này sẽ trả về mã phản hồi = 200 nghĩa là kết nối thành công.
Để biết thêm chi tiết và ví dụ mẫu, bạn có thể tham khảo URL .