Как эта команда ldapsearch выполняется успешно без использования промежуточного сертификата?

Как эта команда ldapsearch выполняется успешно без использования промежуточного сертификата?

У меня есть сервер LDAP (контроллер домена Active Directory) с сертификатом, подписанным внутренним промежуточным CA, и, конечно же, внутренним корневым CA. Мне кажется, что я упускаю из виду что-то фундаментальное в PKI, потому что я думал, что мне нужны как файлы промежуточного CA, так и корневого CA на стороне клиента, чтобы установить доверие с сертификатом, который представляет сервер LDAP, поэтому я не понимаю, почему обе эти команды выполняются успешно. Они идентичны, за исключением того, что первая доверяет как корневому CA, так и промежуточному CA, тогда как вторая доверяет ТОЛЬКО корневому сертификату. Я ожидал, что первая команда сработает, но не вторая. (Я дважды проверил, что вывод идентичен даже без использования, grepи что содержимое файлов .crt правильное.)

Что я неправильно понимаю?

export LDAPTLS_CACERT=./chained.crt; ldapsearch -x -W -h ldap.example.com -p 389 -ZZ -D "[email protected]" -b "OU=users,OU=example,DC=com" "(cn=testuser)" | grep result
Enter LDAP Password: 
result: 0 Success

export LDAPTLS_CACERT=./root_cert_only.crt; ldapsearch -x -W -h ldap.example.com -p 389 -ZZ -D "[email protected]" -b "OU=users,OU=example,DC=com" "(cn=testuser)" | grep result
Enter LDAP Password:
result: 0 Success

# and just for fun, let's try it without trusting any CAs. it fails as expected.
export LDAPTLS_CACERT=''; ldapsearch -x -W -h ldap.example.com -p 389 -ZZ -D "[email protected]" -b "OU=users,OU=example,DC=com" "(cn=testuser)"
ldap_start_tls: Connect error (-11)
    additional info: TLS error -8179:Peer's Certificate issuer is not recognized.

Примечание: Я узнал на собственном горьком опыте, что ldapsearchmacOS не поддерживает доверие к сертификатам через путь, заданный в переменной среды. Вывод выше получен из linux ( ldapsearchверсия 2.4.40)

решение1

Первая команда (с корневым и подчиненным ЦС) работает, потому что ваш клиент явно доверяет корневому сертификату — он находится в хранилище якорей доверия — и этот корневой центр подписал сертификат подчиненного ЦС, поэтому ваш клиент неявно доверяет и ему.

Вторая команда работает, поскольку спецификация TLSсостояниячто серверыдолженотправить все сертификаты, необходимые для проверки сертификата сервера. Поэтому ваш сервер LDAP отправляет свой сертификат, а затем подчиненный сертификат CA.

По сути, обе команды одинаковы. В первом примере клиент получает сертификат подчиненного CA как из командной строки, так и с сервера.

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

Связанный контент