LDAP Linux LDAP TLS: различия между версиями

Материал из noname.com.ua
Перейти к навигацииПерейти к поиску
 
(не показаны 34 промежуточные версии этого же участника)
Строка 1: Строка 1:
  +
[[Категория:LDAP]]
  +
[[Категория:Linux]]
  +
[[Категория:SSL]]
 
=LDAP Шифрование=
 
=LDAP Шифрование=
 
* http://pro-ldap.ru/books/openldap-ubuntu-in-practice/tls.html
 
* http://pro-ldap.ru/books/openldap-ubuntu-in-practice/tls.html
   
ТУТ я просто дублирую статью со своими комментариями.
+
ТУТ я просто дублирую статью со своими комментариями и изменениями
  +
  +
<BR>
  +
У меня в отличие от примера - 2 сервера в режиме мастер-мастер репликации, потому мне нужно 3 сертификата (по факту - 1 на оба сервера но на момент написания статьи я этого не понимал)
  +
  +
* Для сервера ldap1
  +
* Для сервера ldap2
  +
* Для сервера ldap - адрес который будет проксировать запросы на один из 2 серверов.
  +
  +
Так как в конечной конфигурации все запросы приходят на ldap (HAProxy) то фактически нужно установить этот сертификат на обоих серверах.
  +
Потому часть с генерацией отдельных сертификатов для каждого из серверов можно пропустить.
  +
  +
==Подготовка CA, выпуск корневого сертефиката==
  +
===Предварительная настройка - создание инфраструктуры CA ===
  +
  +
Итак, мы создаём централизованную инфраструктуру открытых ключей (PKI) в миниатюре.
  +
  +
Для этого сформируем пару закрытый ключ/корневой сертификат удостоверяющего центра.
  +
  +
Причём сертификат будет подписан этим же закрытым ключом (т. е. станет «самоподписанным»).
  +
  +
Затем сгенерируем новые закрытые ключи для нашей службы каталогов и создадим для неё сертификаты,
  +
подписанный закрытым ключом нашего удостоверяющего центра. При этом клиенские рабочие станции должны знать только корневой сертификат.
  +
  +
  +
Используя его они могут установить безопасное соединение с любым сервером, который имеет закрытый ключ и соответствующий ему сертификат, подписанный нашим CA.
  +
  +
  +
Удостоверяющий центр (CA) желательно разворачивать на отдельной машине, не имеющей подключения к сети,
  +
но для простоты примера мы проделаем всю работу на ldap1 (node-3)
  +
  +
  +
В конфигурационном файле /etc/ssl/openssl.cnf в секции [ CA_default ] для удобства поменяем значение
  +
директивы dir = ./demoCA на dir = ./. В этом же разделе директивой default_days задаётся срок действия выпускаемых сертификатов.
  +
  +
  +
<PRE>
  +
# cat /etc/ssl/openssl.cnf | grep -v '#' | grep -v ^$
  +
</PRE>
  +
  +
<PRE>
  +
HOME = .
  +
RANDFILE = $ENV::HOME/.rnd
  +
oid_section = new_oids
  +
[ new_oids ]
  +
tsa_policy1 = 1.2.3.4.1
  +
tsa_policy2 = 1.2.3.4.5.6
  +
tsa_policy3 = 1.2.3.4.5.7
  +
[ ca ]
  +
[ CA_default ]
  +
dir = ./.
  +
default_days = 3650
  +
policy = policy_match
  +
[ policy_match ]
  +
countryName = match
  +
stateOrProvinceName = match
  +
organizationName = match
  +
organizationalUnitName = optional
  +
commonName = supplied
  +
emailAddress = optional
  +
[ policy_anything ]
  +
countryName = optional
  +
stateOrProvinceName = optional
  +
localityName = optional
  +
organizationName = optional
  +
organizationalUnitName = optional
  +
commonName = supplied
  +
emailAddress = optional
  +
[ req ]
  +
default_bits = 2048
  +
default_keyfile = privkey.pem
  +
distinguished_name = req_distinguished_name
  +
attributes = req_attributes
  +
string_mask = utf8only
  +
[ req_distinguished_name ]
  +
countryName = Country Name (2 letter code)
  +
countryName_default = AU
  +
countryName_min = 2
  +
countryName_max = 2
  +
stateOrProvinceName = State or Province Name (full name)
  +
stateOrProvinceName_default = Some-State
  +
localityName = Locality Name (eg, city)
  +
0.organizationName = Organization Name (eg, company)
  +
0.organizationName_default = Internet Widgits Pty Ltd
  +
organizationalUnitName = Organizational Unit Name (eg, section)
  +
commonName = Common Name (e.g. server FQDN or YOUR name)
  +
commonName_max = 64
  +
emailAddress = Email Address
  +
emailAddress_max = 64
  +
[ req_attributes ]
  +
challengePassword = A challenge password
  +
challengePassword_min = 4
  +
challengePassword_max = 20
  +
unstructuredName = An optional company name
  +
[ usr_cert ]
  +
basicConstraints=CA:FALSE
  +
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
  +
nsComment = "OpenSSL Generated Certificate"
  +
subjectKeyIdentifier=hash
  +
authorityKeyIdentifier=keyid,issuer
  +
[ v3_req ]
  +
basicConstraints = CA:FALSE
  +
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
  +
[ v3_ca ]
  +
subjectKeyIdentifier=hash
  +
authorityKeyIdentifier=keyid:always,issuer
  +
basicConstraints = CA:true
  +
keyUsage = cRLSign, keyCertSign
  +
[ crl_ext ]
  +
authorityKeyIdentifier=keyid:always
  +
[ proxy_cert_ext ]
  +
basicConstraints=CA:FALSE
  +
nsComment = "OpenSSL Generated Certificate"
  +
subjectKeyIdentifier=hash
  +
authorityKeyIdentifier=keyid,issuer
  +
proxyCertInfo=critical,language:id-ppl-anyLanguage,pathlen:3,policy:foo
  +
[ tsa ]
  +
[ tsa_config1 ]
  +
  +
</PRE>
  +
  +
Файлы index.txt и serial будут играть роль своеобразной базы данных, чтобы отслеживать статус выпущенных
  +
закрытых ключей и сертификатов.
  +
  +
  +
Создадим каталог для нашего удостоверяющего центра (CA) и установим безопасные права доступа. Затем зададим значение umask таким, чтобы вновь создаваемые файлы имели права доступа чтения и записи только для создавшего их пользователя, затем создадим структуру каталогов и файлов для своего удостоверяющего центра и Сгенерируем закрытый ключ удостоверяющего центра (длиной 4096 бит).
  +
  +
Он должен хранится особенно бережно. Поэтому мы защитим его при помощи шифра AES. Вам будет предложено ввести пароль для доступа к новому закрытому ключу.
  +
  +
Запомните его и не потеряйте. Это последний рубеж защиты от злоумышленника. Без пароля выпустить новые сертификаты не получится. (в моем пример ключ - r00tme)
  +
   
   
==1==
 
 
<PRE>
 
<PRE>
 
0010_prepere_CA.sh
 
0010_prepere_CA.sh
Строка 18: Строка 150:
   
   
mkdir certs crl newcerts private.
+
mkdir certs crl newcerts private
 
chmod 700 private
 
chmod 700 private
 
touch index.txt
 
touch index.txt
Строка 32: Строка 164:
 
</PRE>
 
</PRE>
   
  +
===Выпуск корневого сертификата CA===
==2==
 
  +
Сейчас мы можем выпустить корневой сертификат удостоверяющего центра, подписав его закрытым ключом rootca.key. Так как это сертификат УЦ, используем расширение v3_ca
  +
 
<PRE>
 
<PRE>
 
0011_rootCa_crt.sh
 
0011_rootCa_crt.sh
Строка 56: Строка 190:
 
</PRE>
 
</PRE>
   
  +
==3==
 
  +
  +
  +
С помощью модификатора subj заносим в сертификат информацию:
  +
  +
C - Country Name (страна)
  +
ST - State or Province Name (штат или провинция)
  +
L - Locality Name (город)
  +
O - Organization Name (наименование организации)
  +
OU - Organizational Unit Name (наименование подразделения)
  +
CN - Common Name (имя субъекта или FQDN сервера)
  +
emailAddress - Email Address (адрес электронной почты)
  +
  +
  +
Можем посмотреть содержимое сертификата следующей командой:
  +
  +
<PRE>
  +
openssl x509 -in certs/rootca.crt -noout -text
  +
</PRE>
  +
Удостоверяющий центр готов к выпуску сертификатов.
  +
  +
==Создание сертификатов для серверов==
  +
