Я пытаюсь настроить Apache httpd v2.4 для аутентификации LDAP в AD. Сертификаты LDAPS выдаются внутренним ЦС. По какой-то причине (я не в команде AD) ни наши рабочие, ни нерабочие среды не публикуют полную цепочку.
Non-prod отправляет серверные и промежуточные сертификаты, но не корень. Я могу успешно подключиться через Apache с помощью:
LDAPVerifyServerCert Вкл.
LDAPTrustedGlobalCert CA_BASE64 chain.crt
# $cat промежуточный.pem root.pem > chain.crt
К сожалению, prod отправляет только сертификат сервера. Без промежуточного звена (эмитента) и без корня. Предоставление одной и той же цепочки, содержащей эмитента и root, не работает. Я пробовал все, что мог придумать: только сертификат сервера, только int, сервер + int, сервер + int + root, но ничего из этого не работает ни в Apache, ни при тестировании с openssl s_client -connect $x -CAfile $y
.
Очевидно, что лучший вариант — заставить команду AD опубликовать всю цепочку, но есть ли другой способ проверить соединение (кроме отключения проверки)?
Редактировать:
Вот результат openssl s_client -connect devldap.company.com:636 -CAfile int+root.pem
:
ПОДКЛЮЧЕН(00000003)
depth=2 CN = Корневой ЦС компании
проверить возврат: 1
depth=1 DC = com, DC = компания CN = Company Intermediate CA
проверить возврат: 1
depth=0 C = US, ST = State, O = Company, OU = OTS, CN = devldap.company.com
проверить возврат: 1
---
Цепочка сертификатов
0 s:C = США, ST = штат, O = компания, OU = OTS, CN = devldap.company.com
i:DC = com, DC = компания CN = Company Intermediate CA
1 s:DC = com, DC = компания CN = Company Intermediate CA
i:CN = Корневой ЦС компании
---
Сертификат сервера
-----НАЧАТЬ СЕРТИФИКАТ-----
MIIH8TCCBtmgAwIBAgITTQACdEm5xkCMTnqGDQAAAAJ0STANBgkqhkiG9w0BAQsF
...
jce8VpEUyZKDClUrcyRBSxd0rq2I
-----КОНЕЦ СЕРТИФИКАТА-----
subject=C = US, ST = State, O = Company, OU = OTS, CN = devldap.company.com
эмитент = DC = com, DC = компания CN = компания Промежуточный CA
---
Имена ЦС сертификата клиента не отправлены
Типы клиентских сертификатов: знак RSA, знак DSA, знак ECDSA
Запрошенные алгоритмы подписи: RSA+SHA256:RSA+SHA384:RSA+SHA1:ECDSA+SHA256:ECDSA+SHA384:ECDSA+SHA1:DSA+SHA1:RSA+SHA512:ECDSA+SHA512
Алгоритмы общей запрашиваемой подписи: RSA+SHA256:RSA+SHA384:RSA+SHA1:ECDSA+SHA256:ECDSA+SHA384:ECDSA+SHA1:RSA+SHA512:ECDSA+SHA512
Дайджест одноранговой подписи: SHA256
Тип одноранговой подписи: RSA
Временный ключ сервера: ECDH, P-384, 384 бита
---
SSL-рукопожатие прочитало 4639 байт и записало 486 байт.
Проверка: ОК
---
Новый, TLSv1.2, шифр ECDHE-RSA-AES256-GCM-SHA384.
Открытый ключ сервера 2048 бит.
Поддерживается безопасное повторное согласование IS
Сжатие: НЕТ
Расширение: НЕТ
ALPN не согласован
SSL-сессия:
Протокол: TLSv1.2
Шифр: ECDHE-RSA-AES256-GCM-SHA384
Идентификатор сеанса: F90...411
Идентификатор сеанса-ctx:
Мастер-ключ: 985...D1E
Идентификация PSK: нет
Подсказка идентификации PSK: нет
Имя пользователя SRP: нет
Время начала: 1651420792
Время ожидания: 7200 (сек)
Подтвердите код возврата: 0 (хорошо)
Расширенный главный секрет: да
---
СДЕЛАНО
И для производства, openssl s_client -connect ldap.company.com:636 -CAfile int+root.pem
:
ПОДКЛЮЧЕН(00000003)
depth=0 C = США, ST = Штат, O = Компания, CN = ldap.company.com
ошибка подтверждения: число = 20: невозможно получить сертификат локального эмитента
проверить возврат: 1
depth=0 C = США, ST = Штат, O = Компания, CN = ldap.company.com
ошибка проверки: число = 21: невозможно проверить первый сертификат
проверить возврат: 1
depth=0 C = США, ST = Штат, O = Компания, CN = ldap.company.com
проверить возврат: 1
---
Цепочка сертификатов
0 s:C = США, ST = штат, O = компания, CN = ldap.company.com
i:DC = com, DC = компания CN = Company Intermediate CA
---
Сертификат сервера
-----НАЧАТЬ СЕРТИФИКАТ-----
MIIHXzCCBkegAwIBAgITTQADO1BEj8rlaKH+eQAAAAM7UDANBgkqhkiG9w0BAQsF
...
FGBKggzc3AK2pcHT9E3f46Oy+A==
-----КОНЕЦ СЕРТИФИКАТА-----
subject=C = США, ST = штат, O = компания, CN = ldap.company.com
эмитент = DC = com, DC = компания CN = компания Промежуточный CA
---
Имена ЦС сертификата клиента не отправлены
---
Рукопожатие SSL прочитало 2059 байт и записало 655 байт
Ошибка проверки: не удалось проверить первый сертификат
---
Новый, SSLv3, шифр AES256-SHA
Открытый ключ сервера 2048 бит.
Безопасное повторное согласование НЕ поддерживается
Сжатие: НЕТ
Расширение: НЕТ
ALPN не согласован
SSL-сессия:
Протокол: TLSv1.2
Шифр: AES256-SHA
Идентификатор сеанса: 33B...377
Идентификатор сеанса-ctx:
Мастер-ключ: A5D...ACE
Идентификация PSK: нет
Подсказка идентификации PSK: нет
Имя пользователя SRP: нет
Время начала: 1651420815
Время ожидания: 7200 (сек)
Код возврата проверки: 21 (невозможно проверить первый сертификат)
Расширенный главный секрет: нет
---
СДЕЛАНО
Редактировать: Оказывается, файл с именем «int.pem» на самом деле был сертификатом сервера из другого проекта. Неато. Хотел бы я проверить это, прежде чем тратить на это столько времени. С цепочкой, содержащей фактический промежуточный сертификат CA и корень, он проходит успешную проверку.