- Вопрос или проблема
- Неинтерактивный подход
- Fedora
- Alpine
- Больше
- Ответ или решение
- Шаг 1: Установка необходимого пакета
- Шаг 2: Копирование сертификата
- Шаг 3: Обновление доверенного списка сертификатов
- Альтернатива с активацией сертификата
- Шаг 4: Настройка браузеров
- Шаг 5: Проверка работоспособности
- Дополнительная информация для решения проблем
- Заключение
Вопрос или проблема
Я сгенерировал самоподписанный сертификат для моего сервера сборки, и я хотел бы установить доверие к этому сертификату на моем компьютере, так как я сам создал ключ и устал видеть предупреждения.
Я использую 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, может понадобиться отдельная процедура настройки:
-
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
-
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 — это важный процесс, особенно если вы работаете в условиях разработки или тестирования. Следуя данным шагам, вы можете легко устранить предупреждения о ненадежности соединения. Не забывайте о необходимости периодического обновления и контроля сертификатов для обеспечения безопасности.