===== Добавление в Linux корневых сертификатов X.509 локального корпоративного Центра сертификации ===== {{:unix-linux:openssl:pasted:20170325-183803.png }} Некоторые службы и приложения в **Linux** могут использовать в своей работе сетевые соединения, защищаемые с помощью **SSL**/**TLS**. Иногда требуется, чтобы цифровой сертификат, используемый для защиты соединений и предоставляемый каким-то удалённым сервером из локальной сети, принимался локальной Linux-системой как доверенный. Для этого в Linux-систему может потребоваться добавить __корневой сертификат Центра сертификации__ (**ЦС**), которым были выданы сертификаты, используемые для защиты соединений. Типичный пример, когда локальная Linux-система для механизмов аутентификации и авторизации подключается с помощью **ldap**-клиента (например **OpenLDAP**) к контроллеру домена **Active Directory** (**AD**) и контроллер домена предоставляет ldap-клиенту для защиты соединения сертификат, выданным локальным корпоративным ЦС. Здесь мы рассмотрим простой пример того, как в Linux-систему добавить корневые сертификаты локального корпоративного ЦС. О том, как "выуживать" корневые сертификаты ЦС, которыми подписаны сертификаты контроллеров домена AD, я приводил [[https://blog.it-kb.ru/2016/10/04/install-ovirt-4-0-part-9-ovirt-engine-aaa-integration-profile-for-users-authentication-via-ldap-microsoft-active-directory/|пример ранее]]. Если под руками есть доменная **Windows**-машина, то можно выгрузить корневой сертификат из оснастки управления сертификатами из раздела корневых сертификатов доверенных ЦС. Если корневой сертификат не один, а несколько (цепочка), то каждый корневой сертификат цепочки выгрузим в файл в кодировке **Base-64**, сразу присвоив им расширение **PEM** вместо **CER** {{ :unix-linux:openssl:pasted:20170325-174055.png }} В результате такой выгрузки в нашем примере получится пара файлов **AD-RootCA.pem** (корневой сертификат ЦС верхнего уровня) и **AD-SubCA.pem** (корневой сертификат подчинённого ЦС). Скопируем полученные pem-файлы на наш Linux-сервер, например с помощью утилиты [[http://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html|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''): ... # 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 \\ 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 ---- {{:user:blogroot.png?50&nolink |}} Автор первичной редакции:\\ [[user:blogroot|Алексей Максимов]] \\ Время публикации: 25.03.2017 17:36 {{tag>Linux Debian OpenSSL c_rehash SSL TLS GnuTLS "Certificate Authority" "Active Directory" "X.509" Certificate PEM Chain OpenLDAP}} ~~DISCUSSION~~