我正在尝试使用 ssl 调用网络服务。我如何获得相关的服务器证书,以便我可以将其导入我的信任库?我知道从 main 方法使用属性 com.ibm.ssl.enableSignerExchangePrompt 但我会手动将服务器证书添加到我的信任库中。
我不想在我的任何 servlet 中设置此属性
非常感谢任何帮助谢谢 Damien
我正在尝试使用 ssl 调用网络服务。我如何获得相关的服务器证书,以便我可以将其导入我的信任库?我知道从 main 方法使用属性 com.ibm.ssl.enableSignerExchangePrompt 但我会手动将服务器证书添加到我的信任库中。
我不想在我的任何 servlet 中设置此属性
非常感谢任何帮助谢谢 Damien
您可以通过实现自己的 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 浏览器中浏览到该站点,您可以通过点击小挂锁图标来查看安全信息,然后在弹出的对话框中您可以保存证书。
Chrome 的步骤