Свойство quarkus.http.ssl.certificate.key-store-file не работает, невозможно найти действительный путь сертификации к запрошенной цели - PullRequest
0 голосов
/ 20 марта 2020

Мое приложение 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.

Может ли это быть ошибкой или я что-то упустил?

1 Ответ

0 голосов
/ 25 марта 2020

Если я правильно понимаю эту проблему, ваше приложение Quarkus является клиентом, который подключается к какому-либо серверу по протоколу HTTPS.

В этом случае вам действительно нужно предоставить сертификат, который используется для проверки сервера, который ваше приложение пытается подключиться к. Вот почему это работает, когда вы предоставили хранилище доверенных сертификатов с использованием параметров javax. net .ssl. *.

Руководство, упомянутое вами в документации Quarkus, касается предоставления сервера с SSL. Таким образом, в этом случае вам необходимо предоставить хранилище ключей. Я не знаю, поддерживает ли сам Quarkus предоставление хранилища доверенных сертификатов с использованием указанных c свойств. Однако, в зависимости от способа подключения вашего приложения к HTTPS-серверу, вы можете попытаться настроить его там.

...