Вики IT-KB

Пошаговые руководства, шпаргалки, полезные ссылки...

Инструменты пользователя

Инструменты сайта


unix-linux:openssl:how-to-add-domain-certification-authority-root-certificates-for-openssl-in-linux

Добавление в Linux корневых сертификатов X.509 локального корпоративного Центра сертификации

Некоторые службы и приложения в Linux могут использовать в своей работе сетевые соединения, защищаемые с помощью SSL/TLS. Иногда требуется, чтобы цифровой сертификат, используемый для защиты соединений и предоставляемый каким-то удалённым сервером из локальной сети, принимался локальной Linux-системой как доверенный. Для этого в Linux-систему может потребоваться добавить корневой сертификат Центра сертификации (ЦС), которым были выданы сертификаты, используемые для защиты соединений. Типичный пример, когда локальная Linux-система для механизмов аутентификации и авторизации подключается с помощью ldap-клиента (например OpenLDAP) к контроллеру домена Active Directory (AD) и контроллер домена предоставляет ldap-клиенту для защиты соединения сертификат, выданным локальным корпоративным ЦС.

Здесь мы рассмотрим простой пример того, как в Linux-систему добавить корневые сертификаты локального корпоративного ЦС.

О том, как «выуживать» корневые сертификаты ЦС, которыми подписаны сертификаты контроллеров домена AD, я приводил пример ранее. Если под руками есть доменная Windows-машина, то можно выгрузить корневой сертификат из оснастки управления сертификатами из раздела корневых сертификатов доверенных ЦС. Если корневой сертификат не один, а несколько (цепочка), то каждый корневой сертификат цепочки выгрузим в файл в кодировке Base-64, сразу присвоив им расширение PEM вместо CER

В результате такой выгрузки в нашем примере получится пара файлов AD-RootCA.pem (корневой сертификат ЦС верхнего уровня) и AD-SubCA.pem (корневой сертификат подчинённого ЦС). Скопируем полученные pem-файлы на наш Linux-сервер, например с помощью утилиты pscp, во временный каталог.

С:\Tools\PuTTy>pscp.exe С:\Temp\AD-*.pem linux-user@LINUX-SERVER:/tmp
AD-RootCA.pem | 1 kB | 1.3 kB/s | ETA: 00:00:00 | 100% AD-SubCA.pem | 1 kB | 1.9 kB/s | ETA: 00:00:00 | 100%

Перейдём на консоль Linux-сервера и переместим файлы коневых сертификатов из временного каталога в каталог, который мы создадим специально для хранения наших корневых сертификатов и подправим на эти сертификаты права (если требуется)

# mkdir /etc/ssl/certs-corp-ca
# mv /tmp/AD-*.pem /etc/ssl/certs-corp-ca
# chown root:root /etc/ssl/certs-corp-ca/AD-*.pem
# ls -la /etc/ssl/certs-corp-ca
... -rw-r--r-- 1 root root 1344 Mar 6 19:35 AD-RootCA.pem -rw-r--r-- 1 root root 1922 Mar 6 19:35 AD-SubCA.pem

Теперь обработаем содержимое каталога с нашими сертификатами утилитой OpenSSL - c_rehash:

# c_rehash /etc/ssl/certs-corp-ca
Doing /etc/ssl/certs-corp-ca AD-RootCA.pem => 36865f67.0 AD-RootCA.pem => bb8428b0.0 AD-SubCA.pem => e740e31e.0 AD-SubCA.pem => 536fc63e.0

В результате выполнения этой команды в этом же каталоге будут созданы специальные хеш-ссылки на файлы сертификатов.

# ls -la /etc/ssl/certs-corp-ca
... lrwxrwxrwx 1 root root 13 Mar 6 20:06 36865f67.0 -> AD-RootCA.pem lrwxrwxrwx 1 root root 12 Mar 6 20:06 536fc63e.0 -> AD-SubCA.pem -rw-r--r-- 1 root root 1344 Mar 6 19:59 AD-RootCA.pem -rw-r--r-- 1 root root 1922 Mar 6 19:59 AD-SubCA.pem lrwxrwxrwx 1 root root 13 Mar 6 20:06 bb8428b0.0 -> AD-RootCA.pem lrwxrwxrwx 1 root root 12 Mar 6 20:06 e740e31e.0 -> AD-SubCA.pem

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

# find -L /etc/ssl/certs-corp-ca -type l -exec rm {} +

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

В качестве примера рассмотрим клиента OpenLDAP, для которого можно указать созданный нами каталог в конфигурационном файле ldap.conf (/etc/ldap/ldap.conf) в дополнительной опции TLS_CACERTDIR, таким образом, чтобы эта опция шла после имеющейся по умолчанию опции TLS_CACERT (подробнее об этих опциях можно найти в man ldap.conf):

ldap.conf
...
# TLS certificates (needed for GnuTLS)
TLS_CACERT      /etc/ssl/certs/ca-certificates.crt
 
# Corp CA root certificates storage
TLS_CACERTDIR   /etc/ssl/certs-corp-ca

Примечание.
В Debian GNU/Linux параметр TLS_CACERTDIR может игнорироваться, о чём сказано в man ldap.conf.

TLS_CACERTDIR <path>
Specifies the path of a directory that contains Certificate Authority certificates in separate individual files. The TLS_CACERT is always used before TLS_CACERTDIR. This parameter is ignored with GnuTLS. On Debian openldap is linked against GnuTLS…

В таком случае используйте для хранения доверенных корневых сертификатов отдельный файл (бандл, в который собраны все доверенные корневые сертификаты) и указывайте его расположение через параметр TLS_CACERT.

Собрать все нужные доверенные корневые сертификаты Центров сертификации в бандл можно простой склейкой содерживого PAM-файлов в колировке Base-64:

# mkdir /etc/ssl/certs-corp-ca-chain
# cd /etc/ssl/certs-corp-ca
# cat ./AD-RootCA.pem  ./AD-SubCA.pem > /etc/ssl/certs-corp-ca-chain/AD-Chain.pem
# cat /etc/ssl/certs-corp-ca-chain/AD-Chain.pem
-----BEGIN CERTIFICATE----- ... <содержимое первого сертификата> ... -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- ... <содержимое второго сертификата> ... -----END CERTIFICATE-----

Соответственно, применительно к ранее упомянутому клиенту OpenLDAP в Debian GNU/Linux настройка конфигурации будет такой:

ldap.conf
...
# TLS certificates (needed for GnuTLS)
TLS_CACERT      /etc/ssl/certs-corp-ca-chain/AD-Chain.pem
 
# Corp CA root certificates storage
#TLS_CACERTDIR   /etc/ssl/certs-corp-ca

Автор первичной редакции:
Алексей Максимов
Время публикации: 25.03.2017 17:36

Обсуждение

Ваш комментарий:
 

unix-linux/openssl/how-to-add-domain-certification-authority-root-certificates-for-openssl-in-linux.txt · Последние изменения: 25.03.2017 19:16 — Алексей Максимов