Добавление самостоятельного сертификата в “доверенный список”

Вопрос или проблема

Я сгенерировал самоподписанный сертификат для моего сервера сборки, и я хотел бы установить доверие к этому сертификату на моем компьютере, так как я сам создал ключ и устал видеть предупреждения.

Я использую Ubuntu 12.04. Как я могу сделать так, чтобы сертификат был доверен глобально, чтобы браузеры (Google Chrome), утилиты командной строки (wget, curl) и языки программирования (Python, Java и т. д.) доверяли соединению с https://example.com без дополнительных вопросов?

Простого ответа на это нет, так как каждое приложение будет обрабатывать это по-разному.

Кроме того, OpenSSL и GNUTLS (самые распространенные библиотеки обработки сертификатов, используемые для работы с подписанными сертификатами) ведут себя по-разному в отношении сертификатов, что также усложняет ситуацию. Кроме этого, операционные системы используют разные механизмы для работы с «корневыми ЦА», используемыми большинством веб-сайтов.

Тем не менее, возьмем Debian в качестве примера. Установите пакет ca-certificates:

apt-get install ca-certificates

Затем скопируйте публичную часть вашего недоверенного сертификата ЦА (тот, который вы используете для подписи вашего CSR) в директорию сертификатов ЦА (под root):

cp cacert.crt /usr/share/ca-certificates

ПРИМЕЧАНИЕ: Сертификат должен иметь расширение .crt, чтобы его нашли.

Чтобы перегенерировать директорию с вашим сертификатом, запустите от имени root:

dpkg-reconfigure ca-certificates

И выберите опцию ask, прокрутите до вашего сертификата, отметьте его для включения и выберите ok.

Большинство браузеров используют свою собственную базу данных ЦА, поэтому для изменения их содержимого необходимо использовать инструменты, такие как certutil (в Debian это предоставляется пакетом libnss3-tools). Например, для Chrome вы можете запустить что-то вроде:

certutil -d sql:$HOME/.pki/nssdb -A -t "C,," -n "My Homemade CA" -i /path/to/CA/cert.file

Firefox позволит вам просмотреть сертификат на диске, распознать его как файл сертификата и затем разрешить вам импортировать его в список корневых ЦА.

Большинство других команд, таких как curl, принимают параметры командной строки, которые вы можете использовать для указания на вашу ЦА,

 curl --cacert  /path/to/CA/cert.file https://...

или полностью отключить валидацию SSL

 curl --insecure https://...

Остальные приложения потребуют индивидуального исследования, если трюк с ca-certificates не сработает для этого конкретного приложения.

Неинтерактивный подход

Для использования в неинтерактивном контексте (например, в рецепте chef) вы можете использовать следующую последовательность.

sudo cp my.crt /usr/local/share/ca-certificates/
sudo update-ca-certificates
  • Тестировалось и работает на debian 5/6 и Ubuntu 14.04.
  • Для получения дополнительной информации смотрите man update-ca-certificates

Этот метод предпочтительнее метода @Drav, так как /usr/share/ обычно резервируется для файлов, добавляемых ОС / apt-get.

Fedora

На Fedora 23 добавьте файл .pem или .der в /etc/pki/ca-trust/source/anchors/ и выполните sudo update-ca-trust extract.

Смотрите man update-ca-trust для получения подробностей, например, использовать /etc или /usr.

Alpine

Добавьте .pem в /usr/local/share/ca-certificates/ и выполните update-ca-certificates.

Исходные файлы для этого инструмента Alpine находятся по адресу https://github.com/alpinelinux/ca-certificates/blob/898ab81b51730dcd175069956d6e792385c9f457/update-ca.c#L18

Больше

Даже между дистрибутивами Linux расположение пакета и механизмы добавления в него сильно различаются.

В качестве примера, приложение Golang в Linux по умолчанию будет смотреть в следующих местах:

var certFiles = []string{
  "/etc/ssl/certs/ca-certificates.crt",                // Debian/Ubuntu/Gentoo и др.
  "/etc/pki/tls/certs/ca-bundle.crt",                  // Fedora/RHEL 6
  "/etc/ssl/ca-bundle.pem",                            // OpenSUSE
  "/etc/pki/tls/cacert.pem",                           // OpenELEC
  "/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem", // CentOS/RHEL 7
  "/etc/ssl/cert.pem",                                 // Alpine Linux
}