===Сертификат для сервеа LDAP1===
  +
====Закрытый Ключ====
  +
Создадим закрытый ключ для сервера службы каталогов ldap1
 
<PRE>
 
<PRE>
 
0012_private_key_for_ldap1.sh
 
0012_private_key_for_ldap1.sh
Строка 71: Строка 229:
 
</PRE>
 
</PRE>
   
  +
====Запрос на сертификат====
==3==
 
  +
  +
Сгенерируем запрос на подпись сертификата. Наименование организации должно совпадать с наименованием в корневом сертификате УЦ.
  +
В качестве Common Name укажем FQDN нашего сервера (в моем случае это ldap1)
  +
 
<PRE>
 
<PRE>
 
0013_create_cert_request_for_ldap1.sh
 
0013_create_cert_request_for_ldap1.sh
Строка 88: Строка 250:
 
</PRE>
 
</PRE>
   
  +
====Генерируем сертификат подписанный своим СА====
==3==
 
  +
Подпишем его с помощью своего собственного CA:
 
<PRE>
 
<PRE>
 
0014_create_and_sign_cert_for_ldap1.sh
 
0014_create_and_sign_cert_for_ldap1.sh
Строка 110: Строка 273:
 
</PRE>
 
</PRE>
   
  +
====Копирование файлов====
==3==
 
  +
Так как у нас сертификат генерировался на том же сервере где и используется (node-3 он же ldap1) - то можно просто скопировать его в правильное место и установить права.
 
<PRE>
 
<PRE>
 
0015_move_certs_to_ldap_config_dir.sh
 
0015_move_certs_to_ldap_config_dir.sh
Строка 134: Строка 298:
 
</PRE>
 
</PRE>
   
  +
====Проверка сертификата====
==3==
 
 
<PRE>
 
<PRE>
 
0016_check_cert.sh
 
0016_check_cert.sh
Строка 143: Строка 307:
 
</PRE>
 
</PRE>
   
  +
==Конфигурация LDAP сервера==
==3==
 
  +
===Внести исправления в конфигурацию===
 
<PRE>
 
<PRE>
 
0201_install_tls_certs.ldif
 
0201_install_tls_certs.ldif
Строка 172: Строка 337:
 
</PRE>
 
</PRE>
   
  +
===Запретить нешифрованные подключения===
==3==
 
  +
Для того тто бы использовать ldap<B>s</B>:// в настройках <B>/etc/default/slapd</B>
  +
<PRE>
  +
SLAPD_SERVICES="ldaps://ldap1 ldapi:///"
  +
</PRE>
  +
  +
После рестарта - проверить:
  +
<PRE>
  +
netstat -ntpl | grep slap
  +
tcp 0 0 10.20.0.3:636 0.0.0.0:* LISTEN 17649/slapd
  +
</PRE>
  +
  +
===Настроить /etc/ldap/ldap.conf===
  +
Настроить файл конфигурации /etc/ldap/ldap.conf который используют клиенты:
  +
<PRE>
  +
BASE dc=fuel_domain
  +
URI ldaps://ldap1
  +
TLS_CACERT /etc/ssl/certs/rootca.crt
  +
TLS_REQCERT demand
  +
TIMELIMIT 15
  +
TIMEOUT 20
  +
</PRE>
  +
  +
  +
===Проверка конфигурации===
  +
Проверить конфигурацию:
 
<PRE>
 
<PRE>
 
0203_check_config.sh
 
0203_check_config.sh
Строка 181: Строка 371:
 
</PRE>
 
</PRE>
   
  +
==3==
 
  +
<PRE>
  +
olcTLSCACertificateFile: /etc/ssl/certs/rootca.crt
  +
olcTLSCertificateFile: /etc/ldap/ssl/ldap1.crt
  +
olcTLSCertificateKeyFile: /etc/ldap/ssl/ldap1.key
  +
olcTLSVerifyClient: never
  +
</PRE>
  +
  +
Проверить подключение на уровне tls/ssl (так же можно провериять и другие подключения - не только LDAP):
 
<PRE>
 
<PRE>
 
0204_check_tls_connection.sh
 
0204_check_tls_connection.sh
Строка 195: Строка 393:
 
</PRE>
 
</PRE>
   
  +
<PRE>
==3==
 
  +
Processed 1 CA certificate(s).
  +
Resolving 'ldap1'...
  +
Connecting to '10.20.0.6:636'...
  +
- Certificate type: X.509
  +
- Got a certificate list of 2 certificates.
  +
- Certificate[0] info:
  +
- subject `C=UA,ST=Kharkov,O=MirantisInc,OU=ServicesDepartment,CN=ldap1,EMAIL=mmaxur@mirantis.com', issuer `C=UA,ST=Kharkov,L=Kharkov,O=MirantisInc,OU=ServicesDepartment,CN=ca-server,EMAIL=mmaxur@mirantis.com', RSA key 4096 bits, signed using RSA-SHA256, activated `2016-05-26 17:23:29 UTC', expires `2026-05-24 17:23:29 UTC', SHA-1 fingerprint `a8d1ac296e514badd9aed44fbc405a76e7e63d1b'
  +
  +
-----BEGIN CERTIFICATE-----
  +
MIIGKTCCBBGgAwIBAgICEAIwDQYJKoZIhvcNAQELBQAwgZwxCzAJBgNVBAYTAlVB
  +
MRAwDgYDVQQIDAdLaGFya292MRAwDgYDVQQHDAdLaGFya292MRQwEgYDVQQKDAtN
  +
aXJhbnRpc0luYzEbMBkGA1UECwwSU2VydmljZXNEZXBhcnRtZW50MRIwEAYDVQQD
  +
DAljYS1zZXJ2ZXIxIjAgBgkqhkiG9w0BCQEWE21tYXh1ckBtaXJhbnRpcy5jb20w
  +
HhcNMTYwNTI2MTcyMzI5WhcNMjYwNTI0MTcyMzI5WjCBhTELMAkGA1UEBhMCVUEx
  +
EDAOBgNVBAgMB0toYXJrb3YxFDASBgNVBAoMC01pcmFudGlzSW5jMRswGQYDVQQL
  +
DBJTZXJ2aWNlc0RlcGFydG1lbnQxDTALBgNVBAMMBGxkYXAxIjAgBgkqhkiG9w0B
  +
CQEWE21tYXh1ckBtaXJhbnRpcy5jb20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw
  +
ggIKAoICAQC1a5nMVGd00XODBLZmPJIME89ybRrxzJIhlPk33p6g/8Hh9sTj3U9m
  +
JQ/QLWORyDGXVJM5UEdInYD5xSU9l/CZY81Z6Uwk4X6GtRng8Au/8mT0hidSPy0F
  +
BtJmgzgafMjUHbQWJbgXzbXz6Gu4Pu+NKh2gkaCrFN59wOJOGOhnf4TMVLoVw+f9
  +
rn7hA0NcWWhs0sQ6ZPvhsic0A6qh1LgYEzTSSFReywbKH2xg+v4qGoHnnkw2U4r0
  +
pBUYF22WGMrD1khh9QKbsWtQrH5YNcrTJ8c3gIYioTtAH/BwvAvVZp3G2i3R5cD4
  +
gDY56OUIuFfTuuYJvpSWC8dInGRxwoZ3RnFvKFn5N1RwKULe9LlR2+ATi4PwIn7q
  +
rJaa4ukhhr6SRNBSRQsQH1b7kXCIpwSbCNxzTBL/HdvzYHd0CmFhiu3BgiyvjY0u
  +
WvnKk8q/u3j0SkjoG7rebrMhZcXz7Leza2F3O8tSZ7bXeBty1HVnFc8a4SQ52N/f
  +
IIAwBgZQoIGgfkNKzriUZnRn6+tABj6JE5dEv9/BQ77FceoB/cLaK7BnEXRxbTYQ
  +
qyqjLXIwaRM14hDUSuVmRxHA6eGiTZ1YktYQwwZM9/erSw/EpD8Eweg2G8Bf1I1C
  +
JoJkP3Bj5RojE6OM5xcn4G3EsPylunoBcZLwVVqEiyBCpgoIU84uYwIDAQABo4GJ
  +
MIGGMAkGA1UdEwQCMAAwCwYDVR0PBAQDAgXgMCwGCWCGSAGG+EIBDQQfFh1PcGVu
  +
U1NMIEdlbmVyYXRlZCBDZXJ0aWZpY2F0ZTAdBgNVHQ4EFgQUgtaUYQW3gDDQnTcP
  +
b0KA4WeeWAEwHwYDVR0jBBgwFoAU/msFAiI92/9ld4t5M9XYonUlHyIwDQYJKoZI
  +
