服务器证书和客户端信任库
时间:2020-03-06 14:50:58 来源:igfitidea点击:
我正在尝试使用ssl调用网络服务。
如何获得相关的服务器证书,以便可以将其导入到我的信任库中?
我从主要方法中了解到属性com.ibm.ssl.enableSignerExchangePrompt的使用,但是我会手动将服务器证书添加到我的信任库中。
我不希望在我的任何servlet中设置此属性
任何帮助是极大的赞赏
谢谢
达米安
解决方案
如果我们在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 ockock
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();