Ключевые слова:ssl, ldap, crypt, (найти похожие документы)
From: Roman Sozinov <http://sozinov.blogspot.com>
Date: Mon, 3 Jan 2008 14:31:37 +0000 (UTC)
Subject: SSL соединение при использовании LDAP-сервиса
Оригинал: http://sozinov.blogspot.com/2007/01/starttls-ldap.htmlhttp://sozinov.blogspot.com/2007/06/ssl-ldap.html
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 CertificationAuthority
TLS certificate verification: depth: 2, err: 0, subject: /C=LT/O=EuroPKI/CN=Eur
oPKI Lithuanian Certification Authority, issuer: /O=EuroPKI/CN=EuroPKI Root Certification Authority
TLS certificate verification: depth: 1, err: 0, subject: /C=LT/O=Skaitmeninio S
ertifikavimo 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 Skaitmenin
io sertifikavimo centras/OU=Duomen\xC5\xB3 centras/CN=slave_ldap.example.com/se
rialNumber=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)
Часть 2. SSL соединение при использовании LDAP-сервиса
Данная заметка вышла как дополнение к постам StartTLS - безопасный
LDAP и cvs->ldif.
При использовании общей для всех сотрудников LDAP-адресной книги за
пределами офиса, условия использования безопасного LDAP-соединения
становятся обязательными. Но существующие на данный момент почтовые
клиенты не умеют использовать функцию StartTLS, вместо этого они
требуют отдельного SSL-соединения на отдельном порту (для ldaps это
порт 636).
В этом случае в дополнение к уже определенным в конфигурационном файле
опциям TLSCertificateFile, TLSCertificateKeyFile,
TLSCACertificateFile, в запускном скрипте необходимо открыть
дополнительный безопасный порт - ldaps. В Debian это делается просто -
в начало скрипта /etc/init.d/slapd необходимо добавить строку:
SLAPD_SERVICES="ldap:/// ldaps:///"
После перезапуска сервиса, убедиться, что ldaps порт открыт:
# /etc/init.d/slapd restart
Stopping OpenLDAP: slapd.
Starting OpenLDAP: slapd.
# netstat -an | grep 636
tcp 0 0 0.0.0.0:636 0.0.0.0:* LISTEN
tcp6 0 0 :::636 :::* LISTEN
Теперь остается только протестировать безопасное соединение из
почтовой программы (галочка "secure connection (SSL)", порт 636).
Thunderbird и Evolution прекрасно срабатывают сразу же. С Outlook'ом
придется добавлять сертификат LDAP-сервера (или CA'я, который выдал
данный сертификат) в Windows-хранилище сертификатов, иначе он будет
отказываться работать, говоря при этом многозначительное "The
specified directory service could not be reached".