hvcNAQELBQADggIBAINHcZZCARgRLZYKGjNkste5L14z+YMA51aBrS6RcwllTM8b
  +
1UAWAwtcVD/GsU21nNYKlRu0cH2Iv8CbZiT1zhrZDCfbcr2l+P5LAtxhObvdr+pk
  +
+tHijGbRgAXGYGlDXUT7sECf8Hw588IVMJw5DPUo0Fl4yppsE6/YBodbCl4dD+/R
  +
uqBrJVT6HwA/Hx1Cgz5+wjTNSztsljQE7U9eJNVoH1hk/W1iHjweAPkgmjdnpfA9
  +
zYxWxAIW4wMY2RAnIaQuyYt4a8L0097VEOUlM9N+dHMtImS0Z+Qgyr7tCViYwHZV
  +
MehpzxsaGbDU0fe8qF474LyA9D62u+BqpHA1FVjQXPtY39zFnWBc83ZQgj2y6gfV
  +
XuYtAcnK7j/QZqE+KfemlNc5G45rvWstkNkbnNgl78R3h3Jx0Dsu0JrBsqU0qjmp
  +
CPyZfbUi6F21B3hf+BzKhTiE4g8MRvddLVRiXGTsyorzbsFnj5R5LyVTDFobvS4W
  +
9KEjd7jaHxrlTLo/e3G1PRymF63wIa90mgcQgjTuKsO4R7BU7KRSPJr/oBUhYS0/
  +
p2QHDxEWmH/uy+Qc3X7tNUqpnqbd3tx3WnXFNClqbp3RVymwrolZV/8dgrE1sy1/
  +
+DwfXsmeK06+Bykppun6glQGL1GX+E9kMZsiWXIrfOocvRqLtbAmX1qt1/jk
  +
-----END CERTIFICATE-----
  +
  +
- Certificate[1] info:
  +
- subject `C=UA,ST=Kharkov,L=Kharkov,O=MirantisInc,OU=ServicesDepartment,CN=ca-server,EMAIL=mmaxur@mirantis.com', issuer `C=UA,ST=Kharkov,L=Kharkov,O=MirantisInc,OU=ServicesDepartment,CN=ca-server,EMAIL=mmaxur@mirantis.com', RSA key 4096 bits, signed using RSA-SHA256, activated `2016-05-26 10:16:07 UTC', expires `2026-05-24 10:16:07 UTC', SHA-1 fingerprint `0f74fdaf2195ae2b1f599e3963e3b18970cb81a3'
  +
  +
-----BEGIN CERTIFICATE-----
  +
MIIGGjCCBAKgAwIBAgIJAN1rpxx3AA9AMA0GCSqGSIb3DQEBCwUAMIGcMQswCQYD
  +
VQQGEwJVQTEQMA4GA1UECAwHS2hhcmtvdjEQMA4GA1UEBwwHS2hhcmtvdjEUMBIG
  +
A1UECgwLTWlyYW50aXNJbmMxGzAZBgNVBAsMElNlcnZpY2VzRGVwYXJ0bWVudDES
  +
MBAGA1UEAwwJY2Etc2VydmVyMSIwIAYJKoZIhvcNAQkBFhNtbWF4dXJAbWlyYW50
  +
aXMuY29tMB4XDTE2MDUyNjEwMTYwN1oXDTI2MDUyNDEwMTYwN1owgZwxCzAJBgNV
  +
BAYTAlVBMRAwDgYDVQQIDAdLaGFya292MRAwDgYDVQQHDAdLaGFya292MRQwEgYD
  +
VQQKDAtNaXJhbnRpc0luYzEbMBkGA1UECwwSU2VydmljZXNEZXBhcnRtZW50MRIw
  +
EAYDVQQDDAljYS1zZXJ2ZXIxIjAgBgkqhkiG9w0BCQEWE21tYXh1ckBtaXJhbnRp
  +
cy5jb20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCuZEMVa87WGQJl
  +
1foQGNt4Qh/CWcggjjIqn8IYSPPtqn3YAxvUnubA+DQxkH7PNYR6G9PdNgQon2mV
  +
xvwVFL6YouDkPtEO101B3vM28U3vEEOSLUcign+2XqzKf7lqyXzMK7/wk+iubAfH
  +
hVhXosC+TSwH+eywO1lo2vbOZkf93ZiURDEZfixcMLuYMM8xdOeWeWtnQIA7D8QF
  +
E5wADWXaYpMlmZzHmmtx76l5BGZL75pG0YkAexllu5idlqADhN77xGM69ZSV/pYJ
  +
apMRhy4z0e17UzEbGWgv6OnUNhwGhOCgyIRk7PTKyjU+mxh3qdoNaqNt7Jj60EB7
  +
dvzHeosrizcYaFwaqbBxVRMKJOcNYh7ZYlyrdexa9Wau3xf0NFvyBZ8rvsBv9Ax+
  +
xuRCq2uVGc3rQHZzkwocquAgACY+1GpxFtpNUBhvmi25TUbm8OkAq7lYpf2sptJH
  +
ReZf4EdHhWuHLI93X5Pm6cb0uE+85kuJPNGMprcwvWM5QiT1N56LAVKiApZTSqo8
  +
bcuJZs+nXI4IrYRXjCn75E0LLRpVLXc7+vfKHgHClL9/bhOxcOdwyXejnDQVzWe4
  +
5JvwzLtL3/4KDiTLjG4foJztosxn92cAJAp30cdUalf7QkEFqp5RCvRY2vFVosM5
  +
0Vu3bicGcyucHyxigxWP44qpaJe9WwIDAQABo10wWzAdBgNVHQ4EFgQU/msFAiI9
  +
2/9ld4t5M9XYonUlHyIwHwYDVR0jBBgwFoAU/msFAiI92/9ld4t5M9XYonUlHyIw
  +
DAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAQYwDQYJKoZIhvcNAQELBQADggIBAHMZ
  +
609hm52CYxouUnvH+timAgiqbVv8QCb6IzgM5uRNejlxTzj63RBFvxC6n2UPqBpj
  +
yGtYuwpO249e+sD01ZS0r4B69a3yBePH6Ay4leqfStuqc9dcyamK7lQk8PAsF4wv
  +
yrywNpgGbecDReHJPrOmc5nQw3AlhwcwceHHS7mqaS+SWj1md97saD8uqHK0O5vu
  +
PFlJUKiztQqR2PMPWiKw+Pjri+RAXHj4TCxjPt5Z0wSR+xP/YE1MymvegPUrZ7/7
  +
rFWuqfHDVLh7IA16q+h1xU+FMnVdiPigEJ+Omn6dDfqHD9BBcKOUFYOJiXtG4TDc
  +
tX401kpG1Qm00kS3XtveQgGPF1OWNLyyDr1dDy8/B+77W1yli/VbzK6H4jwrVGy7
  +
EAEzpfbwRJnSIIUczG8//1G6a5yrpcjohKhWY1uBrv56LJdq16OVN3aK5nacMKmQ
  +
p+YpPu/ZT5LVUOzt8I32Q8i1Tn9YZma7vEftvGCZKVcgqlVIpb3P7/7dyRXoMuFD
  +
bErDIDxScMvg82Vg2JF4NzaOp+CXRAYuXbel5anoFOt7FFfnO2w0/aLQpAT+jpze
  +
qcL37IGyCGxOloej7NkdQsX9eJJNIdy5oLjniJ8/d402A0zziPdfrqa0c3FpGukZ
  +
syWlWH0RCerDgVmq+i6l5zGbtx/tKPpLYcJkAetJ
  +
-----END CERTIFICATE-----
  +
  +
- The hostname in the certificate matches 'ldap1'.
  +
- Peer's certificate is trusted
  +
- Version: TLS1.2
  +
- Key Exchange: RSA
  +
- Cipher: AES-128-CBC
  +
- MAC: SHA1
  +
- Compression: NULL
  +
- Handshake was completed
  +
  +
- Simple Client Mode:
  +
</PRE>
  +
  +
==Создание сертификата для сервера LDAP2==
  +
Все действия - аналогичны LDAP1
  +
===Ключ===
 
<PRE>
 
<PRE>
 
1012_private_key_for_ldap2.sh
 
1012_private_key_for_ldap2.sh
Строка 213: Строка 509:
 
</PRE>
 
</PRE>
   
  +
===Запрос на сертефикат===
==3==
 
 
<PRE>
 
<PRE>
 
1013_create_cert_request_for_ldap2.sh
 
1013_create_cert_request_for_ldap2.sh
Строка 231: Строка 527:
 
