2016-10-04 90 views
1

当我的其中一台服务器尝试连接到安全端口时,我收到SSL异常。javax.net.ssl.SSLHandshakeException:连接到安全端口时发生java.security.cert.CertificateException

javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: PKIXCertPathBuilderImpl could not build a valid CertPath. java.security.cert.CertificateException: PKIXCertPathBuilderImpl could not build a valid CertPath. PKIXCertPathBuilderImpl could not build a valid CertPath 

我已在jvm.options信任存储区:

-Djavax.net.ssl.trustStore=/home/rpp/TrustStore 
-Djavax.net.ssl.trustStorePassword=passw0rd 
-Djavax.net.ssl.trustStoreType=jks 

在server.xml中我已经加入

<keyStore id="defaultKeyStore" location="/root/ssl/bmx-zuu.net.jks" password="passw0rd" /> 

有,我有添加任何其他设置?

+0

它是自签名证书吗? – Azim

+0

@Azim是它是一个自签名证书 – user1692342

回答

2

您可能想要尝试在Liberty上定义SSL配置,如下所示。 Keystore的定义与上面定义的完全相同,但在server.xml中添加TrustStore。假设是TrustStore.jks拥有签署者证书来与服务器建立信任关系。

<ssl id="defaultSSLConfig" keyStoreRef="defaultKeyStore" trustStoreRef=“myTrustStore"/> 
     <<keyStore id="defaultKeyStore" location="/root/ssl/bmx-zuu.net.jks" password="passw0rd" /> 
     <keyStore id=“myTrustStore" location="${server.config.dir}/TrustStore.jks" password="mypassword" type="JKS"/> 
+0

哇这个工作! Liberty不读取jvm选项? – user1692342

+1

Liberty使用SSLContext.setDefault()将其默认SSLContext设置为进程默认SSLContext。那么你的jvm.options文件中设置的内容将被清除。这里提到http://www.ibm.com/support/knowledgecenter/SSEQTP_8.5.5/com.ibm.websphere.wlp.doc/ae/rwlp_liberty_ssl_defaults.html – Alaine

0

使用

openssl s_client -connect <hostname>:<portnumber> -showcerts 

查看输出并确定证书的主体和签发的尝试。

验证证书的颁发者是否在您的TrustStore文件中。

如果这是从中间CA发出的,则服务器应该呈现直至根路径(不包括根CA)的颁发链。您的信任存储应包含根CA证书。

+0

它似乎不是信任库的问题,因为这与Tomcat一起使用。我在Liberty – user1692342

+0

面临这个问题自由是否试图呼吁TLS上的某些内容?设置信托商店那样适合自由只会允许它信任由那里发行的证书 –

+0

如何验证?有没有其他的方式来设置信任商店? – user1692342