Я только что настроил TLS для slapd на одном сервере, используя простую PKI, вроде этого:
сертификат ldap < промежуточный сертификат CA < корневой сертификат CA
Чтобы подключиться к серверу ldap с помощью TLS от клиента, я добавил, как и многие найденные мной учебные пособия, сертификат корневого CA и сертификат ldap к доверенным сертификатам.
Я могу подключиться через TLS к моему серверу ldap
Однако почему не нужен промежуточный сертификат CA? Должен ли он быть отправлен сервером ldap вместе с сертификатом ldap? Я настроил их только в моей конфигурации slapd:
olcTLSCACertificateFile: /etc/ldap/ssl/root.pem
olcTLSCertificateFile: /etc/ldap/ssl/ldap_crt.pem
olcTLSCertificateKeyFile: /etc/ldap/ssl/ldap_key.pem
И кажется, что каждый из этих корневых файлов и файлов сертификатов ldap содержит только свой собственный сертификат.
Я что-то не понимаю? Почему он работает без ведома клиента, что такое промежуточный сертификат CA?
Причина наличия сертификата промежуточного ЦС вообще в том, что закрытый ключ для сертификата корневого ЦС может храниться в автономном режиме.
При обычной настройке центра сертификации сертификат корневого ЦС хранится в автономном режиме и используется только для подписания сертификатов промежуточных ЦС, что является редким случаем, в котором участвуют вооруженные охранники, сотрудники уровня C и большое количество протоколов. Закрытый ключ промежуточного ЦС остается в сети и используется для подписи запросов сертификатов TLS от конечных клиентов. Было бы невозможно поддерживать такой протокол для подписи каждого конечного сертификата.
В случае компрометации CA необходимо заменить только промежуточный CA (и сертификаты, подписанные им); если бы корневой ЦС был скомпрометирован, это в значительной степени остановило бы ЦС, так как каждый сертификат, подписанный ЦС, необходимо было заменить.
Кроме того, корневой ЦС должен существовать в хранилище доверенных сертификатов клиента. Клиент решает, для каких ЦС он будет принимать сертификаты, и хранит эти корневые сертификаты ЦС локально. Наличие произвольных промежуточных сертификатов дает ЦС большую гибкость в этом отношении. Поскольку он просто подписан корневым ЦС, а не является корневым ЦС, его можно гораздо легче изменить (например, перейти на более безопасный алгоритм хеширования).
Во время согласования TLS сервер отправит свой сертификат и сертификат, который его подписал, если не корневой ЦС, и сертификат, который подписал вон тот, если не корневой CA. Поскольку у клиента есть сертификат корневого ЦС, сервер не должен его отправлять. Некоторые клиенты откажутся подключаться, если сервер попытается отправить сертификат корневого ЦС.
В вашем случае вы не указали источник своих сертификатов и не предоставили какой-либо соответствующей информации, поэтому можно только догадываться.
Если они из частного ЦС, то сертификат TLS мог быть подписан непосредственно корневым ЦС вместо промежуточного или в дополнение к нему. У клиента также может быть промежуточное звено в своем хранилище доверенных сертификатов (хотя этого не должно быть).