Web services 服务器证书和客户端信任库
我正在尝试使用ssl调用Web服务。 如何获取相关服务器证书,以便将其导入我的信任库? 我从main方法知道如何使用属性com.ibm.ssl.enableSignerExchangePrompt,但我会手动将服务器证书添加到我的信任库中 我不希望在我的任何servlet中设置此属性 非常感谢您的帮助 谢谢Web services 服务器证书和客户端信任库,web-services,ssl,Web Services,Ssl,我正在尝试使用ssl调用Web服务。 如何获取相关服务器证书,以便将其导入我的信任库? 我从main方法知道如何使用属性com.ibm.ssl.enableSignerExchangePrompt,但我会手动将服务器证书添加到我的信任库中 我不希望在我的任何servlet中设置此属性 非常感谢您的帮助 谢谢 Damien如果您在web浏览器中浏览该网站,您可以点击小挂锁图标查看安全信息,并在弹出的对话框中保存证书 Chrome的步骤 单击挂锁(在地址栏中) 单击“证书信息” 在“详细信息”选项卡
Damien如果您在web浏览器中浏览该网站,您可以点击小挂锁图标查看安全信息,并在弹出的对话框中保存证书 Chrome的步骤
通过实现自己的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 socket
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_);
然后,使用该套接字,您可以提取服务器证书(put)并导入它
在受信任的密钥库中)
你在用什么编程语言?顺便说一句,除非您真的想添加证书程序,否则有很多工具可以做到这一点,而无需编写一行代码。您可以通过为服务器获取适当的证书(由知名CA签名)来解决此问题。将特定证书添加到信任库的一个缺点是,如果服务器的证书发生更改,应用程序将停止工作,直到您再次更新信任库。顺便说一句,您可以访问(并保存)checkServerTrusted中已存在的证书。
SSLSession session = sock.getSession();
Certificate[] certchain = session.getPeerCertificates();