【发布时间】:2020-11-25 20:24:31
【问题描述】:
我有一个简单的 Spring Boot 服务 (service A),它暴露了一些 REST API。为了添加 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
我检查并重新检查密钥库和信任库是否设置正确,但没有运气。有没有办法可以让具有相同证书的服务器和客户端一起工作?感谢任何关于我如何使它工作(使用相同的证书)的指示,因为我已经为此苦苦挣扎了一周。
【问题讨论】:
标签: java spring-boot ssl ssl-certificate