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

Ошибка openldap TLS -8179: издатель сертификата однорангового узла не распознан

tl; dr Означает ли эта ошибка, что мне нужно найти публичный сертификат ldap-сервера моей компании и установить его, или что ldap-серверу моей компании необходимо установить мой публичный сертификат? Если первое, как я могу получить сертификаты и установить их?


Я пытаюсь интегрировать приложение с LDAP моей компании. Я новичок в LDAP и SSL, поэтому заранее прошу прощения. Я могу сделать это успешно на не-ssl, но сталкиваюсь с этой проблемой, когда пытаюсь сделать это через SSL. Я использую Rhel 6.4 с openldap версия 2.4.

Используя либо ldapsearch

ldapsearch -v -h myhost.com -b 'DC=myhost,DC=com, -D 'CN=me,DC=myhost,DC=com' -x -W -Z

или Python

import ldap
con = ldap.initialize('ldaps://myhost.com')
dn = 'CN=me,DC=myhost,DC=com'
pw = 'password'
con.simple_bind_s(dn, pw)

приводит к:

ldap_start_tls: Connect error (-11)
    additional info: TLS error -8179:Peer's Certificate issuer is not recognized.

Означает ли это, что мне нужно найти публичный сертификат ldap-сервера моей компании и установить его где-нибудь, например, в / etc / openldap / certs? Или это означает, что мне нужно сообщить серверу ldap моей компании об утверждении моего публичного сертификата?

openssl s_client -connect myhost.com:636

Это сбрасывает сертификат, но в конце говорит:

Verify return code: 20 (unable to get local issuer certificate)

Опять же, я не уверен, означает ли это, что мне нужны сертификаты сервера ldap или наоборот.

Я пытался увидеть цепочку сертификатов вот так:

openssl s_client -showcerts -connect myhost.com:636

Я скопировал сертификаты по порядку и создал такой файл с именем cert.pem:

-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----

Я пробовал это:

openssl s_client -connect myhost.com:636 -cert /path/to/cert.pem 

но это не удалось:

unable to load client certificate private key file
140503604590408:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:703:
Expecting: ANY PRIVATE KEY

(Я также пробовал -CAfile и -CApath на этом, но я получил unable to get local issuer certificate.)

Я воссоздал файл pem, но на этот раз включил закрытый ключ моего сервера и сертификат, а затем сертификаты сервера ldap, но получил ту же ошибку (Verify return code: 20 (unable to get local issuer certificate)) очередной раз.

Я неправильно создаю эти файлы сертификатов?

Причина, по которой я получил эти ошибки, заключалась в том, что на моем сервере не были установлены сертификаты сервера ldap. На сервере ldap не обязательно должны быть установлены сертификаты моего сервера.

Я связался с кем-то в своей компании, который смог предоставить два сертификата, корневой сертификат и промежуточный сертификат, оба в der формат. Примечательно, что эти сертификаты были не то же самое как те, которые я получил с помощью openssl s_client -showcerts команда. Я последовал за эта ссылка преобразовать их из der к pem, как это:

openssl x509 -in root.cer -inform der -outform pem -out root.pem
openssl x509 -in intermediary.cer -inform der -outform pem -out intermediary.pem
# Combine these files into one cert in exactly this order
cat root.pem > master.pem
cat intermediary.pem >> master.pem

Тогда я мог бы выдать эту команду нормально

openssl s_client -connect myhost:636 -CAfile /path/to/master.pem

И для подключения на Python:

import ldap
# point to the cert
cert_file='/path/to/master.pem'
ldap.set_option(ldap.OPT_X_TLS_CACERTFILE, cert_file)
con = ldap.initialize('ldaps://myhost.com')
dn = 'CN=me,DC=myhost,DC=com'
pw = 'password'
con.simple_bind_s(dn, pw)

Openldap 2.4 использует порт 398 по умолчанию для tls, поэтому попробуйте s_client через него. Вы можете проверить файлы конфигурации в /etc/openldap/slapd.d/, проверить файл экземпляра базы данных cn = olcDatabase = {2} hdb.ldif. Этот файл может содержать имена файлов и расположение ваших сертификатов. Если ваша компания покупает сертификаты у поставщика домена, такого как goDaddy, вы можете приобрести и использовать его сертификаты для установки с помощью openldap, и когда вы просматриваете Интернет, вы не встретите красное предупреждение от браузеров, потому что это всемирные сертификаты. Или вы можете создать свои собственные сертификаты с использованием openssl и установить часть сертификата сервера на свой сервер openldap и установить клиентскую часть на свой клиент, чтобы они могли идентифицировать друг друга.