[devel] Взгляд на сертификаты в /usr/share/ca-certificates/ca-bundle.crt и сертификаты УЦ РФ
Vitaly Lipatov
lav на altlinux.ru
Вт Авг 1 00:31:07 MSK 2017
Прошу помощи в обсуждении ситуации с корневыми сертификатами, которые у
нас помещаются пакетом ca-certificates в
/usr/share/ca-certificates/ca-bundle.crt и (в идеале) используются всеми
средствами работы с сертификатами.
Стоит задача добавить к этому списку сертификатов как минимум корневые
сертификаты (самоподписанные сертификаты головного удостоверяющего
центра (ГУЦ) РФ
https://e-trust.gosuslugi.ru/MainCA
Ситуация осложняется тем, что ГУЦ передало функции по выдаче
сертификатов различным УЦ (аккредитованным), что приводит к появлению
нескольких тысяч промежуточных сертификатов
https://e-trust.gosuslugi.ru/CA
Чтобы посмотреть на это в действии, я собрал пакет ca-gost-certificates
с сертификатами всех УЦ, формируя файл
/usr/share/ca-gost-certificates/ca-gost-bundle.crt
на основе опубликованного XML-файла, содержащего все сертификаты
https://e-trust.gosuslugi.ru/CA/DownloadTSL?schemaVersion=0
Приклеив (concatenate)
/usr/share/ca-gost-certificates/ca-gost-bundle.crt к системному
/usr/share/ca-certificates/ca-bundle.crt можно добавить в поле видимости
OpenSSL эти сертификаты и он будет с ними работать после настройки
согласно https://www.altlinux.org/ГОСТ_в_OpenSSL
После этого совершенно свободно удалось проверить подпись на упомянутом
XML-файле с помощью xmlsec и модуля xmlsec-openssl.
Поскольку нынешняя архитектура не предусматривает подключение
промежуточных сертификатов, хочу посоветоваться, что мы с ними будем
делать.
Судя по всему, есть мнение, что такие сертификаты не должны включаться в
список ca-bundle.crt:
https://bugzilla.altlinux.org/show_bug.cgi?id=33498
С другой стороны, как я понимаю, ничего опасного в них тоже нет (они
подписаны корневыми УЦ, хотя это пока никто не проверял), кроме того,
что их много и их добавление сильно замедляет подгрузку файла
сертификатов (и запуск команды openssl, например).
Насколько я понимаю ситуацию в мире веб-сервисов (смотрю на примере
nginx, postfix, jabberd2 и т.п.) с установленными SSL-сертификатами, там
приходится применять следующий подход: указывается не только
сертификат, полученный для сайта, но ещё и все промежуточные
сертификаты, чтобы клиент, имеющий скудный набор корневых сертификатов
(в браузере или в ca-bundle.crt) мог удостовериться в его подлинности.
Сертификаты УЦ РФ сейчас практически не используются на сайтах (в
основном по причине проблем с браузерами), но планируются к активному
использованию в подписывании документов, проверке подписей.
Как правило, во всех случаях использования пользователю предлагается
скачать и установить необходимую цепочку сертификатов, что при
повседневном широкой работе с различными организациями мало приемлемо.
К моему большому удивлению, (в openssl) нет механизма (или я его не
заметил) использования нескольких файлов с сертификатами. Даже не
существует стандартного пути, и программы (библиотеки), использующие
ca-bundle.crt, должны сами указывать к нему путь.
Вот перечень проблем на эту тему:
В общем-то в клиенты вшиты разные свои пути, мы делаем для них ссылки
https://bugzilla.altlinux.org/show_bug.cgi?id=31213
add generation /etc/pki/java/cacerts
https://bugzilla.altlinux.org/show_bug.cgi?id=25027
GO не находит корневой сертификат
https://bugzilla.altlinux.org/show_bug.cgi?id=29449
В самом Qt, например, вшито в код
systemCerts.append(QSslCertificate::fromPath(QLatin1String("/etc/pki/tls/certs/ca-bundle.crt")
Пакет openssl делает ссылку /var/lib/ssl/cert.pem на
/usr/share/ca-certificates/ca-bundle.crt
Как я понимаю, потом открывает его, исходя из определения в
openssl/crypto/cryptlib.h
# define X509_CERT_FILE OPENSSLDIR "/cert.pem"
Вопросы:
1. Существуют ли механизмы, упрощающие совмещение нескольких наборов
сертификатов
(чтобы совместить наборы, идущие в ca-certificates и в
ca-gost-certificates), или предложения, как красиво решить этот вопрос.
2. Существуют ли механизмы, подразумевающие локальное хранение и
обновление промежуточных сертификатов?
И отдельно риторический вопрос: почему поддержка GOST не включена у нас
в openssl из коробки? И хотя бы нет готовой ручки в control. Без этого
массового использования не получится.
--
С уважением,
Виталий Липатов,
Etersoft
Подробная информация о списке рассылки Devel