ssl-certificate – Websphere中的证书链接错误

我正在尝试从url 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");

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

>将com.ibm.websphere.ssl.retrieveLeafCert设置为true
>使用url作为someurl和端口443检索证书,并将其添加到信任库.
>重新启动服务器

但我得到以下异常:

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)
最佳答案
我假设你有一个Web应用程序,它试图访问该宁静的服务.

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

登录Web管理控制台:

>转到安全> SSL证书和密钥管理>密钥库和证书> NodeDefaultTrustStore>签名者证书
>单击从端口检索按钮,然后指定主机名,443端口和别名.
>单击检索歌手信息按钮.
>验证是否导入了正确的证书(父级).
>保存,然后重新启动.

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

转载注明原文:ssl-certificate – Websphere中的证书链接错误 - 代码日志