[devel] Взгляд на сертификаты в /usr/share/ca-certificates/ca-bundle.crt и сертификаты УЦ РФ

Vitaly Lipatov lav на altlinux.ru
Ср Авг 2 19:24:09 MSK 2017


Alexey Gladkov писал 2.8.17 18:29:
> On Wed, Aug 02, 2017 at 05:34:57PM +0300, Vitaly Lipatov wrote:
>> Alexey Gladkov писал 2.8.17 2:48:
>> > On Wed, Aug 02, 2017 at 01:57:04AM +0300, Vitaly Lipatov wrote:
>> >> Это вы разработчикам Go, Qt и прочим, которые не осилили?
>> >> Я подозреваю, что ничего нет в документации.
>> >
>> > Что-то я не очень понял в чём проблема в golang ?
>> 
>> Я приводил багу об этом в первом письме:
>> GO не находит корневой сертификат
>> https://bugzilla.altlinux.org/show_bug.cgi?id=29449
> 
> Эта бага закрыта 4 года назад. Список приведённый в этой баге 
> показывает,
> что нет стандартного места, где должны быть расположены сертификаты. 
> Это
> не проблема языка.
Это не проблема языка. Возможно, проблема отсутствия стандартизации или 
механизма, позволяющего получить доступ к набору сертификатов. Допустим, 
проблема отсутствия crypto api на платформе.

> 
>> Проблема в том, что разработчикам по явно архитектурной недоработке
>> приходится в каждой программе / библиотеке самостоятельно отслеживать
>> расположение файла с сертификатами,который к тому же скачет в
>> зависимости от дистрибутива.
> 
> Я всё ещё не понимаю о какой недоработке ты говоришь.
> 
> Что мы держим ca-bundle.crt не там, где большинство дистрибутивов ?
Нет, нет, только о том, что для Linux-платформ что-то не додумали на 
тему доступного для различных потребителей хранилища сертификатов.

Вот Владимир спрашивал
> А X509_get_default_cert_*() не решают эту проблему?

Это то самое, о чём я спрашиваю? Надо будет проверить.

Вот как вопрос с получением пути решён в библиотеке python requests

# cat /usr/lib/python2.7/site-packages/requests/certs.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""
requests.certs
~~~~~~~~~~~~~~

This module returns the preferred default CA certificate bundle.

If you are packaging Requests, e.g., for a Linux distribution or a 
managed
environment, you can change the definition of where() to return a 
separately
packaged CA bundle.

We return "/etc/pki/tls/certs/ca-bundle.crt" provided by the 
ca-certificates
package.
"""

try:
     from certifi import where
except ImportError:
     def where():
         """ Don't use the certs bundled with requests, use 
ca-certificates. """
         return "/etc/pki/tls/certs/ca-bundle.crt"


И они уже три года обсуждают, что же тут можно сделать
https://github.com/requests/requests/pull/1907


Как я вижу решение.
X509_get_default_cert_dir() внезапно начинает возвращать каталог, где 
могут лежать (корневые) сертификаты, используемые openssl и её 
пользователями.
Возвращаемый ею путь правильно используется в программах, и все штучки 
типа прибивания гвоздями путей забываем, как страшный сон.
Понятно, что такая функция не может находиться (только) в openssl, 
потому что не все её используют (к счастью или нет).



-- 
С уважением,
Виталий Липатов,
Etersoft


Подробная информация о списке рассылки Devel