Пошаговые руководства, шпаргалки, полезные ссылки...
БлогФорумАвторы
Полезные Online-сервисы
Перечень Бесплатного ПО
Подписка на RSS-канал
Некоторые службы и приложения в 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):
/etc/ldap/ldap.conf
man 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 настройка конфигурации будет такой:
... # 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