建立 SSL 主机连接时,无法使用签名证书验证证书



我创建了一个具有自定义密钥库和自定义CA的自定义cacerts。 我只是收到下面的异常消息。

javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at sun.security.ssl.Alerts.getSSLException(Alerts.java:192) ~[?:1.7.0_45]
at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1884) ~[?:1.7.0_45]
at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:276) ~[?:1.7.0_45]
at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:270) ~[?:1.7.0_45]
at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1341) ~[?:1.7.0_45]
at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:153) ~[?:1.7.0_45]
at sun.security.ssl.Handshaker.processLoop(Handshaker.java:868) ~[?:1.7.0_45]
at sun.security.ssl.Handshaker.process_record(Handshaker.java:804) ~[?:1.7.0_45]
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1016) ~[?:1.7.0_45]
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1312) ~[?:1.7.0_45]
at sun.security.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:702) ~[?:1.7.0_45]
at sun.security.ssl.AppOutputStream.write(AppOutputStream.java:122) ~[?:1.7.0_45]
at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82) ~[?:1.7.0_45]
at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:140) ~[?:1.7.0_45]

异常只是指出定制密钥库中服务器端证书链中的一个证书被错误地颁发/签名,或者不是放置在客户端的定制证书文件的一部分。由于链中存在不受信任的证书,SSL 握手由于缺少正确/良好的证书路径而失败。 要了解此问题的根本原因,请尝试以PEM编码格式提取所有中间证书,根证书和私钥证书,然后运行以下命令

请注意,以下内容完全取决于服务器上安装的OpenSSL。(运行OpenSSL版本-a以显示它是否是服务器的一部分(

openssl verify -verbose -CAfile <(cat ServerCA1.pem ServerCA2.pem RootCA.pem)
pvtkey_hostORdns_cert.pem

执行上述命令时,您应该将错误显示为 o/p

如果您的服务器端由多个服务器组成,则分别登录每个主机并运行上述命令。请参阅以下站点,以更深入地了解如何使用 openssl 验证证书

[来源]:使用 openssl 验证证书链 验证或在此处查看一个非常好的博客:- https://mail.python.org/pipermail/cryptography-dev/2016-August/000676.html

: 如果您具有 java 密钥库,并且没有 CA 提供并已导入到自定义密钥库中的原始证书,请先使用 keytool 将 JKS 转换为 PKCS12,然后提取私有密钥证书。

keytool -importkeystore -srckeystore customeKeystore.jks -destkeystore customKeystore_pkcs.p12 -srcstoretype JKS - deststoretype PKCS12 

根据提示提供密码,并避免在命令中传递密码

现在使用下面来提取证书。 openssl pkcs12 -in customKeystore_pkcs.p12 -nodes -out pvtkey_hostORdns_cert.pem 使用相同的密钥工具实用程序签出新生成的 PKCS12 密钥库

keytool -list -v -keystore customKeystore_pkcs.p12 -storetype pkcs12

您还可以使用

openssl x509 -inform PEM -in pvtkey_hostORdns_cert.pem -noout -text

最新更新