java - 属性 quarkus.http.ssl.certificate.key-store-file 无法正常工作,无法找到请求目标的有效证书路径

标签 java ssl quarkus

我的 Quarkus 应用程序必须连接到一些 HTTPS 资源,我必须使用自定义 keystore 。

我已按照本指南使用自定义 jks 配置 SSL:https://quarkus.io/guides/http-reference#supporting-secure-connections-with-ssl

因此,我向应用程序添加了两个属性,包括 keystore 文件系统位置及其密码:

quarkus.http.ssl.certificate.key-store-file=/tmp/quarkus/keystore.jks
quarkus.http.ssl.certificate.key-store-password=mypassword

启动时我看到这个异常:

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 java.base/sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:439)
    at java.base/sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:306)
    at java.base/sun.security.validator.Validator.validate(Validator.java:264)
    at java.base/sun.security.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:313)
    at java.base/sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:276)
    at java.base/sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:141)
    at java.base/sun.security.ssl.CertificateMessage$T12CertificateConsumer.checkServerCerts(CertificateMessage.java:623)
    ... 32 more
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    at java.base/sun.security.provider.certpath.SunCertPathBuilder.build(SunCertPathBuilder.java:141)
    at java.base/sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:126)
    at java.base/java.security.cert.CertPathBuilder.build(CertPathBuilder.java:297)
    at java.base/sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:434)
    ... 38 more

2020-03-20 10:39:04,089 INFO  [io.qua.dev] (vert.x-worker-thread-1) Hot replace total time: 0.372s 

如果我使用 ssl debug 启动应用程序 (./mvnw cleancompile quarkus:dev -Djavax.net.debug=all),我看不到任何提及我的 keystore 的内容(只有JDK):

javax.net.ssl|DEBUG|01|main|2020-03-20 10:38:13.910 CET|TrustStoreManager.java:161|Inaccessible trust store: /Users/myuser/.sdkman/candidates/java/11.0.6.hs-adpt/lib/security/jssecacerts
javax.net.ssl|DEBUG|01|main|2020-03-20 10:38:13.911 CET|TrustStoreManager.java:112|trustStore is: /Users/myuser/.sdkman/candidates/java/11.0.6.hs-adpt/lib/security/cacerts
trustStore type is: pkcs12
trustStore provider is: 
the last modified time is: Wed Jan 15 13:06:55 CET 2020
javax.net.ssl|DEBUG|01|main|2020-03-20 10:38:13.911 CET|TrustStoreManager.java:311|Reload the trust store

但是,如果我使用常用​​的信任库 JVM 参数启动它,我可以看到它并且应用程序可以正常工作:

./mvnw clean compile quarkus:dev -Djavax.net.ssl.trustStore=/Users/myuser/development/keystore.jks -Djavax.net.ssl.trustStorePassword=mypassword  -Djavax.net.debug=all 
javax.net.ssl|DEBUG|01|main|2020-03-20 10:49:08.812 CET|TrustStoreManager.java:112|trustStore is: /tmp/quarkus/keystore.jks
trustStore type is: pkcs12
trustStore provider is: 
the last modified time is: Fri Mar 20 10:07:16 CET 2020
javax.net.ssl|DEBUG|01|main|2020-03-20 10:49:08.812 CET|TrustStoreManager.java:311|Reload the trust store

但是我希望它能够与 quarkus.http.ssl.certificate 参数一起使用。

这可能是一个错误还是我遗漏了什么?

最佳答案

如果我正确理解这个问题,您的 Quarkus 应用程序是一个使用 HTTPS 连接到某些服务器的客户端。

在这种情况下,您真正​​需要的是提供用于验证应用程序尝试连接的服务器的证书。这就是为什么当您使用 javax.net.ssl.* 参数提供信任库时它会起作用。

您在 Quarkus 文档中提到的指南是关于使用 SSL 公开服务器的。因此,在这种情况下您需要提供一个 keystore 。我不知道 Quarkus 本身是否支持使用特定属性提供信任库。但是,根据您的应用程序连接到 HTTPS 服务器的方式,您可以尝试在那里进行配置。

关于java - 属性 quarkus.http.ssl.certificate.key-store-file 无法正常工作,无法找到请求目标的有效证书路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60771856/

相关文章:

java - 从 JAR 运行应用程序时 URI 不是分层异常

java - 卡夫卡流 : Proper way to exit on error

sockets - 如何使用 python 在 ssl/tls 套接字连接中获取域的 IP

powershell - SSL证书申请过程中什么时候生成私钥?

aws-lambda - 使用相同的 Quarkus 代码库处理 AWS HTTP 和 SQS 事件

java - quarkus:IllegalStateException:您试图在 IO 线程上执行阻塞操作。这是不允许的,因为阻塞了 IO 线程

java - 你如何记录匿名函数?

java - ViewModel 没有零参数构造函数错误,原因是 ViewModelFactory 一直为 null(不是 100% 确定)

ssl - 在单声道中,如何控制 SSL/TLS 密码套件?

Quarkus native 可执行文件构建 : high memory consumption