【问题标题】:Spring Boot app calling another Spring Boot app over HTTPS and getting SSL certificate verification error: "signature check failed"Spring Boot 应用程序通过 HTTPS 调用另一个 Spring Boot 应用程序并获得 SSL 证书验证错误:“签名检查失败”
【发布时间】:2018-10-02 15:42:10
【问题描述】:

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

一个是REST Client,另一个是REST API。

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

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

每个 Spring Boot 应用程序都有自己的密钥库和自签名证书存储在 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 Client 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

有什么想法吗?

谢谢,

【问题讨论】:

标签: java spring docker tomcat https


【解决方案1】:

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

这是一个链接,可能会提供一些见解,在原因部分下

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

【讨论】:

    【解决方案2】:

    我今天早上设法解决了这个问题。服务器证书只是损坏了,并且由于重新生成,这有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-12
      • 1970-01-01
      • 2017-04-11
      • 2016-12-29
      • 2020-10-26
      • 1970-01-01
      • 1970-01-01
      • 2017-05-10
      相关资源
      最近更新 更多