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/