我正在使用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 回答
IHO你需要在你的Eureka客户端配置
trust-store
,而不是key-store
. 属性server.ssl.key-store
和server.ssl.key-store-password
仅适用于您的嵌入式容器 . 您在Eureka客户端中设置的内容是trust-store
,当您在eureka客户端向Eureka Server注册时,将在您的服务器验证SSL证书时使用尝试在您的eureka客户端上定义以下系统属性 .