Подключение к AD из PHP по протоколу LDAPS

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.
Прочитав пост Создаем пользователя AD через веб-интерфейс, вспомнил, что около года назад занимался с аналогичной задачей. Проблема была в том, что не удавалось создать пользователя при соединении по протоколу LDAP, а получилось только по протоколу LDAPS. Выкладываю свои записи, вдруг кому пригодится.

Все действия проделывались в 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
Источник: https://habr.com/ru/post/724008/


Интересные статьи

Интересные статьи

Приятно познакомиться, мы битриксоиды. Да-да, те самые которые:- вообще не модные,- пишут НЕ на Laravel и Symphony,- возятся с кучей мягко говоря “неидеального” кода под названием “1С-Битрикс: Управле...
У нас возникла задача добавить препроцессинг для параметров активити бизнес-процесса Битрикс24. Когда разбирались в задаче не смогли найти ни одного примера и решили выложить свой - может быть кто-ниб...
Автор статьи, перевод которой мы сегодня публикуем, Эрик Гебельбекер, недавно собрал робота, основанного на одноплатном компьютере Raspberry Pi. Он хочет сделать так, чтобы роботом можно ...
Среди советов по улучшению юзабилити интернет-магазина, которые можно встретить в инете, один из явных лидеров — совет «сообщайте посетителю стоимость доставки как можно раньше».
Как обновить ядро 1С-Битрикс без единой секунды простоя и с гарантией работоспособности платформы? Если вы не можете закрыть сайт на техобслуживание, и не хотите экстренно разворачивать сайт из бэкапа...