</PRE>
 
</PRE>
   
  +
===Создание и подписывание сертификата===
==3==
 
 
<PRE>
 
<PRE>
 
1014_create_and_sign_cert_for_ldap2.sh
 
1014_create_and_sign_cert_for_ldap2.sh
Строка 253: Строка 549:
 
</PRE>
 
</PRE>
   
==3==
+
==HA Mode==
  +
Так как в дальнейшем нам понадобиться <B>Единый</B> сертификат - то генерируем его полностью аналогичным образом.
  +
<BR>
  +
Причины, почему нужно использовать один сертификат на всех серверах реплики
  +
  +
* Запрос приходит на hostname = <B>LDAP</B> а не на hostname = LDAP1/LDAP2 соответственно в сертефикате должно быть указано "имя" кластера. Запросы к нодам кластера напрямую по их именам в этом случае требуют игнорирования ошибок TLS
  +
* Так как репликация касается в том числе и имен файлов сертификатов лучше что бы они были одинаковы для всех серверов.
  +
  +
 
<PRE>
 
<PRE>
 
2012_private_key_for_ldap.sh
 
2012_private_key_for_ldap.sh
Строка 268: Строка 572:
 
</PRE>
 
</PRE>
   
  +
==3==
 
 
<PRE>
 
<PRE>
 
2013_create_cert_request_for_ldap.sh
 
2013_create_cert_request_for_ldap.sh
Строка 287: Строка 591:
 
</PRE>
 
</PRE>
   
==3==
 
 
<PRE>
 
<PRE>
 
2014_create_and_sign_cert_for_ldap.sh
 
2014_create_and_sign_cert_for_ldap.sh
Строка 309: Строка 612:
 
</PRE>
 
</PRE>
   
==3==
 
 
<PRE>
 
<PRE>
 
3201_install_tls_certs.ldif
 
3201_install_tls_certs.ldif
Строка 329: Строка 631:
 
</PRE>
 
</PRE>
   
==3==
 
 
<PRE>
 
<PRE>
  +
3202_configure_ldap_to_u~s_one_name_on_cluster.sh
 
</PRE>
 
</PRE>
   
 
<PRE>
 
<PRE>
  +
ldapmodify -Y EXTERNAL -H ldapi:/// <3201_install_tls_certs.ldif
</PRE>
 
==3==
 
<PRE>
 
</PRE>
 
 
<PRE>
 
</PRE>
 
==3==
 
<PRE>
 
</PRE>
 
 
<PRE>
 
</PRE>
 
 
==3==
 
==3==
 
==3==
 
==3==
 
==3==
 
==3==
 
==3==
 
==3==
 
==3==
 
 
 
 
 
 
 
 
 
 
<PRE>
 
\ldapmodify -Y EXTERNAL -H ldapi:/// < 01_certs.ldif
 
</PRE>
 
<PRE>
 
SASL/EXTERNAL authentication started
 
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
 
SASL SSF: 0
 
modifying entry "cn=config"
 
</PRE>
 
<PRE>
 
\ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config -s base
 
</PRE>
 
Вывод:
 
<PRE>
 
# config
 
dn: cn=config
 
objectClass: olcGlobal
 
cn: config
 
olcArgsFile: /var/run/slapd/slapd.args
 
olcLogLevel: none
 
olcPidFile: /var/run/slapd/slapd.pid
 
olcToolThreads: 1
 
olcTLSVerifyClient: never
 
olcTLSCertificateFile: /etc/ldap/ssl/ldap-srv.example.com.crt
 
olcTLSCertificateKeyFile: /etc/ldap/ssl/ldap-srv.example.com.key
 
olcTLSCACertificateFile: /etc/ssl/certs/rootca.crt
 
</PRE>
 
 
 
 
 
 
<PRE>
 
root@node-3:/etc/ldap# netstat -ntpl | grep slap
 
tcp 0 0 0.0.0.0:389 0.0.0.0:* LISTEN 2875/slapd
 
tcp6 0 0 :::389 :::* LISTEN 2875/slapd
 
</PRE>
 
<PRE>
 
# /etc/init.d/slapd restart
 
* Stopping OpenLDAP slapd [ OK ]
 
* Starting OpenLDAP slapd [ OK ]
 
</PRE>
 
<PRE>
 
# netstat -ntpl | grep slap
 
tcp 0 0 0.0.0.0:636 0.0.0.0:* LISTEN 6294/slapd
 
tcp 0 0 0.0.0.0:389 0.0.0.0:* LISTEN 6294/slapd
 
tcp6 0 0 :::636 :::* LISTEN 6294/slapd
 
tcp6 0 0 :::389 :::* LISTEN 6294/slapd
 
</PRE>
 
 
 
 
==Проверка==
 
<PRE>
 
gnutls-cli -p 636 ldap1 -d 1 --print-cert --x509cafile /etc/ssl/certs/rootca.crt
 
</PRE>
 
<PRE>
 
Processed 1 CA certificate(s).
 
Resolving 'ldap1'...
 
Connecting to '10.20.0.3:636'...
 
- Certificate type: X.509
 
- Got a certificate list of 2 certificates.
 
- Certificate[0] info:
 
- subject `C=UA,ST=Kharkov,O=MirantisInc,OU=ServicesDepartment,CN=ldap1,EMAIL=mmaxur@mirantis.com', issuer `C=UA,ST=Kharkov,L=Kharkov,O=MirantisInc,OU=ServicesDepartment,CN=ca-server,EMAIL=mmaxur@mirantis.com', RSA key 4096 bits, signed using RSA-SHA256, activated `2016-05-26 10:25:31 UTC', expires `2026-05-24 10:25:31 UTC', SHA-1 fingerprint `c07f85c03b773984ed3c4df7530b4d2366f4dad6'
 
 
-----BEGIN CERTIFICATE-----
 
MIIGKjCCBBKgAwIBAgICEAAwDQYJKoZIhvcNAQELBQAwgZwxCzAJBgNVBAYTAlVB
 
MRAwDgYDVQQIDAdLaGFya292MRAwDgYDVQQHDAdLaGFya292MRQwEgYDVQQKDAtN
 
aXJhbnRpc0luYzEbMBkGA1UECwwSU2VydmljZXNEZXBhcnRtZW50MRIwEAYDVQQD
 
DAljYS1zZXJ2ZXIxIjAgBgkqhkiG9w0BCQEWE21tYXh1ckBtaXJhbnRpcy5jb20w
 
HhcNMTYwNTI2MTAyNTMxWhcNMjYwNTI0MTAyNTMxWjCBhjELMAkGA1UEBhMCVUEx
 
EDAOBgNVBAgMB0toYXJrb3YxFDASBgNVBAoMC01pcmFudGlzSW5jMRswGQYDVQQL
 
DBJTZXJ2aWNlc0RlcGFydG1lbnQxDjAMBgNVBAMMBWxkYXAxMSIwIAYJKoZIhvcN
 
AQkBFhNtbWF4dXJAbWlyYW50aXMuY29tMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A
 
MIICCgKCAgEA17ksfFHcbpLGQyJfvu4gfDhcmFQr4Le6UiLfefKugtaB4dX5c6Fd
 
4h2EHWCtkrZAZiXvRnNavSxaU+VNLraFjpIILUbzbg/2uYYIPofy9RQzdqDJhnKj
 
1avVPPH19YIfTWHP07Y/flH3Ac/QR2uiSFitJrjLU8LsjEXwLRYhewPukWrj5Uqa
 
oaCIUr91V0NMX6qKlJA/Ri9j3yI/P9UsvNjANDSiqI4EqKZkxsN+ck4eZAcjFUYR
 
vomu0LO7mPxHUekzJhN3Gl6Yt4meyH5fP3HnHOYk93hKL78hewZ2riEv7Nwwg+zy
 
Hb0RG9Mfx0Yz6it/fwT3obycWXhBab2FgLW5K1yYiqLo1oVfl80MO5ZNsNK4WMcy
 
qQx60i2qLT48+uC6LgUOzhFWjTlTMsEOgj35EJn3rsjUUJpdtA6SiXJpE6lVFoRu
 
ACt+Iwqu7Dq9QuJKeYcGmWsatMPkpeWz93pV1TT2rtdABJgeiIKDtJWu8Oh2Y/NV
 
vwqAghprjO84Vlxqq9xkXX8YvRRN8bwLSWlyCj2QDcRhLjDTeGqk0qUuV+nNfOBh
 
bJ6MX3IhOhu55VjzFdGcOd/cZzg+yGugPFsT2WXDp1sxROGf3MLhBbymG2egh98k
 
