Главная >> Инструкции >> Установка сертификатов в Ubuntu

Установка сертификатов в Ubuntu

Сертификаты SSL используются для обеспечения безопасности в различных сферах. Самая распространенная - это просмотр веб-сайтов по протоколу HTTPS. Существует небольшое количество доверенных корневых сертификатов организаций, которые подписывают остальные сертификаты для всех сайтов. Эти доверенные сертификаты хранятся на каждом компьютере или смартфоне. И именно исходя из этого веб-браузер может понимать, что тому или иному сайту можно доверять.

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


Содержание статьи

Что нам понадобится?

Я хочу показать на примере как сделать сертификат доверенным в Ubuntu. Для этого можно создать свой центр сертификации CA с помощью EasyRSA, создать и подписать SSL сертификат, как это описано в статье про создание сертификатов OpenSSL. Далее использовать этот сертификат для домена localhost в Apache. Таким образом у вас получится три файла:

  • ca.crt - корневой сертификат центра сертификации;
  • localhost.crt - сертификат сайта подписанный центром сертификации;
  • localhost.key - ключ сертификата сайта.

Активируйте файл виртуального хоста Apache для сайта по умолчанию с помощью такой команды:

sudo a2ensite default-ssl

Далее откройте этот файл и найдите такие строки:

SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key

Для параметра SSLCertificateFile надо передать путь к сертификату сайта, например, localhost.crt, а для SSLCertificateKeyFile - ключу сертификата сайта. Например, localhost.key. Если сертификаты находятся в папке /etc/apache/ssl, то конфигуация будет выглядеть вот так:

SSLCertificateFile /etc/apache/ssl/localhost.crt
SSLCertificateKeyFile /etc/apache/ssl/localhost.key

После этого нужно перезапустить 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, а также как добавить их в самые популярные браузеры. Как видите, универсального решения, не существует, но всё можно настроить.

Creative Commons License
Статья распространяется под лицензией Creative Commons ShareAlike 4.0 при копировании материала ссылка на источник обязательна .

4 комментария к “Установка сертификатов в Ubuntu”

  1. > И так, у вас есть сертификат ca.crt

    Откуда? У меня есть только адрес https, как мне оттуда принять самоподписанный сертификат?

    Ответить

Оставьте комментарий