Сертификаты SSL используются для обеспечения безопасности в различных сферах. Самая распространенная - это просмотр веб-сайтов по протоколу HTTPS. Существует небольшое количество доверенных корневых сертификатов организаций, которые подписывают остальные сертификаты для всех сайтов. Эти доверенные сертификаты хранятся на каждом компьютере или смартфоне. И именно исходя из этого веб-браузер может понимать, что тому или иному сайту можно доверять.
Но если вы попытаетесь создать свой корневой сертификат и подписать им сертификат для своего сайта, то увидите в браузере сообщение о том, что подключение не безопасно потому что используется сертификат, которого нет в списке доверенных. Аналогично будут работать и другие программы. Но вы можете добавить свой сертификат в список доверенных в своей системе. В этой статье мы рассмотрим как установить сертификат в Ubuntu.
Содержание статьи
Что нам понадобится?
Я хочу показать на примере как сделать сертификат доверенным в Ubuntu. Для этого можно создать свой центр сертификации CA с помощью EasyRSA, создать и подписать SSL сертификат, как это описано в статье про создание сертификатов OpenSSL. Далее использовать этот сертификат для домена localhost в Apache. Таким образом у вас получится три файла:
- ca.crt - корневой сертификат центра сертификации;
- localhost.crt - сертификат сайта подписанный центром сертификации;
- localhost.key - ключ сертификата сайта.
Активируйте файл виртуального хоста Apache для сайта по умолчанию с помощью такой команды:
sudo a2ensite default-ssl
Далее откройте этот файл и найдите такие строки:
Для параметра SSLCertificateFile надо передать путь к сертификату сайта, например, localhost.crt, а для SSLCertificateKeyFile - ключу сертификата сайта. Например, localhost.key. Если сертификаты находятся в папке /etc/apache/ssl, то конфигуация будет выглядеть вот так:
После этого нужно перезапустить Apache:
sudo systemctl restart apache2
Теперь у вас всё готово для того чтобы выполнить всё описанное ниже в своей системе.
Установка сертификатов в Ubuntu
1. Установка в системе
Если вы попытаетесь использовать подписанные вами сертификаты для включения поддержки HTTPS на веб-сервере, а потом откроете такой веб-сайт с помощью браузера или сделаете к нему запрос в командной строке, то получите ошибку SSL, в которой будет сказано, что этот сертификат не является доверенным и подключение к этому сайту может быть не безопасно.
curl -I https://localhost
Для того чтобы сертификат считался доверенным в системе нужно добавить корневой сертификат центра сертификации, с помощью которого он был подписан в список доверенных. Если это самоподписанный сертификат, то в список доверенных можно добавлять его самого.
И так, у вас есть сертификат ca.crt. Для того чтобы система считала его доверенным, нужно скопировать его в папку /usr/local/share/ca-certificates:
cp ./ca.crt /usr/local/share/ca-certificates/losstca.crt
После этого необходимо выполнить такую команду:
sudo update-ca-certificates
После этого можно проверить что система воспринимает сертификат как доверенный выполнив команду curl:
Но этот способ будет работать только для тех программ, которые используют системное хранилище доверенных сертификатов. Веб-браузеры, такие как Firefox и Google Chrome имеют собственные хранилища сертификатов и не используют хранилище системы, поэтому в каждом браузере нужно импортировать сертификаты отдельно. Иначе вы будете получать такую ошибку:
Chrome, Firefox, Thunderbird используют nssdb для работы с сертификатами. Это значит что вы можете импортировать сертификаты как в графическом интерфейсе браузера, так и в терминале, с помощью утилиты certutil. Давайте рассмотрим как это сделать. Давайте рассмотрим как выполняется установка сертификата в Ubuntu.
2. Установка в Google Chrome
Для того чтобы добавить сертификат в Google Chrome или Chromium в графическом интерфейсе откройте настройки из главного меню:
Перейдите в Конфиденциальность и безопасность -> Безопасность -> Настроить сертификаты:
В открывшемся окне перейдите на вкладку Центры сертификации:
Здесь необходимо нажать кнопку Импорт и выбрать файл корневого сертификата:
Далее надо настроить параметры доверия. Поскольку сейчас сертификат будет использоваться для подтверждения подлинности сайтов, то можно оставить только первый пункт:
После этого сертификат будет добавлен и вы больше не будете видеть информацию о том, что подключение не безопасное.
В командной строке всё тоже довольно просто. Для работы с сертификатами вам понадобится пакет libnss3-tools, установите его с помощью команды:
sudo apt install libnss3-tools
База данных сертификатов Google Chrome находится в папке ~/.pki/nssdb. Вы можете посмотреть доступные сертификаты командой:
certutil -d ~/.pki/nssdb -L
Синтаксис команды для добавления сертификата следующий:
$ certutil -d путь/к/базе/данных -A -t "настройки_доверия" -n "имя" -i "/путь/к/файлу"
Обратите внимание на настройки доверия. Существует три группы атрибутов доверия:
- Для SSL;
- Для Email;
- Для программного обеспечения и других объектов.
Каждая из групп может содержать такие атрибуты:
- p - валидный пир;
- P - доверенный пир;
- c - валидный центр сертификации;
- C - доверенный центр сертификации;
- T - доверенный центр сертификации для авторизации клиентов.
Для SSL сертификатов можно достаточно такой последовательности "TC,,". То есть атрибуты T и C для SSL и ничего для всего остального. Вся команда для импорта ca.crt будет выглядеть вот так:
certutil -d sql:~/.pki/nssdb -A -t "TC,," -n "Losst CA" -i ./ca.crt
После этого вы снова можете посмотреть список сертификатов для того чтобы убедится что всё хорошо:
certutil -d sql:~/.pki/nssdb -L
Сертификат есть и после этого браузер будет считать его доверенным. Сертификаты добавленные в графическом интерфейсе тоже добавляются сюда. Теперь вы знаете как выполняется установка корневых сертификатов Ubuntu.
3. Установка в Firefox
В Firefox всё немного сложнее. Тут нет централизованного хранилища сертификатов, а поэтому их придется добавлять для каждого профиля отдельно, что в графическом интерфейсе, что в командной строке. Для того чтобы добавить сертификат в графическом интерфейсе откройте Настройки в главном меню:
Далее перейдите в раздел Защита и безопасность и найдите там пункт Сертификаты. Здесь надо нажать кнопку Посмотреть сертификаты:
В открывшемся окне перейдите на вкладку Центры сертификации и нажмите кнопку Импортировать, для того чтобы добавить свой сертификат. Далее выберите файл сертификата и установить настройки доверия. Нужно отметить как минимум первую галочку - Доверять при идентификации веб-сайтов:
На этом установка SSL сертификата в Firefox завершена. Если вы хотите добавить сертификат в командной строке, то необходимо добавить его во все профили. Профили находятся в папке ~/.mozilla/firefox/. В данном примере, есть два профиля и только один из них заполнен:
Файлы nssdb находятся прямо в папке профиля, поэтому можно просто передать эту папку в certutil. Например, для просмотра списка сертификатов выполните:
certutil -d ~/.mozilla/firefox/k9z8sttc.default-release/ -L
Для добавления сертификата используйте такую команду подставив свой путь к папке профиля:
certutil -d ~/.mozilla/firefox/k9z8sttc.default-release/ -A -t "TC,," -n "Losst" -i ./ca.crt
После этого полученный сертификат появится в списке.
Обратите внимание, что такой способ работает для Firefox, установленного как .deb пакет. Если у вас Firefox, установленный с помощью пакетного менеджера snap, то этот метод может не работать.
Для Firefox есть ещё один способ добавить сертификаты из системы автоматически без использования certutil. Это загрузка сертификатов с помощью политики. Возможно вы слышали про опцию security.enterprise_roots.enabled в about:config. Она работает только в Windows и MacOS но не в Linux. Однако, можно создать файл политики папке /usr/lib/firefox/distribution/ и там прописать какие сертификаты следует загрузить. По умолчанию Firefox будет искать сертификаты таких каталогах:
- /usr/lib/mozilla/certificates
- /usr/lib64/mozilla/certificates
- ~/.mozilla/certificates
В самом файле надо указать имена файлов сертификатов если они находятся в одной из этих папок или полный путь к ним. Например, скопируйте сертификат CA в папку /usr/lib/mozilla/certificates:
cp ~/easy-rsa-ca/ca.crt /usr/lib/mozilla/certificates/losst.crt
Поддерживаются как ASCII сертификаты (CRT/PEM), так и двоичные (DER). Затем создайте файл политики со следующем содержимым:
sudo vi /usr/lib/firefox/distribution/policies.json
{
"policies": {
"ImportEnterpriseRoots": true,
"Certificates": {
"Install": [
"losst.crt",
]
}
}
}
Перезапустите браузер и после этого Firefox должен начать видеть ваш сертификат.
Выводы
В этой статье мы рассмотрели как установить сертификаты в Ubuntu, а также как добавить их в самые популярные браузеры. Как видите, универсального решения, не существует, но всё можно настроить.
a2ensite что делает эта команда?
Есть ли аналог в nginx?
> И так, у вас есть сертификат ca.crt
Откуда? У меня есть только адрес https, как мне оттуда принять самоподписанный сертификат?
openssl s_client -showcerts -connect http://www.example.com:443