【问题标题】:PKIX path building failed while Eureka Client connecting with SSL enabled Eureka Server in Spring CloudPKIX 路径构建失败,而 Eureka Client 在 Spring Cloud 中与 SSL 启用 Eureka Server 连接
【发布时间】:2017-10-17 19:20:00
【问题描述】:

我正在使用 Spring Boot 构建基于云的微服务架构。我们仅使用嵌入式容器,即用于 Spring Boot 的 tomcat。此外,我们还向 jvm 密钥库添加了证书。

为了更简单,我只创建了两个 spring boot 应用。

1) Spring Boot Eureka Server
2) Spring Boot Eureka 客户端

两者都具有与上述相同的配置,当我在 https 上启动 Eureka 服务器时,它成功启动,没有任何问题,然后我启动 Eureka 客户端,它运行良好,直到它请求注册到 Eureka 服务器,然后它开始失败。

有趣的是,当我将 Eureka Server 保持在非安全端口上时,即保持在 http 上,那么我所有启用 ssl 的 eureka 客户端都可以毫无问题地连接,但我在架构中并不真正需要它,因为我也使用 zuul for single我所有微服务的入口点。

当它是 http 时一切正常,但在启用 https 和 SSL 时它开始失败。

这是我的 Eureka 服务器配置。

eureka.instance.hostname= localhost
eureka.client.registerWithEureka= false
eureka.client.fetchRegistry= false
server.port= 8761

server.ssl.enabled = true
server.ssl.key-store=classpath:ssl.keystore
server.ssl.key-store-password=changeit

and my Eureka Client Configuration.
server.port=8181
spring.application.name=my-client
eureka.instance.hostname=localhost
eureka.instance.securePort = 8181
eureka.instance.securePortEnabled = true
eureka.instance.nonSecurePortEnabled = false
eureka.instance.metadataMap.hostname = ${eureka.instance.hostname}
eureka.instance.metadataMap.securePort = ${server.port}
eureka.instance.homePageUrl = https://${eureka.instance.hostname}:${server.port}/
eureka.instance.statusPageUrl = https://${eureka.instance.hostname}:${server.port}/admin/info
eureka.client.serviceUrl.defaultZone: https://localhost:8761/eureka/ 
server.ssl.enabled = true
server.ssl.key-store=classpath:ssl.keystore
server.ssl.key-store-password=changeit

下面是异常跟踪。

Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at sun.security.validator.PKIXValidator.doBuild(Unknown Source) ~[na:1.8.0_91]
at sun.security.validator.PKIXValidator.engineValidate(Unknown Source) ~[na:1.8.0_91]
at sun.security.validator.Validator.validate(Unknown Source) ~[na:1.8.0_91]
at sun.security.ssl.X509TrustManagerImpl.validate(Unknown Source) ~[na:1.8.0_91]
at sun.security.ssl.X509TrustManagerImpl.checkTrusted(Unknown Source) ~[na:1.8.0_91]
at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(Unknown Source) ~[na:1.8.0_91]
... 50 common frames omitted

我确实尝试了很多次尝试以使其工作,其他人在 stackoverflow 中尝试过,但老实说,他们都没有工作。我还探索了其他建议并将它们纳入其中,但这也不起作用。我不确定我的配置有什么问题。有没有人遇到过类似的问题以及如何解决的?

如果有人对此有见解,我将不胜感激。

【问题讨论】:

    标签: spring-boot ssl-certificate spring-cloud netflix-eureka spring-cloud-netflix


    【解决方案1】:

    IHO 你需要在你的 Eureka 客户端配置trust-store,而不是key-storeserver.ssl.key-storeserver.ssl.key-store-password 属性仅适用于您的嵌入式容器。您需要在您的 Eureka 客户端中设置的是 trust-store,当您的 Eureka 客户端将自己注册到 Eureka Server 时,将在从您的服务器验证 SSL 证书时使用它

    尝试在您的 eureka 客户端上定义以下系统属性。

    java -Djavax.net.ssl.trustStore=xxxx
    java -Djavax.net.ssl.trustStorePassword=xxxx
    

    【讨论】:

      猜你喜欢
      • 2011-01-18
      • 1970-01-01
      • 2022-01-26
      • 2019-05-03
      • 1970-01-01
      • 2020-11-04
      • 2020-10-27
      • 2017-01-11
      • 1970-01-01
      相关资源
      最近更新 更多