Назад | Перейти на главную страницу

JRE не удается установить соединение LDAPS с AD после импорта сертификата RootCA в хранилище доверенных сертификатов cacerts

LDAPS работает через ldp.exe и через ряд других программ в системах Windows и Linux, которые, похоже, не требуют корневого сертификата. вообще. Некоторым программам, использующим JSSE, не удается подключиться после импорта корневого и промежуточного CA в хранилище доверенных сертификатов 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 повсеместно не нравится цепочка сертификатов, основанная на ошибках.

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

openssl s_client -connect -showcerts domain:port

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

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

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

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

Изменить: см. Ответ

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

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

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

AlternateSignatureAlgorithm=1 к 0

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

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

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

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

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