java - Spring Boot 应用程序通过 HTTPS 调用另一个 Spring Boot 应用程序并获取 SSL 证书验证错误 : "signature check failed"

标签 java spring docker tomcat https

我有两个 Spring Boot 应用程序,每个应用程序都在自己的 docker 容器中运行。

一个是 REST 客户端,另一个是 REST API。

当客户端调用 API(即 GET https://localhost:8443/api/someResource )时,出现以下错误:

引起:javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIX 路径验证失败:java.security.cert.CertPathValidatorException:签名检查失败

每个 spring boot 应用程序都有自己的 keystore 和自签名证书存储在 src/main/resources/keystore.p12

...这是我在 application.yml 文件中的内容: 以下属性:

server.ssl.key-store: classpath:keystore.p12
server.ssl.key-store-password: somethingsecure
server.ssl.keyStoreType: PKCS12
server.ssl.keyAlias: client or server (depending which .yml file your looking at)

我在 Docker 之外对此进行了测试,一切正常!我只是将 API 证书从 keystore.p12 文件中导出,并将其导入到我的 JRA cacerts 文件中。

你可以从我的 REST 客户端 Dockerfile 中看到,我在那里做了同样的事情:

FROM openjdk:8-jdk-alpine
EXPOSE 8443
WORKDIR /usr/src/app
COPY client.jar client.jar
COPY server.crt server.crt
RUN keytool -v -import -noprompt -alias server -file server.crt -keystore $JAVA_HOME/jre/lib/security/cacerts -storepass changeit
ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "client.jar"]

我打开了 SSL 调试,可以看到以下内容:

trustStore is: /usr/lib/jvm/java-1.8-openjdk/jre/lib/security/cacerts
trustStore type is : jks
trustStore provider is : 
init truststore

...

adding as trusted cert:
  Subject: CN=localhost, OU=Development, O=Microgen, L=Fleet, ST=Hampshire, C=UK
  Issuer:  CN=localhost, OU=Development, O=Microgen, L=Fleet, ST=Hampshire, C=UK
  Algorithm: RSA; Serial number: 0x4c1fbbc3
  Valid from Mon Apr 16 09:49:33 GMT 2018 until Tue Apr 16 09:49:33 GMT 2019

有什么想法吗?

谢谢,

最佳答案

我不是专家,但在导出和导入证书时,我想知道在您的新位置中证书链是否与您从中获取证书的位置相同。

在“原因”部分下有一个链接可能会提供一些见解

https://confluence.atlassian.com/kb/connecting-to-ssl-services-802171215.html

关于java - Spring Boot 应用程序通过 HTTPS 调用另一个 Spring Boot 应用程序并获取 SSL 证书验证错误 : "signature check failed",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52611845/

相关文章:

java - 如何在另一个实体中加载实体?

java - 我可以在同一个服务中使用两个存储库吗?

node.js - onlyoffice nextcloud “document could not be saved” nodeJS-postData错误

Java JNI : Creating a Swing Window using JNI from C

java - Ant - 如何在 javac 任务的类路径中使用文件集 id?

spring - 如何将查询提示添加到 spring data jpa querydsl 查询?

java - 如何从在 dockerized Tomee 服务器上运行的应用程序成功连接到 Dockerized DB2 数据库/服务器 - 两个容器都使用 jdk10?

docker - 在运行时设置 docker-compose.yml 的端口

java - 即使没有 dekker/peterson 的算法,Java 中的多线程也能工作吗?

java - 在测试用例中覆盖 hibernate sessionfactory 的数据源