Я пытался заставить SSL-соединение работать с сервером LDAPS (Active Directory), но у меня продолжают возникать проблемы. Я пытался использовать это:
openssl s_client -connect the.server.edu:3269
Со следующим результатом:
verify error:num=20:unable to get local issuer certificate
Я подумал, хорошо, хорошо, сервер - это старый производственный сервер, которому несколько лет. Может быть, CA нет. Затем я извлек сертификат из вывода в файл pem и попытался:
openssl s_client -CAfile mycert.pem -connect the.server.edu:3269
И это тоже не сработало.
Что мне не хватает? Разве это не должно работать ВСЕГДА?
ldap.set_option(ldap.OPT_X_TLS_CACERTFILE,'./ca_issuer_cert.pem')
После этого я смог использовать STARTTLS (в пределах порта 389 LDAP), как и ожидалось.Ответы:
Это то, что я вижу в качестве сертификата CA.
Это было имя сертификата, который я импортировал после того, как я выполнил -showcerts во второй попытке выше. Я перечислил сертификаты в хранилище ключей, выполнив это:
Я вижу сертификат CA там.
Чтобы убедиться, что openssl использует хранилище ключей, которое я использую с сервером, я использую аргумент -CAfile:
Зная, что в хранилище ключей Java для CA есть пароль, я попытался использовать опцию -pass pass: password, например так:
но это тоже не сработало.
Забавно, что в файле cacerts есть пароль, и openssl не жалуется, что не может прочитать файл cacerts. Это кажется подозрительным. Это или что-то еще звонит в колокол?
источник
Эта ошибка является способом openssl сказать: «Я не могу следовать цепочке сертификатов до доверенного корня». Я только что сделал ту же команду с моими собственными серверами AD, и я получил полную цепочку сертификатов, но топ-сертификат имеет именно эту ошибку. Если у вас есть ключ публикации CA, подписавшего сертификат, вы можете указать его с помощью параметров
-CAfile
или-CApath
источник
Если вы используете OpenLDAP, вы можете установить:
в вашем
openldap.conf
файле, который указывает OpenLDAP не пытаться проверять сертификат. Есть аналогичная опция, если вы выполняете аутентификацию LDAP с Apache.Если вы действительно хотите выполнить проверку сертификата, может помочь следующее:
Я так не думаю. Хотя следующее может показаться окончательным, это действительно мой лучший гость:
То, что вы попробовали, будет работать только для самоподписанного сертификата. Поскольку сертификат на самом деле был выпущен Windows CA, попытка использовать сертификат сервера в качестве аргумента
-CAfile
не даст вам ничего.Не обязательно, нет. Нет гарантии, что удаленный сервер представит сертификат CA в своих выходных данных. Сначала нужно взглянуть на эмитента сертификата сервера:
... а затем посмотрите, совпадает ли один из других имеющихся у вас сертификатов с этим эмитентом.
источник