(цитируется с https://github.com/cert-manager/trust-manager/blob/main/design/20220722-publicbundle.md)

Хороший источник информации по этому вопросу — это Kubernetes cert-manager (https://cert-manager.io/).

В CentOS:

cp *.pem /etc/pki/ca-trust/source/anchors/
update-ca-trust extract

Неинтерактивный подход (Окт’18)
для современных систем на базе Debian

Есть различие между добавлением сертификата в хранилище хоста и активацией его, чтобы приложения действительно его использовали. Существующий сертификат в хранилище не обязательно используется (хотя я должен признать, что все равно много пакетов делают это неправильно)
Это может сбивать с толку, когда вы настраиваете пакет, который рассматривает /etc/ca-certificate.conf и просто отказывается использовать ваш сертификат, хотя он был добавлен без ошибок.
Вам нужно явно сказать update-ca-certificates, чтобы он (не просто скопировал, а) активировал сертификат, добавив его в /etc/ca-certificate.conf или /etc/ca-certificate/update.d.

CERT=mycert.crt
cp /mypath/to/$CERT /usr/share/ca-certificates/$CERT
    # обратите внимание на знак +, который указывает активировать сертификат!!!
echo "+$CERT" >/etc/ca-certificates/update.d/activate_my_cert
dpkg-reconfigure ca-certificates;

Теперь здесь становится запутанно, так как существует способ неявно доверять сертификату, используя другой путь:

CERT=mycert.crt
cp /mypath/to/$CERT /usr/local/share/ca-certificates/$CERT
update-ca-certificates;

sudo cp my.crt /usr/local/share/ca-certificates/
sudo update-ca-certificates

Эти 2 строки выше не сработали с первого раза.

После расследования выяснилось, что многие сертификаты исключены в /etc/ca-certificates.conf из-за того, что строки начинаются с !

Поэтому мне нужно было удалить 1-й символ во всех строках, которые начинаются с !

sudo sed -i '/^!/s/^.//g' /etc/ca-certificates.conf
sudo update-ca-certificates

Теперь curl работает без необходимости использовать опцию --cacert !!

Ответ или решение

Доверие к самоподписанным сертификатам в Ubuntu 12.04: шаг за шагом

Если вы создали самоподписанный сертификат для вашего сборочного сервера и хотите, чтобы он был глобально доверен на вашей машине, вам потребуется выполнить несколько шагов. Это позволит избежать постоянных предупреждений о ненадежности соединений при работе с браузерами (такими как Google Chrome), утилитами командной строки (wget, curl), а также в языках программирования (Python, Java и т.д.). Ниже мы рассмотрим процесс добавления самоподписанного сертификата в доверенный список в Ubuntu 12.04.

Шаг 1: Установка необходимого пакета

Проверьте, установлен ли у вас пакет ca-certificates, который управляет сертификатами корневых центров сертификации:

sudo apt-get install ca-certificates

Шаг 2: Копирование сертификата

Скопируйте публичную часть вашего сертификата в каталог сертификатов. Это можно сделать при помощи следующей команды:

sudo cp /path/to/your/cacert.crt /usr/local/share/ca-certificates/

Убедитесь, что название файла сертификата оканчивается на .crt, так как это требование для его корректного распознавания.

Шаг 3: Обновление доверенного списка сертификатов

Для того чтобы активировать ваш сертификат в системе, выполните команду обновления списка сертификатов:

sudo update-ca-certificates

Это добавит ваш сертификат в систему, и теперь многие утилиты и библиотеки смогут его обнаружить.

Альтернатива с активацией сертификата

Если прошлая команда не привела к желаемым результатам, вам может потребоваться активировать сертификат более явно. Создайте файл, в котором будет указано, чтобы сертификат был активирован:

echo "+cacert.crt" | sudo tee /etc/ca-certificates/update.d/activate_my_cert

После этого снова выполните команду обновления:

sudo dpkg-reconfigure ca-certificates

Шаг 4: Настройка браузеров

Для браузеров, таких как Google Chrome и Firefox, может понадобиться отдельная процедура настройки:

  1. Google Chrome:

    Google Chrome на Ubuntu использует NSS для хранения сертификатов. Для добавления сертификата используйте команду:

    certutil -d sql:$HOME/.pki/nssdb -A -t "C,," -n "My Homemade CA" -i /path/to/your/cacert.crt
  2. Firefox:

    Запустите Firefox, перейдите в настройки сертификатов (обычно через "Preferences" -> "Privacy & Security" -> "Certificates"), и там вы можете импортировать ваш .crt файл, выбрав "View Certificates".

Шаг 5: Проверка работоспособности

Проверьте, работает ли ваш сертификат, используя утилиты командной строки, например, с помощью curl:

curl https://example.com

Если он не требует дополнительных параметров, то сертификат успешно добавлен в доверенный список.

Дополнительная информация для решения проблем

Обратите внимание, что иногда может потребоваться редактирование файла /etc/ca-certificates.conf, где могут содержаться отключения для определенных сертификатов (строки, начинающиеся с !). Вы можете удалить этот символ, чтобы активировать сертификаты. Это влияет на все последующие обновления сертификатов.

sudo sed -i '/^!/s/^.//g' /etc/ca-certificates.conf
sudo update-ca-certificates

После выполнения всех указанных шагов ваш самоподписанный сертификат будет доверенным для всех нужных вам приложений и инструментов на Ubuntu 12.04 без вмешательства со стороны пользователя.

Заключение

Настройка самоподписанных сертификатов в Ubuntu — это важный процесс, особенно если вы работаете в условиях разработки или тестирования. Следуя данным шагам, вы можете легко устранить предупреждения о ненадежности соединения. Не забывайте о необходимости периодического обновления и контроля сертификатов для обеспечения безопасности.

Оцените материал
Добавить комментарий

Капча загружается...