首页 文章

在使用SSL连接的Eureka客户端启用Spring Cloud中的Eureka Server时,PKIX路径构建失败

提问于
浏览
0

我正在使用spring boot构建基于 Cloud 的微服务架构 . 我们只使用嵌入式容器,这是tomcat用于spring boot . 此外,我们还为jvm密钥库添加了证书 .

为了使它更简单,我只创建了两个spring boot app .

1)Spring引导Eureka Server
2)Spring启动Eureka客户端

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

有趣的是,当我将Eureka Server保留在非安全端口上,即保持http,然后我的所有eureka客户端启用了ssl,能够连接而没有任何问题,但我不需要在我的架构中,因为我也使用zuul作为单一入口点我所有的微服务 .

当它是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但但说实话,没有一个工作 . 我还探讨了其他建议并将它们合并,但这也不起作用 . 我不确定我的配置有什么问题 . 有没有人遇到类似的问题以及如何解决?

如果有人对此有所了解,我将非常感激 .

1 回答

  • 3

    IHO你需要在你的Eureka客户端配置 trust-store ,而不是 key-store . 属性 server.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
    

相关问题