java—同一台机器上具有相同证书的两个服务之间的相互身份验证

50pmv0ei  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(469)

我有一个简单的 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 . 我启用了服务之间的相互身份验证,以便验证客户端证书。当请求来自 BA ,我出错了

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

我反复检查了密钥库和信任库是否设置正确,但没有发现任何问题。有没有一种方法可以让服务器和客户端拥有相同的证书?感谢任何指点我如何使它工作(同一证书),因为我已经为此奋斗了一个星期。

qeeaahzv

qeeaahzv1#

你的夹克里有整条链子吗?如果你看里面,你有整个链的根证书吗?
错误告诉你它找不到链条。您的证书可能是自签名的?或者你的jks没有完整的链条。
请参阅类似的stackoverflow问题:cameljettywebsocketserver,致命错误:42:null证书链

相关问题