qFzTAM2DXGB8ZkfxEuaRW3rNA3Fjg2kElKP+6GaUYtEj4MTbuoppBBsCAwEAAaOB
 
iTCBhjAJBgNVHRMEAjAAMAsGA1UdDwQEAwIF4DAsBglghkgBhvhCAQ0EHxYdT3Bl
 
blNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0OBBYEFFpPbsihmyodcQkK
 
ii7/IArfCH8sMB8GA1UdIwQYMBaAFP5rBQIiPdv/ZXeLeTPV2KJ1JR8iMA0GCSqG
 
SIb3DQEBCwUAA4ICAQCdfkpuE69mGfQwLe2kHEA45TPjogOalPp8H73dqLDxE80T
 
s1W5XyJBZQccpVFoXS25M9fDeWjuvMTwdIP6q6DDArC1lVs0zdAOhTt6POpI7Cvu
 
zrBM/wa6YUVZtXSM4Qtw4tE3Nx71s9Tp2jVra75RvjQrUnISwPfop3zapzCpTqEQ
 
zvrl5Vsfd0AMmN1RKoFdYQr6LX7nInf029a8IBOCXzv6Ufd3NwxxelKkO2U49XYo
 
tFycxyDzo/B//cS8b8a7fu3yysP8W5b3oNgE6Tth1vR3zLy4uiwpIi6ptYBUlkG+
 
gqIXzqI+2MIyYWaA3UXIfRhi7j3CENGIA1TAAPSvfFnolYiFSXiY28b6P2nyl8WC
 
xCySbdZtGh+fvxeP+cNl1VMDEmU94XDIgA7Nl5yacPLY4GwKnjAkfyp4uL9dYvJV
 
1wKgzYohF1Elm6YiPa2Wv1fuMNkT9iZ0DMyLV4ixxkKkuuCXCLKXmg4REQPsnE6V
 
Eu/tQ6mfUugO6+d1ZkI/iAc0cjNtjrOKhS/Fsb49UWThjM+pyOFVO0hMybKYBwZL
 
1JDiwSM1uYts3TUxLBNb4SXeYoqZRFoFJiP14yjw9j0nuU1Au7ginFf0IYYq2VHI
 
M7woolzYH+/vlOK+5aQrgcsanCy/7s4prux4IRTx5SGzqW+idA2UW26+5WyKbg==
 
-----END CERTIFICATE-----
 
 
- Certificate[1] info:
 
- subject `C=UA,ST=Kharkov,L=Kharkov,O=MirantisInc,OU=ServicesDepartment,CN=ca-server,EMAIL=mmaxur@mirantis.com', issuer `C=UA,ST=Kharkov,L=Kharkov,O=MirantisInc,OU=ServicesDepartment,CN=ca-server,EMAIL=mmaxur@mirantis.com', RSA key 4096 bits, signed using RSA-SHA256, activated `2016-05-26 10:16:07 UTC', expires `2026-05-24 10:16:07 UTC', SHA-1 fingerprint `0f74fdaf2195ae2b1f599e3963e3b18970cb81a3'
 
 
-----BEGIN CERTIFICATE-----
 
MIIGGjCCBAKgAwIBAgIJAN1rpxx3AA9AMA0GCSqGSIb3DQEBCwUAMIGcMQswCQYD
 
VQQGEwJVQTEQMA4GA1UECAwHS2hhcmtvdjEQMA4GA1UEBwwHS2hhcmtvdjEUMBIG
 
A1UECgwLTWlyYW50aXNJbmMxGzAZBgNVBAsMElNlcnZpY2VzRGVwYXJ0bWVudDES
 
MBAGA1UEAwwJY2Etc2VydmVyMSIwIAYJKoZIhvcNAQkBFhNtbWF4dXJAbWlyYW50
 
aXMuY29tMB4XDTE2MDUyNjEwMTYwN1oXDTI2MDUyNDEwMTYwN1owgZwxCzAJBgNV
 
BAYTAlVBMRAwDgYDVQQIDAdLaGFya292MRAwDgYDVQQHDAdLaGFya292MRQwEgYD
 
VQQKDAtNaXJhbnRpc0luYzEbMBkGA1UECwwSU2VydmljZXNEZXBhcnRtZW50MRIw
 
EAYDVQQDDAljYS1zZXJ2ZXIxIjAgBgkqhkiG9w0BCQEWE21tYXh1ckBtaXJhbnRp
 
cy5jb20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCuZEMVa87WGQJl
 
1foQGNt4Qh/CWcggjjIqn8IYSPPtqn3YAxvUnubA+DQxkH7PNYR6G9PdNgQon2mV
 
xvwVFL6YouDkPtEO101B3vM28U3vEEOSLUcign+2XqzKf7lqyXzMK7/wk+iubAfH
 
hVhXosC+TSwH+eywO1lo2vbOZkf93ZiURDEZfixcMLuYMM8xdOeWeWtnQIA7D8QF
 
E5wADWXaYpMlmZzHmmtx76l5BGZL75pG0YkAexllu5idlqADhN77xGM69ZSV/pYJ
 
apMRhy4z0e17UzEbGWgv6OnUNhwGhOCgyIRk7PTKyjU+mxh3qdoNaqNt7Jj60EB7
 
dvzHeosrizcYaFwaqbBxVRMKJOcNYh7ZYlyrdexa9Wau3xf0NFvyBZ8rvsBv9Ax+
 
xuRCq2uVGc3rQHZzkwocquAgACY+1GpxFtpNUBhvmi25TUbm8OkAq7lYpf2sptJH
 
ReZf4EdHhWuHLI93X5Pm6cb0uE+85kuJPNGMprcwvWM5QiT1N56LAVKiApZTSqo8
 
bcuJZs+nXI4IrYRXjCn75E0LLRpVLXc7+vfKHgHClL9/bhOxcOdwyXejnDQVzWe4
 
5JvwzLtL3/4KDiTLjG4foJztosxn92cAJAp30cdUalf7QkEFqp5RCvRY2vFVosM5
 
0Vu3bicGcyucHyxigxWP44qpaJe9WwIDAQABo10wWzAdBgNVHQ4EFgQU/msFAiI9
 
2/9ld4t5M9XYonUlHyIwHwYDVR0jBBgwFoAU/msFAiI92/9ld4t5M9XYonUlHyIw
 
DAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAQYwDQYJKoZIhvcNAQELBQADggIBAHMZ
 
609hm52CYxouUnvH+timAgiqbVv8QCb6IzgM5uRNejlxTzj63RBFvxC6n2UPqBpj
 
yGtYuwpO249e+sD01ZS0r4B69a3yBePH6Ay4leqfStuqc9dcyamK7lQk8PAsF4wv
 
yrywNpgGbecDReHJPrOmc5nQw3AlhwcwceHHS7mqaS+SWj1md97saD8uqHK0O5vu
 
PFlJUKiztQqR2PMPWiKw+Pjri+RAXHj4TCxjPt5Z0wSR+xP/YE1MymvegPUrZ7/7
 
rFWuqfHDVLh7IA16q+h1xU+FMnVdiPigEJ+Omn6dDfqHD9BBcKOUFYOJiXtG4TDc
 
tX401kpG1Qm00kS3XtveQgGPF1OWNLyyDr1dDy8/B+77W1yli/VbzK6H4jwrVGy7
 
EAEzpfbwRJnSIIUczG8//1G6a5yrpcjohKhWY1uBrv56LJdq16OVN3aK5nacMKmQ
 
p+YpPu/ZT5LVUOzt8I32Q8i1Tn9YZma7vEftvGCZKVcgqlVIpb3P7/7dyRXoMuFD
 
bErDIDxScMvg82Vg2JF4NzaOp+CXRAYuXbel5anoFOt7FFfnO2w0/aLQpAT+jpze
 
qcL37IGyCGxOloej7NkdQsX9eJJNIdy5oLjniJ8/d402A0zziPdfrqa0c3FpGukZ
 
syWlWH0RCerDgVmq+i6l5zGbtx/tKPpLYcJkAetJ
 
-----END CERTIFICATE-----
 
 
- The hostname in the certificate matches 'ldap1'.
 
- Peer's certificate is trusted
 
- Version: TLS1.2
 
- Key Exchange: RSA
 
- Cipher: AES-128-CBC
 
- MAC: SHA1
 
- Compression: NULL
 
- Handshake was completed
 
 
- Simple Client Mode:
 
 
</PRE>
 
</PRE>

Текущая версия на 09:06, 30 октября 2023

LDAP Шифрование

ТУТ я просто дублирую статью со своими комментариями и изменениями


