2
我這個頁面上看到怎麼辦HTTPS寧非同步HTTP客戶端如何接受任何證書
http://sonatype.github.com/async-http-client/ssl.html
但如果我只是想忽略和接受任何證書作爲在這樣的環境我不現在關注中間人,因爲它處於一個孤立的環境中,我只是在做一些對質量保證數據進行自動化測試的東西。
也許我的問題是如何在java的SSL堆棧中僞造SSL,以便接受另一端的任何證書(因爲它是https,所以不是雙向的)。
在上面的鏈接,客戶端的公共代碼是
char[] keyStorePassword = "changeit".toCharArray();
KeyStore ks = KeyStore.getInstance("JKS");
//ks.load(keyStoreStream, keyStorePassword);
char[] certificatePassword = "changeit".toCharArray();
KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
kmf.init(ks, certificatePassword);
KeyManager[] keyManagers = kmf.getKeyManagers();
javax.net.ssl.TrustManager tm = new MyTrustMgr();
javax.net.ssl.TrustManager[] trustManagers = new javax.net.ssl.TrustManager[]{tm };
SecureRandom secureRandom = new SecureRandom();
SSLContext ctx = SSLContext.getInstance("TLS");
ctx.init(keyManagers, trustManagers, secureRandom);
return ctx;
好,工作過的是,我發現這裏面仍然沒有工作因爲某種原因
X509TrustManager tm = new X509TrustManager() {
public void checkClientTrusted(X509Certificate[] xcs,
String string) throws CertificateException {
}
public void checkServerTrusted(X509Certificate[] xcs,
String string) throws CertificateException {
}
public X509Certificate[] getAcceptedIssuers() {
return null;
}
};
SSLContext ctx = SSLContext.getInstance("TLS");
ctx.init(null, new TrustManager[] { tm }, null);
return ctx;
感謝, 院長