我有一个简单的 Spring 启动服务( service A
)它暴露了一些restapi。为了添加https支持,我使用了颁发给另一个服务的相同证书( service B
)在同一个盒子里。这是我的application.properties文件
server.ssl.enabled=true
server.ssl.client-auth=need
server.ssl.key-store=keystore.jks
server.ssl.key-store-password=password
server.ssl.key-store-type=JKS
server.ssl.trust-store-password=password
server.ssl.trust-store=keystore.jks
server.ssl.trust-store-type=JKS
当连接到 service A
是由一个不是 service B
. 我启用了服务之间的相互身份验证,以便验证客户端证书。当请求来自 B
至 A
,我出错了
javax.net.ssl.SSLHandshakeException: Received fatal alert: bad_certificate
at sun.security.ssl.Alert.createSSLException(Alert.java:131)
at sun.security.ssl.Alert.createSSLException(Alert.java:117)
在启用ssl调试之后,我发现这个错误导致了这个错误
upcoming handshake states: server finished[20]
***Certificate chain
<Empty>
***
https-jsse-nio-8090-exec-4, fatal error: 42: null cert chain
我反复检查了密钥库和信任库是否设置正确,但没有发现任何问题。有没有一种方法可以让服务器和客户端拥有相同的证书?感谢任何指点我如何使它工作(同一证书),因为我已经为此奋斗了一个星期。
1条答案
按热度按时间qeeaahzv1#
你的夹克里有整条链子吗?如果你看里面,你有整个链的根证书吗?
错误告诉你它找不到链条。您的证书可能是自签名的?或者你的jks没有完整的链条。
请参阅类似的stackoverflow问题:cameljettywebsocketserver,致命错误:42:null证书链