Мы — долго запрягаем, быстро ездим, и сильно тормозим.
www.lissyara.su —> статьи —> FreeBSD —> программы —> LDAP+SSL

Настройка безопасного соединения с LDAP

Автор: fr33man.


Передавать информацию в незашированном виде не очень безопасно, особенно если какой-нить восьмиклассник сидит за компом, в соседнем кабинете
с включенным etheral. ;))) Именно по этой причине я решил настроить SSL.

Генерируем сертефикаты:

spider# cd /usr/local/etc/openldap/

# Создаем папку, где будут храниться сертефикаты.
spider# mkdir ssl
spider# cd ssl

# Создаем скриптик для генерации сертефикатов
spider# cat > gen.sh

openssl genrsa -out ldap.key 1024
openssl req -new -key ldap.key -out ldap.csr
openssl genrsa -des3 -out ca.key 2048
openssl req -new -x509 -days 365 -key ca.key -out ca.cert
openssl x509 -req -in ldap.csr -out ldap.cert -CA ca.cert \
 -CAkey ca.key -CAcreateserial -days 365

# Генерируем
spider# sh gen.sh

Generating RSA private key, 1024 bit long modulus
.......++++++
.....................................++++++
e is 65537 (0x10001)
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:RU
State or Province Name (full name) [Some-State]:Moscow
Locality Name (eg, city) []:Moscow
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Licei1523
Organizational Unit Name (eg, section) []:

# ВНИМАНИЕ!!! Здесь введите имя сервера, по 
# которому к нему будут обращаться клиенты
Common Name (eg, YOUR name) []:spider.teachers
Email Address []:root@mail.teachers

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:

An optional company name []:Generating RSA private key, 
2048 bit long modulus
..........+++
.................+++
e is 65537 (0x10001)

# Вводим пароль
Enter pass phrase for ca.key:
Verifying - Enter pass phrase for ca.key:
Enter pass phrase for ca.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:RU
State or Province Name (full name) [Some-State]:Moscow
Locality Name (eg, city) []:Moscow
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Licei1523
Organizational Unit Name (eg, section) []:
Common Name (eg, YOUR name) []:spider.teachers
Email Address []:root@mail.teachers
Signature ok
subject=/C=RU/ST=Moscow/L=Moscow/O=Licei1523/CN=
spider.teachers/emailAddress=root@mail.teachers
Getting CA Private Key
Enter pass phrase for ca.key:
spider# ls -la
total 16
drwxr-xr-x  2 root  wheel   512 Oct  1 20:42 .
drwxr-xr-x  4 root  wheel   512 Oct  1 15:31 ..
-rw-r--r--  1 root  wheel  1598 Oct  1 20:42 ca.cert
-rw-r--r--  1 root  wheel  1751 Oct  1 20:42 ca.key
-rw-r--r--  1 root  wheel   274 Oct  1 20:41 gen.sh
-rw-r--r--  1 root  wheel  1094 Oct  1 20:42 ldap.cert
-rw-r--r--  1 root  wheel   684 Oct  1 20:42 ldap.csr
-rw-r--r--  1 root  wheel   891 Oct  1 20:41 ldap.key
spider#

Сгенерировали. Теперь рихтанем slapd.conf, добавив туда следующие директивы:


# Путь к сертефикату
TLSCertificateFile  /usr/local/etc/openldap/ssl/ldap.cert

# Путь к ключу
TLSCertificateKeyFile /usr/local/etc/openldap/ssl/ldap.key

# Путь к доверенному сертефикату
TLSCACertificateFile  /usr/local/etc/openldap/ssl/ca.cert

И еще отредактируем /etc/rc.conf, изменяем slapd_flags:

slapd_flags='-h "ldapi://%2fvar%2frun%2fopenldap%2fldapi/ ldaps://0.0.0.0/"'

Теперь соединиться с LDAP сервером можно только по защищенному соединению(ldaps).

Все, теперь можно перезапускать slapd:


spider# /etc/rc.d/slapd restart
Stopping slapd.
Starting slapd.
spider#

Давайте попробуем поискать информацию в LDAP:


