[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