Использование PKIXValidator с BouncyCastleFipsProvider для проверки сертификата сервера? - PullRequest
0 голосов
/ 20 февраля 2019

У нас есть веб-приложение Java на основе Apache Tomcat, работающее на JDK 1.8, и недавно нам пришлось усилить его функции, связанные с безопасностью, чтобы соответствовать определенным правилам, поэтому теперь мы используем BouncyCastleFipsProvider в качестве основной безопасности нашей JVMпровайдер, настроенный в java.security, как предложено в документации BC:

security.provider.1=org.bouncycastle.jcajce.provider.BouncyCastleFipsProvider
security.provider.2=com.sun.net.ssl.internal.ssl.Provider BCFIPS
security.provider.3=sun.security.provider.Sun 

Я столкнулся с проблемой, которая теперь вызывает один из наших сторонних сервисов через HTTPS, поскольку его цепочка сертификатов не может быть проверена.Исключение составляет:

Caused by: sun.security.validator.ValidatorException: End user tried to act as a CA
        at sun.security.validator.SimpleValidator.checkBasicConstraints(SimpleValidator.java:320)
        at sun.security.validator.SimpleValidator.checkExtensions(SimpleValidator.java:237)
        at sun.security.validator.SimpleValidator.engineValidate(SimpleValidator.java:221)
        at sun.security.validator.Validator.validate(Validator.java:262)
        at sun.security.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:324)
        at sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:229)
        at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:124)

Этот HTTPS-вызов работал нормально, поэтому я отладил рукопожатие SSL и заметил, что в предыдущей (рабочей) версии (настройки безопасности JVM по умолчанию с поставщиком безопасности Sun)) проверка выполняется с помощью другого класса: sun.security.validator.PKIXValidator.В текущей (не работающей) настройке SSLContext предоставляется вторым провайдером в приведенном выше списке, который является «провайдером Sun JSSE (режим FIPS, провайдер шифрования BCFIPS)»

У меня нет такого опытаJCE, JSSE, Bouncy Castle, поэтому мне интересно, если кто-нибудь знает, можно ли использовать PKIXValidator с com.sun.net.ssl.internal.ssl.Provider («BCFIPS») для проверки сертификатов сервера? Если да, то как мне включить это?

ОБНОВЛЕНИЕ: Мы также установили следующие параметры в нашем файле java.security, причину я нашел для этого в одном из наших документовis: «PKIX недоступен как алгоритм диспетчера доверия».Я считаю, что это то, что я должен проверить еще раз.

ssl.KeyManagerFactory.algorithm=SunX509
ssl.TrustManagerFactory.algorithm=SunX509

UPDATE2: Я попытался установить свойства вышеуказанного алгоритма в PKIX, и это добилось цели, соединение HTTPS можетбыть установленным сейчас.

Примечание: сертификат этого третьего лица действителен, его цепочка доверена браузерам и выдается известным корневым центром сертификации.Проблема в том, что они отправляют свой собственный сертификат дважды в цепочке, что приводит к сбою SimpleValidator.

Бонусный вопрос: в чем разница между первыми двумя поставщиками в приведенном выше списке?

Спасибозаранее.

1 Ответ

0 голосов
/ 22 февраля 2019

Установка этих параметров в java.security решает проблему:

ssl.KeyManagerFactory.algorithm=PKIX
ssl.TrustManagerFactory.algorithm=PKIX

См. Также: https://bugs.openjdk.java.net/browse/JDK-8169745

...