2007/01/15

StartTLS - безопасный LDAP

TLS 1.0 (Transport Layer Security) - это протокол безопасной передачи данных, основанный на SSL 3.0 (Secure Socket Layer), отличается от него незначительно, поэтому термины SSL и TLS можно использовать как синонимы.

StartTLS - это механизм установления безопасного соединения на основе TLS-протокола. Данный механизм использует уже существующее соединение - для LDAP-соединения это 389-й порт (ldap://). Иногда его называют TLS upgrade по той же самой причине - испольузется уже установленное TCP-соединение.

LDAPS (ldaps://) - это тоже безопасное соединение, но оно инициируется на альтернативном порту (636).

После того как инициализация безопасного соединения прошла успешна, разницы между StartTLS и LDAPS нет.

Для того, чтобы LDAP-сервер умел формировать безопасное соединение, необходимо иметь SSL-сертификат для используемого сервера, подписанный Центром Сертификации (CA), сертификат которого в свою очередь находится в root-списке (ca-bundle.crt). В основной файл конфигурации как минимум должны быть добавлены следущие строки:
TLSCertificateFile /etc/ssl/public/server.crt  # сертификат ldap-сервера
TLSCertificateKeyFile /etc/ssl/private/server.key # ключ ldap-сервера
TLSCACertificateFile /etc/ssl/public/ca-bundle.crt # root-список

После перезапуска ldap-сервиса, StartTLS механизм можно проверить с помощью команды:

# ldapsearch -x -b "c=ru" -h slave_ldap.example.com -D "cn=admin,c=ru" -w password -d 1 -ZZ
...
TLS trace: SSL_connect:before/connect initialization
TLS trace: SSL_connect:SSLv2/v3 write client hello A
TLS trace: SSL_connect:SSLv3 read server hello A
TLS certificate verification: depth: 3, err: 0, subject: /O=EuroPKI/CN=EuroPKI Root Certification Authority, issuer: /O=EuroPKI/CN=EuroPKI Root Certification Authority
TLS certificate verification: depth: 2, err: 0, subject: /C=LT/O=EuroPKI/CN=EuroPKI Lithuanian Certification Authority, issuer: /O=EuroPKI/CN=EuroPKI Root Certification Authority
TLS certificate verification: depth: 1, err: 0, subject: /C=LT/O=Skaitmeninio Sertifikavimo Centras/CN=SSC Class 2 CA/serialNumber=3, issuer: /C=LT/O=EuroPKI/CN=EuroPKI Lithuanian Certification Authority
TLS certificate verification: depth: 0, err: 0, subject: /C=LT/O=UAB Skaitmeninio sertifikavimo centras/OU=Duomen\xC5\xB3 centras/CN=slave_ldap.example.com/serialNumber=33, issuer: /C=LT/O=Skaitmeninio Sertifikavimo Centras/CN=SSC Class 2 CA/serialNumber=3
TLS trace: SSL_connect:SSLv3 read server certificate A
TLS trace: SSL_connect:SSLv3 read server done A
TLS trace: SSL_connect:SSLv3 write client key exchange A
TLS trace: SSL_connect:SSLv3 write change cipher spec A
TLS trace: SSL_connect:SSLv3 write finished A
TLS trace: SSL_connect:SSLv3 flush data
TLS trace: SSL_connect:SSLv3 read finished A
...

Для безопасной (с использованием TLS) репликации данных на другой сервер предпочтительно использовать механизм StartTLS, без использования дополнительного ldaps-порта (636). Всё, что нужно поправить в этом случае в конфигурационном файле /etc/slapd.conf - добавить строку starttls=yes в настройку необходимой реплики (replica). Например:

...
replica uri=ldap://slave_ldap.example.com
starttls=critical
binddn="cn=admin,c=lt"
bindmethod=simple
credentials=password
...
Параметр starttls может принимать значение "yes", в этом случае, если в момент инициализации TLS-соединения возникли ошибки, соединение будет установлено без использования TLS. Рекомендуется - critical.

Ссылки:
  1. OpenLDAP Faq-O-Matic: How do I use TLS/SSL?
  2. RFC2830 - Lightweight Directory Access Protocol (v3): Extension for Transport Layer Security
  3. RFC4513 - Lightweight Directory Access Protocol (LDAP): Authentication Methods and Security Mechanisms
  4. SLAPD.CONF(5)

No comments: