Прочитав пост Создаем пользователя AD через веб-интерфейс, вспомнил, что около года назад занимался с аналогичной задачей. Проблема была в том, что не удавалось создать пользователя при соединении по протоколу LDAP, а получилось только по протоколу LDAPS. Выкладываю свои записи, вдруг кому пригодится.
Все действия проделывались в RHEL 5.5 и Windows Server 2003 R2 EE.
Потребуется пакет OpenSSL
Файл /etc/pki/tls/openssl.cnf
Файл /root/sslCA/gencert.sh
При запросе **Common Name (eg, your name or your server's hostname) []:** нужно обязательно ввести FQDN DC для которого создаем сертификат.
PHP должен быть с поддержкой ldap
Файл /etc/openldap/ldap.conf
1. Копируем на сервер файлы
* cert.p12 — The certificate
* cacert.pem — The Root Certificate
2 .Start, Run, MMC, File, Add/Remove Snap-in, Add, Certificates, Computer Account, Local Computer, My User Account, Next, Finish, Close, Ok
3. Разворачиваем Certificates
4. Импортируем cacert.pem в Trusted Root Certificates Authorities (правой кнопкой на Trusted Root Certificates Authorities, All Tasks, Import, Next, Browse, All files, выбираем наш cacert.pem ...)
5. Импортируем cert.p12 в Personal (правой кнопкой на Personal, All Tasks, Import, Next, Browse, All files, находим наш cert.p12, если нужно вводим пароль ...)
6. Проверяем сертифика на DC
* Разворачиваем папки Personal и Certificates
* Двойной щклчок по установленному сертификару
* Убеждаемся, что есть строка «You have a private key that corresponds to this certificate»
Файл /var/www/html/test.php
www.digitalissues.co.uk/html/os/ms/ldaps.html
Все действия проделывались в RHEL 5.5 и Windows Server 2003 R2 EE.
Сертификаты
Потребуется пакет OpenSSL
rpm -ivh openssl-0.9.8e-12.el5_4.6.i686.rpm
rpm -ivh openssl-perl-0.9.8e-12.el5_4.6.i386.rpm
Файл /etc/pki/tls/openssl.cnf
dir = /root/sslCA
default_days = 3650
countryName_default = UA
stateOrProvinceName_default = Lugansk
localityName_default = Lugansk
0.organizationName_default = CompanyName
organizationalUnitName_default = IT
...
# в конце файла
[ sign_ias_csr ]
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer:always
keyUsage = digitalSignature, keyEncipherment
extendedKeyUsage = clientAuth,serverAuth
cd /root/
mkdir sslCA
chmod 700 sslCA
cd /root/sslCA
mkdir certs private newcerts
echo 1000 > serial
touch index.txt
openssl req -new -x509 -days 3650 -extensions v3_ca -keyout private/cakey.pem -out cacert.pem -config /etc/pki/tls/openssl.cnf
Сертификаты для контроллеров домена
Файл /root/sslCA/gencert.sh
#!/bin/sh
NAME=$1
BITS=1024
CONFIG=/etc/pki/tls/openssl.cnf
# Generating the Certificate Request
# Create server key
echo ""; echo "Creating server key"; echo ""
openssl genrsa -des3 -out server${NAME}.key.pass -passout pass:1234 ${BITS} || exit
# Remove passphrase
echo ""; echo "Removing passphrase"; echo ""
openssl rsa -in server${NAME}.key.pass -out server${NAME}.key -passin pass:1234 || exit
# Generate certificate request
echo ""; echo "Generating certificate request"; echo ""
openssl req -config ${CONFIG} -new -days 3650 -key server${NAME}.key -out csr${NAME}.pem || exit
# Signing the Certificate
echo ""; echo "Signing the Certificate"; echo ""
openssl ca -config ${CONFIG} -days 3650 -extensions sign_ias_csr -out new${NAME}.pem -in csr${NAME}.pem || exit
# Generate a Public/Private key file
cp server${NAME}.key cert${NAME}.pem
openssl x509 -in new${NAME}.pem >> cert${NAME}.pem || exit
# Generate the PKCS12 file
echo ""; echo "Generating PKCS12"; echo ""
openssl pkcs12 -name "Test Cert" -export -in cert${NAME}.pem -out cert${NAME}.p12 || exit
chmod +x /root/sslCA/gencert.sh
/root/sslCA/gencert.sh 01
При запросе **Common Name (eg, your name or your server's hostname) []:** нужно обязательно ввести FQDN DC для которого создаем сертификат.
cp /root/sslCA/cacert.pem /etc/pki/tls/certs/
c_rehash
rpm -ivh openldap-clients-2.3.43-12.el5.i386.rpm
PHP должен быть с поддержкой ldap
Файл /etc/openldap/ldap.conf
# Instruct client to NOT request a server's cert.
TLS_REQCERT never
# Define location of CA Cert
TLS_CACERT /etc/pki/tls/certs/cacert.pem
TLS_CACERTDIR /etc/pki/tls/certs
cp /etc/openldap/ldap.conf /var/www/.ldaprc
Установка сертификатов на DC
1. Копируем на сервер файлы
* cert.p12 — The certificate
* cacert.pem — The Root Certificate
2 .Start, Run, MMC, File, Add/Remove Snap-in, Add, Certificates, Computer Account, Local Computer, My User Account, Next, Finish, Close, Ok
3. Разворачиваем Certificates
4. Импортируем cacert.pem в Trusted Root Certificates Authorities (правой кнопкой на Trusted Root Certificates Authorities, All Tasks, Import, Next, Browse, All files, выбираем наш cacert.pem ...)
5. Импортируем cert.p12 в Personal (правой кнопкой на Personal, All Tasks, Import, Next, Browse, All files, находим наш cert.p12, если нужно вводим пароль ...)
6. Проверяем сертифика на DC
* Разворачиваем папки Personal и Certificates
* Двойной щклчок по установленному сертификару
* Убеждаемся, что есть строка «You have a private key that corresponds to this certificate»
Проверка сзязи
Файл /var/www/html/test.php
<?php
$ldapuser = "administrator@testlab.local";
$ldappass = "superpass";
$ldapserver = "192.168.0.1";
$ad = ldap_connect("ldaps://".$ldapserver) or die("Cant connect to LDAP Server");
ldap_set_option($ad, LDAP_OPT_PROTOCOL_VERSION, 3);
$adbind = ldap_bind($ad, $ldapuser, $ldappass);
if ($adbind)
{
echo "LDAP bind successful...";
}
else
{
echo "LDAP bind failed...";
}
?>
www.digitalissues.co.uk/html/os/ms/ldaps.html
Комментарии (5)
ilkman
00.00.0000 00:00+2Что это? Нахера? Какой 2003?
Shuriban
00.00.0000 00:00Да блин, я просто инвайт чуваку выдал за полезную статью. Мне она по крайней мере пригодилась, что бы понять почему я не могу пароль пользователю на ldap сервере задать.
Я и не думал, что при этом статья из песочницы автоматически публикуется.
Busla
у MS на TechNet лежит подробнейший гайд LDAP over SSL (LDAPS) Certificate, советую идти по нему