Мое приложение Quarkus должно подключаться к некоторым HTTPS-ресурсам, для которых мне нужно использовать пользовательское хранилище ключей.
Я следовал этому руководству, чтобы настроить SSL с помощью пользовательского jks: https://quarkus.io/guides/http-reference#supporting -secure-connections-with-ssl
Таким образом, я добавил два свойства в свой приложение с расположением файловой системы хранилища ключей и его паролем:
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 (./mvnw clean compile quarkus:dev -Djavax.net.debug=all
) I я не вижу упоминания о моем хранилище ключей (только каскады 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
.
Может ли это быть ошибкой или я что-то упустил?