javax.net.ssl.SSLHandshakeException:java.security.cert.CertificateException 连接到安全端口时

javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException while connecting to a secure port

当我的其中一台服务器尝试连接到安全端口时,我遇到了 SSL 异常。

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" />

我还需要添加其他设置吗?

尝试使用

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

查看输出并确定证书的主题和颁发者。

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

如果这是从中间 CA 颁发的,服务器应该将颁发链呈现到路径的根(减去根 CA)。您的信任库应包含根 CA 证书。

您可能想尝试在 Liberty 上定义 SSL 配置,如下所示。密钥库的定义与上面的定义完全相同,但在 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"/>