Spring Boot微服务无法通过https连接config-server



我已经成功地改变了我所有的微服务,通过https而不是默认的http来调用彼此的REST api。只剩下配置服务器,而且总是出错。目前正在尝试通过bootstrap.properties文件中定义的spring.cloud.config.uri=https://localhost:8888/my-config-server与它连接。我的application.properties像这样定义商店:

server.ssl.key-store=classpath:SSL.jks
server.ssl.key-store-type=pkcs12
server.ssl.key-store-password=Password!
server.ssl.key-alias=SSL

尝试连接配置服务器时抛出:

I/O error on GET request for "https://localhost:8888/my-config-server: PKIX path building failed
[...]
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

这对我来说不是一个新的错误,因为我在连接其他服务到api网关时遇到了这个问题,我通过使用System.setProperty("javax.net.ssl.trustStore", ...);解决了这个问题。然而,这似乎并没有为配置服务器做任何事情。我已经打开了-Djavax.net.debug=all,但我对这个很陌生,所以我真的不知道该怎么做。我可以肯定地告诉你的是

"ClientHello": {
"client version": "TLSv1.2" .....

,后面跟着

"ServerHello": {
"server version": "TLSv1.2" ....

一旦达到以下值,它就会失败:

Consuming server Certificate handshake message (
"Certificate": {
"certificate_request_context": "",
"certificate_list": [  
{
"certificate": {
"version": "v3" ....

变成Fatal (CERTIFICATE_UNKNOWN): PKIX path building failed。我已经仔细检查了我的应用程序是否接受TLSv1.2和TLSv1.3。我使用keytool命令生成密钥存储库:

keytool -genkeypair -alias SSL -keyalg RSA -keypass Password! -storetype PKCS12 -keystore SSL.jks -validity 1095 -keysize 2048

我错过了什么吗?我觉得我在这个实现上很迷失。

编辑:路径构建错误显示在微服务,而不是配置服务器。config-server似乎自己启动得很好,没有抛出任何错误/警告

所以我认为这是一种加载问题。config-server运行在https上,但其他属性在引导期间还没有加载任何密钥/证书!所以我遵循了这个原则,并强制我所有的微服务在引导过程中加载这些配置。关键是教程中的这一行:

org.springframework.cloud.bootstrap.BootstrapConfiguration = pl.piomin.services.account.SSLConfigServiceBootstrapConfiguration

您可以在运行应用程序时尝试添加这些参数。

-Djavax.net.ssl.trustStore=/app/security/truststore.jks
-Djavax.net.ssl.trustStorePassword=myTrustStorePassword

我个人通过以下步骤手动将认证从浏览器添加到JVM来解决认证问题:https://connect2id.com/blog/importing-ca-root-cert-into-jvm-trust-store

最新更新