spider# ldapsearch -LLL -x -b 'dc=l1523,dc=ru' \
? -H ldaps://spider.teachers/ 'uid=fr33man'
ldap_bind: Can't contact LDAP server (-1)
	additional info: error:14090086:SSL routines:
	SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
spider#

Не прокатило... Я долго с этим мучался, пока не добавил в /usr/local/etc/openldap/ldap.conf параметр:


TLS_REQCERT     allow

Который разрешает принимать самоподписанные сертефикаты. Пробуем искать:


spider# ldapsearch -LLL -x -b 'dc=l1523,dc=ru' \
? -H ldaps://spider.teachers/ 'uid=fr33man'

dn: cn=fr33man,ou=users,dc=l1523,dc=ru
objectClass: top
objectClass: person
objectClass: posixAccount
objectClass: shadowAccount
objectClass: qmailUser
objectClass: sambaSamAccount
cn: fr33man
uid: fr33man
uidNumber: 5001
gidNumber: 0
gecos: Vasiliy Ozerov
homeDirectory: /home/fr33man
loginShell: /usr/local/bin/bash
mailMessageStore: /var/spool/mail/fr33man/
mailAlternateAddress: root@mail.teachers
mail: fr33man@mail.teachers
sambaSID: S-1-5-21-3499699245-1344799222-3934724855-11002
sambaPrimaryGroupSID: S-1-5-21-3499699245-1344799222-3934724855-1001
sambaPwdCanChange: 1158863819
sambaPwdMustChange: 2147483647
sambaPasswordHistory: 000000000000000000000000000000000000000
0000000000000000000000000
sambaPwdLastSet: 1158863819
sambaAcctFlags: [U          ]
sn:: 0J7Qt9C10YDQvtCyINCSLiDQmC4=
displayName:: 0J7Qt9C10YDQvtCyINCSLiDQmC4=

spider#

Все получилось.

На этом все, скажу только, что организовать SSL можно было еще и с помощью stunnel.



размещено: 2006-11-08,
последнее обновление: 2006-11-08,
автор: fr33man


princeps, 2008-01-29 в 11:14:55

Может стоит на всякий случай дописать, что теперь надо на 636 порт лезть из сети вместо 389?

itworptw, 2009-01-16 в 16:53:53

I bookmarked this guestbook. Thank you for good job!
[URL=http://speakeasy.craveonline.com/member.php?u=66636111]buy viagra[/URL]

itworptw, 2009-01-16 в 18:04:56

Perfect site, i like it!
[URL=http://speakeasy.craveonline.com/member.php?u=66636111]viagra[/URL]

IT-мутант, 2009-08-31 в 15:38:34

Да, для OpenLDAP нет проблем поднять ldap over ssl. Stunnel вариант из другой серии, он конечно трафик защитит при передаче, но не может быть использован внутри LDAP-сессии для подтверждения транзакции.
Я столкнулся с проблемами удаленного создания пользователя через PHP-классы, в частности, невозможно установить пароль для пользователя потому как он якобы передается в незащищенном виде (такой ответ возвращает Active Directory).
Предлагают либо поднимать сертификационный центр (CA), либо использовать third-party CA. Все эти детали обсуждаются на моем блоге здесь: http://www.it-mutant.ru/ldap/adldap-vsyo-ne-tak-prosto/. А как будет вести себя adldap в такой конфигурации?? Никто не пробовал??

VaaN, 2011-08-11 в 11:35:20

А не правильнее вместо
TLS_REQCERT     allow
написать
TLS_CACERT  /usr/local/etc/openldap/ssl/ca.cert
TLS_REQCERT never

насколько я понимаю так мы обезопасим себя от подмены сертификата.

bbk, 2011-10-05 в 19:59:35

Всё очень просто и работает!
Спасибо.
Добавлю только следующее:

Для подключения Ldap'a к Mozilla Thunderbird нужно будет импортировать открытые ключи CA и LDAP сервера, не забудьте в свойствах сертивиката указать что он доверенный!



 

  Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
  Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.1698 секунд
Из них PHP: 53%; SQL: 47%; Число SQL-запросов: 77 шт.
Исходный размер: 22756; Сжатая: 6579