gpt4 book ai didi

java - 证书更新后"SSLHandshakeException: Error signing certificate verify"

转载 作者:行者123 更新时间:2023-12-01 18:18:29 25 4
gpt4 key购买 nike

我有一个 SpringBoot 2 应用程序,在带有 Java8 运行时的 Tomcat 8.5 中运行。它使用 JKS keystore 来存储两个不同的证书/ key ,这两个证书/ key 都由应用程序用于相互 TLS (mTLS)。

由于我们从 CA 管理员处检索了新版本的证书,一旦尝试客户端 mTLS 调用,应用程序就无法再使用 keystore ,但会出现以下异常。

Exception in thread "main" javax.net.ssl.SSLHandshakeException: Error signing certificate verify
at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1946)
at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:316)
at sun.security.ssl.ClientHandshaker.serverHelloDone(ClientHandshaker.java:1174)
at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:369)
at sun.security.ssl.Handshaker.processLoop(Handshaker.java:1037)
at sun.security.ssl.Handshaker.process_record(Handshaker.java:965)
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1064)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1367)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1395)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1379)
at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:559)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:167)
at UrlEngine.submit(UrlEngine.java:52)
at JCurl.execute(JCurl.java:126)
at JCurl.main(JCurl.java:62)
Caused by: java.security.InvalidKeyException: No installed provider supports this key: sun.security.pkcs.PKCS8Key
at java.security.Signature$Delegate.chooseProvider(Signature.java:1138)
at java.security.Signature$Delegate.engineInitSign(Signature.java:1188)
at java.security.Signature.initSign(Signature.java:553)
at sun.security.ssl.HandshakeMessage$CertificateVerify.<init>(HandshakeMessage.java:1591)
at sun.security.ssl.ClientHandshaker.serverHelloDone(ClientHandshaker.java:1171)
... 13 more

我们已从 PKCS12 来源多次重建 keystore ,并且在使用导出的证书和 key 时,例如 curl 一切工作正常。

最佳答案

我们终于找到了问题的解决方案。这是由 JKS keystore 中设置的别名引起的。这些操作使用脚本从 PKCS12 生成 JKS keystore ,同时将友好名称/别名设置为 JKS keystore 。由脚本自动生成并在 JKS 文件中设置的别名太长或包含无效字符。因此,我们通过将别名设置为一个非常短的名称(仅包含连字符和字母数字字符)来修复它。

因此,如果您使用以下命令遇到相同的问题,则可以解决该问题:

keytool -changealias -alias "previous-long-alias" -destalias "new-short-alias" -keystore /path/to/keystore.jks 

如果需要,请使用 -keypass-storepass 参数。

关于java - 证书更新后"SSLHandshakeException: Error signing certificate verify",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60323057/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com