Websphere中的证书链接错误

时间:2014-12-30 07:18:11

标签: ssl-certificate websphere-7

我正在尝试从网址https://someurl.com使用RESTful服务。 我在代码中添加了以下属性:

 Security.setProperty("ssl.SocketFactory.provider", "com.ibm.jsse2.SSLSocketFactoryImpl");
 Security.setProperty("ssl.ServerSocketFactory.provider", "com.ibm.jsse2.SSLServerSocketFactoryImpl");
 Security.setProperty("javax.net.ssl.trustStore", "cacerts.jks");
 Security.setProperty("javax.net.ssl.keyStore", "keystore.jks");
 Security.setProperty("javax.net.ssl.keyStoreType", "pkcs12");
 Security.setProperty("javax.net.ssl.trustStoreType", "JKS");

到目前为止,我所做的配置更改是:

  1. com.ibm.websphere.ssl.retrieveLeafCert设为true
  2. 使用url作为someurl和端口443检索证书,并将其添加到信任库。
  3. 重新启动服务器
  4. 但是我得到以下例外:

    java.security.cert.CertPathValidatorException: Certificate chaining error
    javax.net.ssl.SSLHandshakeException: com.ibm.jsse2.util.h: PKIX path building failed:          java.security.cert.CertPathBuilderException: PKIXCertPathBuilderImpl could not build a valid CertPath.; internal cause is:
      java.security.cert.CertPathValidatorException: The certificate issued by CN=Walmart Root CA, O=Wal-Mart Stores Inc is not trusted; internal cause is:
      java.security.cert.CertPathValidatorException: Certificate chaining error
      at com.ibm.jsse2.o.a(o.java:22)
      at com.ibm.jsse2.SSLSocketImpl.a(SSLSocketImpl.java:423)
      at com.ibm.jsse2.kb.a(kb.java:192)
      at com.ibm.jsse2.kb.a(kb.java:176)
      at com.ibm.jsse2.lb.a(lb.java:53)
      at com.ibm.jsse2.lb.a(lb.java:464)
      at com.ibm.jsse2.kb.s(kb.java:545)
      at com.ibm.jsse2.kb.a(kb.java:530)
      at com.ibm.jsse2.SSLSocketImpl.a(SSLSocketImpl.java:79)
      at com.ibm.jsse2.SSLSocketImpl.h(SSLSocketImpl.java:437)
      at com.ibm.jsse2.SSLSocketImpl.a(SSLSocketImpl.java:142)
      at com.ibm.jsse2.SSLSocketImpl.startHandshake(SSLSocketImpl.java:686)
      at com.ibm.net.ssl.www2.protocol.https.c.afterConnect(c.java:98)
      at com.ibm.net.ssl.www2.protocol.https.d.connect(d.java:13)
      at com.ibm.net.ssl.www2.protocol.https.b.connect(b.java:6)
      at com.dwl.tcrm.tester.RESTClient_2.main(RESTClient_2.java:76)
    

2 个答案:

答案 0 :(得分:15)

我假设您有一个Web应用程序,它正在尝试访问该服务。

首先,您不应该通过javax.net.ssl.*属性设置商店,而是使用WebSphere中提供的SSL配置。因此,请评论所有这些setProperty()次来电。 其次,您必须将服务服务器证书添加到信任库。

登录网络管理控制台:

  • 转到Security > SSL certificate and key management > Key stores and certificates > NodeDefaultTrustStore > Signer certificates
  • 单击Retrieve from port按钮,然后指定主机名,443端口和别名。
  • 点击Retrieve singer information按钮。
  • 验证是否导入了正确的证书(父级)。
  • 保存并重新启动。

在某些版本中,导入了子证书(而不是根目录),在这种情况下,您必须手动下载根证书和中间证书(例如,通过浏览器,并将其导入NodeDefaultTrustStore,但这次使用的是Add按钮,而不是Retrieve..

答案 1 :(得分:2)

这意味着您的证书未添加到cacerts中。尝试以

执行此命令

keytool -list -v -keystore your_path_to_cacerts(在cacerts中提供cert列表) 通过匹配证书的序列号进行检查。如果不存在,请按照以下步骤进行操作

导出中级证书:Internet Explorer - >工具 - >互联网选项 - >内容 - >证书 - > 要查看证书路径:选择证书 - >查看 - >认证路径 - > 导出证书:选择证书 - >出口 - > DER

编码二进制格式 - >保存(来自Firefox - >工具 - >选项 - >高级 - >加密 - >查看证书) (在此处给出 - http://www-01.ibm.com/support/docview.wss?uid=swg21592616)之后,使用以下命令

添加此导出的证书

keytool -import -trustcacerts -Keystore CACERTS(path)-alias alias -file cert path in step 3

我的问题是一样的,我可以按照以下步骤解决问题