У меня в отличие от примера - 2 сервера в режиме мастер-мастер репликации, потому мне нужно 3 сертификата (по факту - 1 на оба сервера но на момент написания статьи я этого не понимал)

  • Для сервера ldap1
  • Для сервера ldap2
  • Для сервера ldap - адрес который будет проксировать запросы на один из 2 серверов.

Так как в конечной конфигурации все запросы приходят на ldap (HAProxy) то фактически нужно установить этот сертификат на обоих серверах. Потому часть с генерацией отдельных сертификатов для каждого из серверов можно пропустить.

Подготовка CA, выпуск корневого сертефиката

Предварительная настройка - создание инфраструктуры CA

Итак, мы создаём централизованную инфраструктуру открытых ключей (PKI) в миниатюре.

Для этого сформируем пару закрытый ключ/корневой сертификат удостоверяющего центра.

Причём сертификат будет подписан этим же закрытым ключом (т. е. станет «самоподписанным»).

Затем сгенерируем новые закрытые ключи для нашей службы каталогов и создадим для неё сертификаты, подписанный закрытым ключом нашего удостоверяющего центра. При этом клиенские рабочие станции должны знать только корневой сертификат.


Используя его они могут установить безопасное соединение с любым сервером, который имеет закрытый ключ и соответствующий ему сертификат, подписанный нашим CA.


Удостоверяющий центр (CA) желательно разворачивать на отдельной машине, не имеющей подключения к сети, но для простоты примера мы проделаем всю работу на ldap1 (node-3)


В конфигурационном файле /etc/ssl/openssl.cnf в секции [ CA_default ] для удобства поменяем значение директивы dir = ./demoCA на dir = ./. В этом же разделе директивой default_days задаётся срок действия выпускаемых сертификатов.


# cat /etc/ssl/openssl.cnf | grep -v '#' | grep -v ^$
HOME			= .
RANDFILE		= $ENV::HOME/.rnd
oid_section		= new_oids
[ new_oids ]
tsa_policy1 = 1.2.3.4.1
tsa_policy2 = 1.2.3.4.5.6
tsa_policy3 = 1.2.3.4.5.7
[ ca ]
[ CA_default ]
dir = ./.
default_days	= 3650
policy		= policy_match
[ policy_match ]
countryName		= match
stateOrProvinceName	= match
organizationName	= match
organizationalUnitName	= optional
commonName		= supplied
emailAddress		= optional
[ policy_anything ]
countryName		= optional
stateOrProvinceName	= optional
localityName		= optional
organizationName	= optional
organizationalUnitName	= optional
commonName		= supplied
emailAddress		= optional
[ req ]
default_bits		= 2048
default_keyfile 	= privkey.pem
distinguished_name	= req_distinguished_name
attributes		= req_attributes
string_mask = utf8only
[ req_distinguished_name ]
countryName			= Country Name (2 letter code)
countryName_default		= AU
countryName_min			= 2
countryName_max			= 2
stateOrProvinceName		= State or Province Name (full name)
stateOrProvinceName_default	= Some-State
localityName			= Locality Name (eg, city)
0.organizationName		= Organization Name (eg, company)
0.organizationName_default	= Internet Widgits Pty Ltd
organizationalUnitName		= Organizational Unit Name (eg, section)
commonName			= Common Name (e.g. server FQDN or YOUR name)
commonName_max			= 64
emailAddress			= Email Address
emailAddress_max		= 64
[ req_attributes ]
challengePassword		= A challenge password
challengePassword_min		= 4
challengePassword_max		= 20
unstructuredName		= An optional company name
[ usr_cert ]
basicConstraints=CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
nsComment = "OpenSSL Generated Certificate"
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid,issuer
[ v3_req ]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
[ v3_ca ]
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid:always,issuer
basicConstraints = CA:true
keyUsage = cRLSign, keyCertSign
[ crl_ext ]
authorityKeyIdentifier=keyid:always
[ proxy_cert_ext ]
basicConstraints=CA:FALSE
nsComment			= "OpenSSL Generated Certificate"
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid,issuer
proxyCertInfo=critical,language:id-ppl-anyLanguage,pathlen:3,policy:foo
[ tsa ]
[ tsa_config1 ]

Файлы index.txt и serial будут играть роль своеобразной базы данных, чтобы отслеживать статус выпущенных закрытых ключей и сертификатов.


Создадим каталог для нашего удостоверяющего центра (CA) и установим безопасные права доступа. Затем зададим значение umask таким, чтобы вновь создаваемые файлы имели права доступа чтения и записи только для создавшего их пользователя, затем создадим структуру каталогов и файлов для своего удостоверяющего центра и Сгенерируем закрытый ключ удостоверяющего центра (длиной 4096 бит).

Он должен хранится особенно бережно. Поэтому мы защитим его при помощи шифра AES. Вам будет предложено ввести пароль для доступа к новому закрытому ключу.

Запомните его и не потеряйте. Это последний рубеж защиты от злоумышленника. Без пароля выпустить новые сертификаты не получится. (в моем пример ключ - r00tme)


0010_prepere_CA.sh
mkdir /root/CA

chmod u=rwx,g=,o= /root/CA
pushd /root/CA
umask 066


mkdir certs crl newcerts private
chmod 700 private
touch index.txt
echo 1000 > serial


# Create key pass = r00tme
openssl genrsa -aes256 -out private/rootca.key 4096
chmod 400 private/rootca.key
chattr +i private/rootca.key

popd

Выпуск корневого сертификата CA

Сейчас мы можем выпустить корневой сертификат удостоверяющего центра, подписав его закрытым ключом rootca.key. Так как это сертификат УЦ, используем расширение v3_ca

0011_rootCa_crt.sh
openssl req \
-sha256 \
-new \
-x509 \
-days 3650 \
-extensions v3_ca \
-key private/rootca.key \
-out certs/rootca.crt \
-subj /C=UA/ST=Kharkov/L=Kharkov/O=MirantisInc/OU=ServicesDepartment/CN=ca-server/emailAddress=mmaxur@mirantis.com

chmod 444 certs/rootca.crt
chattr +i certs/rootca.crt

openssl x509 -in certs/rootca.crt -noout -text

popd



С помощью модификатора subj заносим в сертификат информацию:

C - Country Name (страна) ST - State or Province Name (штат или провинция) L - Locality Name (город) O - Organization Name (наименование организации) OU - Organizational Unit Name (наименование подразделения) CN - Common Name (имя субъекта или FQDN сервера) emailAddress - Email Address (адрес электронной почты)


Можем посмотреть содержимое сертификата следующей командой:

openssl x509 -in certs/rootca.crt -noout -text

Удостоверяющий центр готов к выпуску сертификатов.

Создание сертификатов для серверов

Сертификат для сервеа LDAP1

Закрытый Ключ

Создадим закрытый ключ для сервера службы каталогов ldap1

0012_private_key_for_ldap1.sh
pushd /root/CA
openssl genrsa \
-out private/ldap1.key 4096

chmod 400 private/ldap1.key

popd

Запрос на сертификат

Сгенерируем запрос на подпись сертификата. Наименование организации должно совпадать с наименованием в корневом сертификате УЦ. В качестве Common Name укажем FQDN нашего сервера (в моем случае это ldap1)

0013_create_cert_request_for_ldap1.sh
pushd /root/CA

openssl req \
-sha256 -new \
-key private/ldap1.key \
-out certs/ldap1.csr \
-subj /C=UA/ST=Kharkov/L=Kharkov/O=MirantisInc/OU=ServicesDepartment/CN=ldap1/emailAddress=mmaxur@mirantis.com

popd

Генерируем сертификат подписанный своим СА

Подпишем его с помощью своего собственного CA:

0014_create_and_sign_cert_for_ldap1.sh
pushd /root/CA

openssl ca \
-extensions usr_cert \
-notext \
-md sha256 \
-keyfile private/rootca.key \
-cert certs/rootca.crt \
-in certs/ldap1.csr \
-out certs/ldap1.crt

chmod 444 certs/ldap1.crt

popd

Копирование файлов

Так как у нас сертификат генерировался на том же сервере где и используется (node-3 он же ldap1) - то можно просто скопировать его в правильное место и установить права.

0015_move_certs_to_ldap_config_dir.sh
pushd /root/CA

mkdir /etc/ldap/ssl
chown openldap:openldap /etc/ldap/ssl
chmod 0500 /etc/ldap/ssl
cp certs/ldap1.crt private/ldap1.key /etc/ldap/ssl


chown openldap:openldap /etc/ldap/ssl/{ldap1.crt,ldap1.key}
chmod 0400 /etc/ldap/ssl/{ldap1.crt,ldap1.key}

