Когда я использую DNS-запись SRV, какое имя (имена) я должен указать в сертификате TLS? Например, если я устанавливаю slapd на двух серверах (klas1 и klas2) и определяю эти записи DNS (используя нотацию стиля файла зоны привязки):
_ldap._tcp.example.com. IN SRV 10 0 389 klas1.example.com.
_ldap._tcp.example.com. IN SRV 20 0 389 klas2.example.com.
klas1.example.com. A 192.168.0.1
klas2.example.com. A 192.168.0.2
Я ожидал, что мои клиенты будут настроены для подключения к ldap: //example.com/. Однако, когда я генерирую сертификаты TLS на серверах, могу ли я генерировать их с именем «example.com» или сгенерировать их с именем «klas1.example.com», или мне нужно и то, и другое?
Сертификат должен соответствовать имени хоста, т.е. соответствующему A
запись для сервера. Вы могли бы иметь индивидуальный klas1.example.com
& klas2.example.com
сертификаты или общий подстановочный знак *.example.com
сертификат, но example.com
не будет совпадать.
В SRV
записи не нуждаются в сертификатах, поскольку они используются только на уровне DNS для обнаружения служб.
Общее имя сертификата или SubjectAltName.DNS должно совпадать с именем, которое было изначально указано в uri LDAP. RFC6125 в приложении B.3 (https://tools.ietf.org/html/rfc6125#appendix-B.3) говорит:
3.6. Проверка подлинности сервера
Клиент ДОЛЖЕН проверить свое понимание имени хоста сервера.
против идентичности сервера, представленной в серверной
Сообщение с сертификатом для предотвращения атак типа "злоумышленник посередине".Сопоставление выполняется по таким правилам:
o Клиент ДОЛЖЕН использовать имя хоста сервера, которое он использовал для открытия соединения LDAP, в качестве значения для сравнения с именем сервера, выраженным в сертификате сервера. Клиент НЕ ДОЛЖЕН использовать каноническое DNS-имя сервера или любую другую производную форму имени.
Обратите внимание, что такая же логика применяется к другим протоколам, которые используют записи SRV, например SIP. Это в некоторой степени логично с точки зрения безопасности. Если бы проверялся только хост, было бы легко выполнить атаку «человек посередине», перенаправив соединение на узлы, чьи имена хостов не связаны с первоначально запрошенным доменным именем.
вам нужны только записи вашего хоста (записи A), записи служб используются для обнаружения, а не самого соединения.