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/