cp certs/rootca.crt /etc/ssl/certs/

chmod 0644 /etc/ssl/certs/rootca.crt

popd

Проверка сертификата

0016_check_cert.sh
openssl verify -verbose -CAfile /etc/ssl/certs/rootca.crt  /etc/ldap/ssl/ldap1.crt

Конфигурация LDAP сервера

Внести исправления в конфигурацию

0201_install_tls_certs.ldif
dn: cn=config
add: olcTLSVerifyClient
olcTLSVerifyClient: never
-
add: olcTLSCertificateFile
olcTLSCertificateFile: /etc/ldap/ssl/ldap1.crt
-
add: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/ldap/ssl/ldap1.key
-
add: olcTLSCACertificateFile
olcTLSCACertificateFile: /etc/ssl/certs/rootca.crt


0202_configure_ldap_to_use_tls.sh
ldapmodify -Y EXTERNAL -H ldapi:/// <0201_install_tls_certs.ldif

Запретить нешифрованные подключения

Для того тто бы использовать ldaps:// в настройках /etc/default/slapd

SLAPD_SERVICES="ldaps://ldap1  ldapi:///"

После рестарта - проверить:

netstat  -ntpl | grep slap
tcp        0      0 10.20.0.3:636           0.0.0.0:*               LISTEN      17649/slapd

Настроить /etc/ldap/ldap.conf

Настроить файл конфигурации /etc/ldap/ldap.conf который используют клиенты:

BASE            dc=fuel_domain
URI             ldaps://ldap1
TLS_CACERT      /etc/ssl/certs/rootca.crt
TLS_REQCERT     demand
TIMELIMIT       15
TIMEOUT         20


Проверка конфигурации

Проверить конфигурацию:

0203_check_config.sh
ldapsearch -QLLLY EXTERNAL -H ldapi:/// -b cn=config -s base | grep -i tls


olcTLSCACertificateFile: /etc/ssl/certs/rootca.crt
olcTLSCertificateFile: /etc/ldap/ssl/ldap1.crt
olcTLSCertificateKeyFile: /etc/ldap/ssl/ldap1.key
olcTLSVerifyClient: never

Проверить подключение на уровне tls/ssl (так же можно провериять и другие подключения - не только LDAP):

0204_check_tls_connection.sh
gnutls-cli \
-p 636 ldap1 \
-d 1 \
--print-cert \
--x509cafile  /etc/ssl/certs/rootca.crt

Processed 1 CA certificate(s).
Resolving 'ldap1'...
Connecting to '10.20.0.6:636'...
- Certificate type: X.509
 - Got a certificate list of 2 certificates.
 - Certificate[0] info:
  - subject `C=UA,ST=Kharkov,O=MirantisInc,OU=ServicesDepartment,CN=ldap1,EMAIL=mmaxur@mirantis.com', issuer `C=UA,ST=Kharkov,L=Kharkov,O=MirantisInc,OU=ServicesDepartment,CN=ca-server,EMAIL=mmaxur@mirantis.com', RSA key 4096 bits, signed using RSA-SHA256, activated `2016-05-26 17:23:29 UTC', expires `2026-05-24 17:23:29 UTC', SHA-1 fingerprint `a8d1ac296e514badd9aed44fbc405a76e7e63d1b'

-----BEGIN CERTIFICATE-----
MIIGKTCCBBGgAwIBAgICEAIwDQYJKoZIhvcNAQELBQAwgZwxCzAJBgNVBAYTAlVB
MRAwDgYDVQQIDAdLaGFya292MRAwDgYDVQQHDAdLaGFya292MRQwEgYDVQQKDAtN
aXJhbnRpc0luYzEbMBkGA1UECwwSU2VydmljZXNEZXBhcnRtZW50MRIwEAYDVQQD
DAljYS1zZXJ2ZXIxIjAgBgkqhkiG9w0BCQEWE21tYXh1ckBtaXJhbnRpcy5jb20w
HhcNMTYwNTI2MTcyMzI5WhcNMjYwNTI0MTcyMzI5WjCBhTELMAkGA1UEBhMCVUEx
EDAOBgNVBAgMB0toYXJrb3YxFDASBgNVBAoMC01pcmFudGlzSW5jMRswGQYDVQQL
DBJTZXJ2aWNlc0RlcGFydG1lbnQxDTALBgNVBAMMBGxkYXAxIjAgBgkqhkiG9w0B
CQEWE21tYXh1ckBtaXJhbnRpcy5jb20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw
ggIKAoICAQC1a5nMVGd00XODBLZmPJIME89ybRrxzJIhlPk33p6g/8Hh9sTj3U9m
JQ/QLWORyDGXVJM5UEdInYD5xSU9l/CZY81Z6Uwk4X6GtRng8Au/8mT0hidSPy0F
BtJmgzgafMjUHbQWJbgXzbXz6Gu4Pu+NKh2gkaCrFN59wOJOGOhnf4TMVLoVw+f9
rn7hA0NcWWhs0sQ6ZPvhsic0A6qh1LgYEzTSSFReywbKH2xg+v4qGoHnnkw2U4r0
pBUYF22WGMrD1khh9QKbsWtQrH5YNcrTJ8c3gIYioTtAH/BwvAvVZp3G2i3R5cD4
gDY56OUIuFfTuuYJvpSWC8dInGRxwoZ3RnFvKFn5N1RwKULe9LlR2+ATi4PwIn7q
rJaa4ukhhr6SRNBSRQsQH1b7kXCIpwSbCNxzTBL/HdvzYHd0CmFhiu3BgiyvjY0u
WvnKk8q/u3j0SkjoG7rebrMhZcXz7Leza2F3O8tSZ7bXeBty1HVnFc8a4SQ52N/f
IIAwBgZQoIGgfkNKzriUZnRn6+tABj6JE5dEv9/BQ77FceoB/cLaK7BnEXRxbTYQ
qyqjLXIwaRM14hDUSuVmRxHA6eGiTZ1YktYQwwZM9/erSw/EpD8Eweg2G8Bf1I1C
JoJkP3Bj5RojE6OM5xcn4G3EsPylunoBcZLwVVqEiyBCpgoIU84uYwIDAQABo4GJ
MIGGMAkGA1UdEwQCMAAwCwYDVR0PBAQDAgXgMCwGCWCGSAGG+EIBDQQfFh1PcGVu
U1NMIEdlbmVyYXRlZCBDZXJ0aWZpY2F0ZTAdBgNVHQ4EFgQUgtaUYQW3gDDQnTcP
b0KA4WeeWAEwHwYDVR0jBBgwFoAU/msFAiI92/9ld4t5M9XYonUlHyIwDQYJKoZI
hvcNAQELBQADggIBAINHcZZCARgRLZYKGjNkste5L14z+YMA51aBrS6RcwllTM8b
1UAWAwtcVD/GsU21nNYKlRu0cH2Iv8CbZiT1zhrZDCfbcr2l+P5LAtxhObvdr+pk
+tHijGbRgAXGYGlDXUT7sECf8Hw588IVMJw5DPUo0Fl4yppsE6/YBodbCl4dD+/R
uqBrJVT6HwA/Hx1Cgz5+wjTNSztsljQE7U9eJNVoH1hk/W1iHjweAPkgmjdnpfA9
zYxWxAIW4wMY2RAnIaQuyYt4a8L0097VEOUlM9N+dHMtImS0Z+Qgyr7tCViYwHZV
MehpzxsaGbDU0fe8qF474LyA9D62u+BqpHA1FVjQXPtY39zFnWBc83ZQgj2y6gfV
XuYtAcnK7j/QZqE+KfemlNc5G45rvWstkNkbnNgl78R3h3Jx0Dsu0JrBsqU0qjmp
CPyZfbUi6F21B3hf+BzKhTiE4g8MRvddLVRiXGTsyorzbsFnj5R5LyVTDFobvS4W
9KEjd7jaHxrlTLo/e3G1PRymF63wIa90mgcQgjTuKsO4R7BU7KRSPJr/oBUhYS0/
p2QHDxEWmH/uy+Qc3X7tNUqpnqbd3tx3WnXFNClqbp3RVymwrolZV/8dgrE1sy1/
+DwfXsmeK06+Bykppun6glQGL1GX+E9kMZsiWXIrfOocvRqLtbAmX1qt1/jk
-----END CERTIFICATE-----

 - Certificate[1] info:
  - subject `C=UA,ST=Kharkov,L=Kharkov,O=MirantisInc,OU=ServicesDepartment,CN=ca-server,EMAIL=mmaxur@mirantis.com', issuer `C=UA,ST=Kharkov,L=Kharkov,O=MirantisInc,OU=ServicesDepartment,CN=ca-server,EMAIL=mmaxur@mirantis.com', RSA key 4096 bits, signed using RSA-SHA256, activated `2016-05-26 10:16:07 UTC', expires `2026-05-24 10:16:07 UTC', SHA-1 fingerprint `0f74fdaf2195ae2b1f599e3963e3b18970cb81a3'

