java - 同一台机器上具有相同证书的两个服务之间的相互认证

标签 java spring-boot ssl ssl-certificate

我有一个简单的 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
我检查并重新检查 keystore 和信任库是否设置正确,但没有运气。有没有办法可以让具有相同证书的服务器和客户端一起工作?感谢我如何使它工作(使用相同的证书)的任何指示,因为我已经为此苦苦挣扎了一周。

最佳答案

您的 JKS 是否包含整个链条?如果你往里看,你有没有一直到根证书的整个链条?
错误告诉你它找不到链。您的证书可能是自签名的?或者你的 JKS 没有完整的链条。
查看类似的 Stackoverflow 问题:CamelJettyWebSocketServer, fatal error: 42: null cert chain

关于java - 同一台机器上具有相同证书的两个服务之间的相互认证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65012210/

相关文章:

mobile - 移动 Web 浏览器中的 SSL 客户端证书身份验证

python - 用户无法与代理通信

objective-c - iOS - 以编程方式安装 SSL 证书

java - java中如何逐个打印字符串

java - 有没有办法创建一个标签,以便编译器运行时用 java 中的语句替换该标签

spring-boot - Spring Boot 单元测试端点 NullPointerException - 以及如何达到 100% 的覆盖率

ajax - Spring Boot - 外部 Tomcat 服务器 Ajax 身份验证失败消息

java - 在嵌入式 tomcat 中以 ROOT 身​​份部署

java - JFrame 编号输入

java - 为包含路径变量的 url 禁用 spring security