JRE fails to establish LDAPS connection with AD after RootCA cert imported to cacerts truststore

JRE fails to establish LDAPS connection with AD after RootCA cert imported to cacerts truststore

LDAPS работает через ldp.exe и через ряд других программ в системах Windows и Linux, которым, по-видимому, вообще не требуется Root Cert. Некоторые программы, использующие JSSE, не могут подключиться после импорта корневого и промежуточного CA в truststore cacerts.

Я протестировал импорт сертификата LDAPS, присутствующего в NTDS\Personal (из AD), непосредственно в cacerts, и в некоторых приложениях, использующих Java, это приводит к работе защищенного LDAP.

В программах, использующих Java и терпящих неудачу, при импорте корневого сертификата возникает ошибка:

[Корневое исключение — javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: проверка пути PKIX не удалась: java.security.cert.CertPathValidatorException: проверка подписи не удалась]

Иногда при импорте сертификата LDAPS возникает ошибка:

[Корневое исключение — javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: Сертификаты не соответствуют ограничениям алгоритма]

(даже после комментирования java.security)

ИЛИон начинает работать в зависимости от программы, использующей JRE; однако, общая проблема заключается в том, что JRE, судя по ошибкам, не всегда поддерживает цепочку сертификатов.

Мои CDP/AIA доступны по внутреннему протоколу HTTP, и все сертификаты подписаны доверенной частной внутренней двухуровневой инфраструктурой открытых ключей Windows.

openssl s_client -connect -showcerts domain:port

Возвращает правильную цепочку сертификатов, но также и ошибку:

verify error:num=20:unable to get local issuer certificate

Очевидно, это связано с тем, что OpenSSL не видит корневой сертификат, поэтому даже с -cafileприложением я получаю ту же ошибку, что может быть показательно, но отпечаток в цепочке сертификатов для корневого сертификата такой же, как и у, -cafileтак что, похоже, все должно быть правильно...

На данный момент я начинаю думать, что 70% всех статей «Как включить LDAPS с помощью Java» неверны (они все, безусловно, достаточно противоречат друг другу), и что правила JAVA CAPS более понятны, поскольку от меня требуется импортировать фактический сертификат LDAPS, а не просто доверять корневому сертификату.https://docs.oracle.com/cd/E19509-01/820-3399/ggfrj/index.html

Редактировать: См. ответ

Так это похоже на проблему конфигурации моего сертификата или на что-то еще, специфическое для Java?

решение1

Оказывается, я сделал все технически правильно в плане настройки PKI. Ошибки были из-за того, что мои сертификаты были подписаны с помощью RSASSA-PSS. Java 1.8 не поддерживает PKCS #1 v2.1.

Мне пришлось перегенерировать всю цепочку сертификатов от Root до Issuing CA. Это потребовало редактирования CAPolicy.inf

AlternateSignatureAlgorithm=1к0

Также строка cmd certutil -setreg ca\csp\alternatesignaturealgorithm 0

Также необходимо указать вручную.

Казалось, что это проблема с сертификатом, но я никогда не думал, что проблема будет в совместимости подписей. Урок усвоен.

Связанная проблема: Совместимость с поставщиком центра сертификации Microsoft

Связанные источники: https://pkisolutions.com/pkcs1v2-1rsassa-pss/

Связанный контент