-----BEGIN CERTIFICATE-----
MIIGGjCCBAKgAwIBAgIJAN1rpxx3AA9AMA0GCSqGSIb3DQEBCwUAMIGcMQswCQYD
VQQGEwJVQTEQMA4GA1UECAwHS2hhcmtvdjEQMA4GA1UEBwwHS2hhcmtvdjEUMBIG
A1UECgwLTWlyYW50aXNJbmMxGzAZBgNVBAsMElNlcnZpY2VzRGVwYXJ0bWVudDES
MBAGA1UEAwwJY2Etc2VydmVyMSIwIAYJKoZIhvcNAQkBFhNtbWF4dXJAbWlyYW50
aXMuY29tMB4XDTE2MDUyNjEwMTYwN1oXDTI2MDUyNDEwMTYwN1owgZwxCzAJBgNV
BAYTAlVBMRAwDgYDVQQIDAdLaGFya292MRAwDgYDVQQHDAdLaGFya292MRQwEgYD
VQQKDAtNaXJhbnRpc0luYzEbMBkGA1UECwwSU2VydmljZXNEZXBhcnRtZW50MRIw
EAYDVQQDDAljYS1zZXJ2ZXIxIjAgBgkqhkiG9w0BCQEWE21tYXh1ckBtaXJhbnRp
cy5jb20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCuZEMVa87WGQJl
1foQGNt4Qh/CWcggjjIqn8IYSPPtqn3YAxvUnubA+DQxkH7PNYR6G9PdNgQon2mV
xvwVFL6YouDkPtEO101B3vM28U3vEEOSLUcign+2XqzKf7lqyXzMK7/wk+iubAfH
hVhXosC+TSwH+eywO1lo2vbOZkf93ZiURDEZfixcMLuYMM8xdOeWeWtnQIA7D8QF
E5wADWXaYpMlmZzHmmtx76l5BGZL75pG0YkAexllu5idlqADhN77xGM69ZSV/pYJ
apMRhy4z0e17UzEbGWgv6OnUNhwGhOCgyIRk7PTKyjU+mxh3qdoNaqNt7Jj60EB7
dvzHeosrizcYaFwaqbBxVRMKJOcNYh7ZYlyrdexa9Wau3xf0NFvyBZ8rvsBv9Ax+
xuRCq2uVGc3rQHZzkwocquAgACY+1GpxFtpNUBhvmi25TUbm8OkAq7lYpf2sptJH
ReZf4EdHhWuHLI93X5Pm6cb0uE+85kuJPNGMprcwvWM5QiT1N56LAVKiApZTSqo8
bcuJZs+nXI4IrYRXjCn75E0LLRpVLXc7+vfKHgHClL9/bhOxcOdwyXejnDQVzWe4
5JvwzLtL3/4KDiTLjG4foJztosxn92cAJAp30cdUalf7QkEFqp5RCvRY2vFVosM5
0Vu3bicGcyucHyxigxWP44qpaJe9WwIDAQABo10wWzAdBgNVHQ4EFgQU/msFAiI9
2/9ld4t5M9XYonUlHyIwHwYDVR0jBBgwFoAU/msFAiI92/9ld4t5M9XYonUlHyIw
DAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAQYwDQYJKoZIhvcNAQELBQADggIBAHMZ
609hm52CYxouUnvH+timAgiqbVv8QCb6IzgM5uRNejlxTzj63RBFvxC6n2UPqBpj
yGtYuwpO249e+sD01ZS0r4B69a3yBePH6Ay4leqfStuqc9dcyamK7lQk8PAsF4wv
yrywNpgGbecDReHJPrOmc5nQw3AlhwcwceHHS7mqaS+SWj1md97saD8uqHK0O5vu
PFlJUKiztQqR2PMPWiKw+Pjri+RAXHj4TCxjPt5Z0wSR+xP/YE1MymvegPUrZ7/7
rFWuqfHDVLh7IA16q+h1xU+FMnVdiPigEJ+Omn6dDfqHD9BBcKOUFYOJiXtG4TDc
tX401kpG1Qm00kS3XtveQgGPF1OWNLyyDr1dDy8/B+77W1yli/VbzK6H4jwrVGy7
EAEzpfbwRJnSIIUczG8//1G6a5yrpcjohKhWY1uBrv56LJdq16OVN3aK5nacMKmQ
p+YpPu/ZT5LVUOzt8I32Q8i1Tn9YZma7vEftvGCZKVcgqlVIpb3P7/7dyRXoMuFD
bErDIDxScMvg82Vg2JF4NzaOp+CXRAYuXbel5anoFOt7FFfnO2w0/aLQpAT+jpze
qcL37IGyCGxOloej7NkdQsX9eJJNIdy5oLjniJ8/d402A0zziPdfrqa0c3FpGukZ
syWlWH0RCerDgVmq+i6l5zGbtx/tKPpLYcJkAetJ
-----END CERTIFICATE-----

- The hostname in the certificate matches 'ldap1'.
- Peer's certificate is trusted
- Version: TLS1.2
- Key Exchange: RSA
- Cipher: AES-128-CBC
- MAC: SHA1
- Compression: NULL
- Handshake was completed

- Simple Client Mode:

Создание сертификата для сервера LDAP2

Все действия - аналогичны LDAP1

Ключ

1012_private_key_for_ldap2.sh
pushd /root/CA
openssl genrsa \
-out private/ldap2.key 4096


chmod 400 private/ldap2.key


popd

Запрос на сертефикат

1013_create_cert_request_for_ldap2.sh
pushd /root/CA


openssl req \
-sha256 -new \
-key private/ldap2.key \
-out certs/ldap2.csr \
-subj /C=UA/ST=Kharkov/L=Kharkov/O=MirantisInc/OU=ServicesDepartment/CN=ldap2/emailAddress=mmaxur@mirantis.com

popd

Создание и подписывание сертификата

1014_create_and_sign_cert_for_ldap2.sh
pushd /root/CA

openssl ca \
-extensions usr_cert \
-notext \
-md sha256 \
-keyfile private/rootca.key \
-cert certs/rootca.crt \
-in certs/ldap2.csr \
-out certs/ldap2.crt

chmod 444 certs/ldap2.crt

popd

HA Mode

Так как в дальнейшем нам понадобиться Единый сертификат - то генерируем его полностью аналогичным образом.
Причины, почему нужно использовать один сертификат на всех серверах реплики

  • Запрос приходит на hostname = LDAP а не на hostname = LDAP1/LDAP2 соответственно в сертефикате должно быть указано "имя" кластера. Запросы к нодам кластера напрямую по их именам в этом случае требуют игнорирования ошибок TLS
  • Так как репликация касается в том числе и имен файлов сертификатов лучше что бы они были одинаковы для всех серверов.


2012_private_key_for_ldap.sh
pushd /root/CA
openssl genrsa \
-out private/ldap.key 4096

chmod 400 private/ldap.key

popd


2013_create_cert_request_for_ldap.sh
pushd /root/CA


openssl req \
-sha256 -new \
-key private/ldap.key \
-out certs/ldap.csr \
-subj /C=UA/ST=Kharkov/L=Kharkov/O=MirantisInc/OU=ServicesDepartment/CN=ldap/emailAddress=mmaxur@mirantis.com


popd
2014_create_and_sign_cert_for_ldap.sh
pushd /root/CA

openssl ca \
-extensions usr_cert \
-notext \
-md sha256 \
-keyfile private/rootca.key \
-cert certs/rootca.crt \
-in certs/ldap.csr \
-out certs/ldap.crt

chmod 444 certs/ldap.crt

popd
3201_install_tls_certs.ldif
dn: cn=config
replace: olcTLSVerifyClient
olcTLSVerifyClient: never
-
replace: olcTLSCertificateFile
olcTLSCertificateFile: /etc/ldap/ssl/ldap.crt
-
replace: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/ldap/ssl/ldap.key
-
replace: olcTLSCACertificateFile
olcTLSCACertificateFile: /etc/ssl/certs/rootca.crt
3202_configure_ldap_to_u~s_one_name_on_cluster.sh
ldapmodify -Y EXTERNAL -H ldapi:/// <3201_install_tls_certs.ldif