You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
84 lines
9.0 KiB
84 lines
9.0 KiB
9 years ago
|
---
|
||
|
title: CA в "школьном" AltLinux'е
|
||
|
tags: altlinux, debian, ненависть, сертификаты, school, репост
|
||
|
---
|
||
|
|
||
|
В рамках совместного с AlAn'ом проекта по созданию "школьной образовательной среды", как он это называет, наткнулся на интересные грабли в настройке альтовского сервера. Возможно, кому-то пригодится и сэкономит пару выходных.
|
||
|
|
||
|
Общие описание найденных граблей
|
||
|
---------------------------------
|
||
|
|
||
|
В прошлые выходные столкнулся с граблями при настройке альтовского сервера.
|
||
|
|
||
|
Зачем это понадобилось: стоит этакий "контроллер домена" на альте, на нем стоит ldap с альтератором, рядом стоит файлсервер с самбой, где хранится большая часть файлá в сети. Возникает логический вопрос - "а не сделать ли нам авторизацию самбы через альтовский ldap?". А поскольку гонять информацию plaintext'ом между серверами мягко говоря небезопасно, нужно шифрование.
|
||
|
|
||
|
---
|
||
|
|
||
|
Переношу корневой сертификат на файлсервер, добавляю в бандл с корневыми (см ниже). Прописываю все нужные опции в ldap.conf, libnss_ldap.conf (см ёще ниже). Пытаюсь настроить - хрен, дебиан ни в какую не хочет доверять альтовским сертификатам. WTF?
|
||
|
|
||
|
openssl s_client -connect ldap.school80.lan:636 \\
|
||
|
-CAfile /etc/ssl/certs/ca-certificates.crt
|
||
|
gnutls-cli -p 389 --print-cert --x509certfile \\
|
||
|
/etc/ssl/certs/ca-certificates.crt ldap.school80.lan
|
||
|
|
||
|
Обе команды ругаются на самоподписанный сертификат, причем вторая показывает на причину - слабый алгоритм подписи md5WithRSAEncryption.
|
||
|
|
||
|
Ага, значит косяк в альтовском сервере. ЧСХ - используемый релиз дебиана вышел этим летом и с тех пор мной не обновлялся, а вот альт, хоть и вышел уже достаточно давно, но обновлен он по самые помидоры - декабрьскими репами.
|
||
|
|
||
|
Пляшем с бубном для того, чтобы заставить альт использовать sha1 и увеличить длину ключа[^fn1], регенерируем сертификаты. Проверяем ещё раз - работает.
|
||
|
|
||
|
Описание плясок с бубном
|
||
|
-------------------------
|
||
|
|
||
|
Лезем в админку альта и видим что опции сертификатов нихрена не настраиваются. Готовим напильник, лезем в консоль и начинаем озираться в поисках настроек. Правим openssl.cnf - перегенерируем сертификаты - хрен там, опять килобайтный ключ и md5 вместо подписи. [^fn2] Материмся, ищем по ФС, где у нас лежат сертификаты:
|
||
|
|
||
|
# find / -name *.crt
|
||
|
/usr/share/ca-certificates/ca-bundle.crt
|
||
|
/etc/httpd2/conf/ssl.crt
|
||
|
/etc/httpd2/conf/ssl.crt/server.crt
|
||
|
/var/lib/ldap/usr/share/ca-certificates/ca-bundle.crt
|
||
|
|
||
|
ГДЕ?! Бандлы вижу, причем в 2х экземплярах (как оказалось, они слинкованы между собой.) Материмся, идем опять в админку, внимательно смотрим на ссылку "скачать сертификат". Формат "pem"[^fn3]. Блжад. Поиск по ФС, дубль 2:
|
||
|
|
||
|
# find / -name *.pem
|
||
|
/var/srv/public/ca-root.pem (1)
|
||
|
/var/lib/ssl/certs/postfix.pem (2)
|
||
|
...
|
||
|
/var/lib/alterator-ca/CA/cacert.pem (3)
|
||
|
...
|
||
|
/var/lib/ldap/var/lib/ssl/certs/postfix.pem (4)
|
||
|
...
|
||
|
|
||
|
Поскипаны файлы в одинаковых директориях. Нихрена не понятно, что, откуда и куда кладется. Экспериментально получено, что 3 директория - это то, что нам нужно, на её основе генерируется всё остальное. Причем (2) - это сами сертификаты демонов, (4) - их дубли в чруте для лдапа (нахрен они все там нужны?), а (1) - это отдельно положенный корневой сертификат в пределах досягаемости вебсервера. (2) и (4) слинкованы между собой на уровне файлов.
|
||
|
|
||
|
Поскольку если просто "в лоб" поменять сертификаты на правильно сгенерированные - не выйдет - после нажатия кнопки в админке всё вернется "взад", то будем разбираться, откуда же берутся параметры.
|
||
|
|
||
|
В общем, в конечном счете - нашел. 2 файла в /usr/bin: ca-sh-functions, cert-sh-functions и 1 файл в /usr/share/alterator-ca[^fn4]: CA.cnf . В первых 2х жестко прописаны размеры ключей - 1024 байта, во втором - так же жестко задан их алгоритм - md5. [^fn5]
|
||
|
|
||
|
Меняем на нужное, перегенерируем корневой сертификат, ключи и остальные сертификаты.
|
||
|
|
||
|
Проблема в том, что после обновления эта хрень опять сломается. В ca-sh-functions есть параметр, отвечающий за местоположение конфига, но если верить grep'у он больше нигде не упомянут, поэтому задать его "извне" не получится.
|
||
|
|
||
|
Размеры ключей вообще прописаны без всяких переменных, тупо числом. Претензия, собственно, у меня только одна - "какого хрена не используется системный конфиг openssl?".
|
||
|
|
||
|
Настройка Debian'а
|
||
|
-------------------
|
||
|
|
||
|
Добавление корневого сертификата там производится через помещение его в /usr/local/share/ca-certificates/ и запуска либо update-ca-certificates (неинтерактивно) либо dpkg-reconfigure (интерактивно), после этого, наш сертификат будет добавлен в основной бандл /etc/ssl/certs/ca-cerificates.crt, используемый всеми, кому не попадя.
|
||
|
|
||
|
Настройка libnss и pam_ldap - через сначала dpkg-reconfigure, потом правим руками опции для tls: ssl start_tls, tls_cacertfile [^fn6], uri. Конфиги лежат в /etc: libnss_ldap.conf и pam_ldap.conf. В первый рекомендую дописать "debug <n>", где <n> - уровень отладки. -1 выдаст что-то, по размеру напоминающее "Войну и мир".
|
||
|
|
||
|
Также нужно поправить /etc/ldap/ldap.conf: URI и BASE - чтобы не указывать их каждый раз, дописать "TLS_CACERT /etc/ssl/certs/ca-cerificates.crt" - чтобы использовало корневые сертификаты и "TLS_REQCERT hard", чтобы даже не думало лезть в каталог без шифрования.
|
||
|
|
||
|
[^fn1]: второе не обязательно, но раз уж взялись, то заодно и это поправим
|
||
|
|
||
|
[^fn2]: вот это один из примеров "нескучности" альта и причин такой ненависти к нему
|
||
|
|
||
|
[^fn3]: если посмотреть на него повнимательнее, то это тоже особый, альтовский "pem" - вместо сертификата с ключом в этом файле содержится текстовая информация о сертификате, сам сертификат ...и всё
|
||
|
|
||
|
[^fn4]: основной конфиг в /usr, поразительно и ...нескучно
|
||
|
|
||
|
[^fn5]: не "default", не "md5, sha1", как в дебиане, нет, "md5 с маленьким ключом хватит всем"
|
||
|
|
||
|
[^fn6]: осторожно, грабли - `tls_cacertdir` не реализован и работать не будет
|