У нас есть веб-приложение 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.
Бонусный вопрос: в чем разница между первыми двумя поставщиками в приведенном выше списке?
Спасибозаранее.