我正在尝试使用 SSL 调用网络服务。如何获取相关的服务器证书,以便将其导入到我的信任库中?我知道从main方法使用属性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帐户
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();
如果在 Web 浏览器中浏览到该站点,则可以通过点击小挂锁图标来查看安全信息,然后在弹出的对话框中保存证书。
适用于浏览器的步骤
- 点击挂锁(在地址栏中)
- 点击"证书信息"
- 在"详细信息"选项卡下,您可以选择"复制到文件..."。