我想用ssl調用webservice。 我如何獲得相關的服務器證書,以便我可以將其導入到我的信任庫? 我知道從主方法使用屬性com.ibm.ssl.enableSignerExchangePrompt,但我會手動將服務器證書添加到我的信任庫。服務器證書和客戶端信任庫
我不想要這個屬性在任何我的servlet設置
任何幫助是極大的讚賞 感謝 達明
我想用ssl調用webservice。 我如何獲得相關的服務器證書,以便我可以將其導入到我的信任庫? 我知道從主方法使用屬性com.ibm.ssl.enableSignerExchangePrompt,但我會手動將服務器證書添加到我的信任庫。服務器證書和客戶端信任庫
我不想要這個屬性在任何我的servlet設置
任何幫助是極大的讚賞 感謝 達明
您可以通過實現自己的X509TrustManager以編程方式對Java執行此操作。
public class dummyTrustManager implements X509TrustManager {
public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
//do nothing
}
public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
// do nothing
}
public X509Certificate[] getAcceptedIssuers() {
//just return an empty issuer
return new X509Certificate[0];
}
}
然後你可以使用這種信任管理器創建一個SSL sockect
SSLContext context = SSLContext.getInstance("SSL");
context.init(null, new TrustManager[] { new dummyTrustManager() },
new java.security.SecureRandom());
SSLSocketFactory factory = context.getSocketFactory();
InetAddress addr = InetAddress.getByName(host_);
SSLSocket sock = (SSLSocket)factory.createSocket(addr, port_);
然後用插座,你可以只提取服務器證書(一放進口它 在信任密鑰庫)
SSLSession session = sock.getSession();
Certificate[] certchain = session.getPeerCertificates();
如果您瀏覽到該網站在網頁瀏覽器,你可以看看由安全信息點擊小掛鎖圖標,並在彈出的對話框中保存證書。
步驟爲Chrome
你使用什麼編程語言?順便說一句,除非你真的想添加證書programmaticaly,有很多工具可以做到這一點,而無需編寫一行代碼。 – Alexander 2008-09-28 18:34:09
您可以通過爲服務器獲取適當的證書(由知名CA簽名)來解決該問題。向信任庫添加特定證書的一個缺點是,如果服務器的證書發生更改,則應用程序將停止工作,直到您再次更新信任庫。 – Alexander 2008-09-28 18:39:43