2008-09-28 118 views
0

我想用ssl调用webservice。 我如何获得相关的服务器证书,以便我可以将其导入到我的信任库? 我知道从主方法使用属性com.ibm.ssl.enableSignerExchangePrompt,但我会手动将服务器证书添加到我的信任库。服务器证书和客户端信任库

我不想要这个属性在任何我的servlet设置

任何帮助是极大的赞赏 感谢 达明

+0

你使用什么编程语言?顺便说一句,除非你真的想添加证书programmaticaly,有很多工具可以做到这一点,而无需编写一行代码。 – Alexander 2008-09-28 18:34:09

+0

您可以通过为服务器获取适当的证书(由知名CA签名)来解决该问题。向信任库添加特定证书的一个缺点是,如果服务器的证书发生更改,则应用程序将停止工作,直到您再次更新信任库。 – Alexander 2008-09-28 18:39:43

回答

2

您可以通过实现自己的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(); 
0

如果您浏览到该网站在网页浏览器,你可以看看由安全信息点击小挂锁图标,并在弹出的对话框中保存证书。

步骤为Chrome

  1. 点击挂锁(在地址栏中)
  2. 点击“证书信息”
  3. 根据“详细资料”选项卡,您可以选择“复制到文件.. '。