Добавляем корневой доверенный сертификат в Linux

28.09.2022

itpro

CentOS, Linux, Ubuntu

комментариев 5
В этой статье мы покажем, как добавить (установить) новый сертификат в список доверенных корневых сертификатов в Linux.
Например, вы используете на своем сайте самоподписанный SSL/TLS сертификат и не хотите, чтобы на клиентах при открытии сайта появлялась ошибка SEC_ERROR_UNKNOWN_ISSUER.

В данном примере мы установим в Linux корневой сертификат Минцифры (Russian Trusted Sub CA), на базе которого сейчас выпускаются сертификаты для сайтов многих компаний и гос-органов РФ.
Или это может быть самоподписанный сертификат с сайта IIS на Windows.
Чтобы проверить, что ваш хост Linux не может проверить (и соответственно не доверяет) SSL сертификату на определенном сайте, выполните команду:
$ curl –I https://www.sberbank.ru
curl: (60) SSL certificate problem: unable to get local issuer certificate. More details here: https://curl.haxx.se/docs/sslcerts.html curl failed to verify the legitimacy of the server and therefore could not establish a secure connection to it. To learn more about this situation and how to fix it, please visit the web page mentioned above.

В данном случае нам нужно добавить корневой центр сертификации этого сайта в список доверенных корневых сертификатов Linux.
Установка корневого сертификата в Linux
Для обновления хранилища доверенных сертификатов в Linux вам нужен файл сертификата в формате PEM с расширением файла .crt. PEM сертификат представляет собой текстовый файл в формате base64, который содержит в начале файла строку —-BEGIN CERTIFICATE—- и в конце ——END CERTIFICATE——.

Если ваш файл сертификата в формате DER, вы можете конвертировать его в PEM формат с помощью утилиты openssl:
$ openssl x509 -in my_trusted_sub_ca.der -inform der -out my_trusted_sub_ca.cer
Сначала рассмотрим, как добавит корневой сертификат вашего CA в доверенные в дистрибутивах Linux на базе DEB (Ubuntu, Debian, Mint, Kali Linux).
Скопируйте файлы ваших сертификаты в хранилище сертификатов в каталог usr/local/share/ca-certificates/:
$ sudo cp my_trusted_sub_ca.crt /usr/local/share/ca-certificates/
$ sudo cp my_trusted_root_ca.crt /usr/local/share/ca-certificates/
Обновите хранилище сертификатов командой:
$ sudo update-ca-certificates -v
Если команда не найдена, установите пакет в Ubuntu:
$ sudo apt-get install -y ca-certificates

Если сертификаты успешно добавлены, появится сообщение о том, что сертфикат скопирован в /etc/ssl/certs/:
Updating certificates in /etc/ssl/certs… 2 added, 9 removed; done. Running hooks in /etc/ca-certificates/update.d
Также вы можете добавить новые сертификаты в хранилище с помощью команды:
$ sudo dpkg-reconfigure ca-certificates
Выберите из списка сертификаты, которые нужно добавить в доверенные.

В Linux список доверенных сертификатов содержится в файле /etc/ssl/certs/ca-certificates.crt. Обе рассмотренные выше команды обновят этот файл и добавят в информацию о новых сертификатах.
Вы можете проверить, что ваши сертификаты были добавлены в доверенные с помощью команды:
Укажите часть Common Name вашего сертификата вместо YourCASubj для поиска в хранилище по subject.

Вы можете убедиться, что ваша ОС доверяет сертификату с помощью команду:
$ openssl verify my_trusted_sub_ca.crt

Если Linux не доверяет сертификату, появится ошибка:
error 20 at 0 depth lookup: unable to get local issuer certificate error my_trusted_sub_ca.crt: verification failed
Теперь проверьте, что на сайте используется доверенный SSL сертификат с помощью curl:
$ curl –I https://www.sberbank.ru
Все ок, сертификат доверенные < HTTPOnly: secure >.

Можно также вручную добавить путь к сертификату:
$ sudo mkdir /usr/share/ca-certificates/extra
$ sudo cp my.crt /usr/share/ca-certificates/extra/mycert1.crt
$ sudo vim /etc/ca-certificates.conf
exta/mycert1.crt
Чтобы удалить сертификат, удалите ваш crt файл:
$ sudo rm /usr/local/share/ca-certificates/yourcert.crt
И обновите хранилище:
$ sudo update-ca-certificates —fresh
В дистрибутивах Linux на базе RPM (CentOS, Oracle, RHEL, Rocky Linux, Fedora) для добавления сертификата в доверенные:
- Установите пакет ca-certificates: # yum install ca-certificates
- Скопируйте файл сертификата в каталог /etc/pki/ca-trust/source/anchors/: # cp mycert.crt /etc/pki/ca-trust/source/anchors/
- Обновите хранилище:
# update-ca-trust force-enable
# update-ca-trust extract
Аналогичная статья по управлению хранилищем корневых доверенных сертификатов в Windows.
Добавить корневой доверенный сертификат для браузеров Mozilla, Chrome
Теперь все системные утилиты будут доверять сайтам, использующим данный CA. Но это не повлияет на веб браузеры Mozilla Firefox или Google Chrome. Они по-прежнему будут показывать предупреждение о недоверенном сертификате.
Дело в том, что браузеры Firefox, Chromium, Google Chrome, Vivaldi и даже почтовый клиент Mozilla Thunderbird не используют системное хранилище сертификатов Linux. Хранилище сертификатов для этих программ находится в директории пользователя в файле cert8.db (для Mozilla) или cert9.db (для Chromium и Chrome). Для обновления этих хранилищ сертификатов используется утилита certutil из пакета libnss3-tools.
$ sudo apt install libnss3-tools

Теперь выполните следующие скрипты для добавления ваших сертификатов в хранилище через NSS:
#!/bin/bash
certfile=»my_rusted_root_ca.crt»
certname=»My Root CA1″
for certDB in $(find ~/ -name «cert8.db»)
do
certdir=$(dirname $);
certutil -A -n «$» -t «TCu,Cu,Tu» -i $ -d dbm:$
done
for certDB in $(find ~/ -name «cert9.db»)
do
certdir=$(dirname $);
certutil -A -n «$» -t «TCu,Cu,Tu» -i $ -d sql:$
done
После запуска скрипта, сайтам с данным CA будут доверять все браузеры.
Предыдущая статья Следующая статья
Установка сертификатов на Linux
Воспользуйтесь любым из способов установки: при помощи графического интерфейса Установите сертификат в зависимости от формата вашего ключа:
Установка .pfx (экспортированный ключ с закрытой частью)
- Откройте «Инструменты КриптоПро»;
- Выберите вкладку «Сертификаты»;
- Нажмите «Импортировать ключи». По умолчанию при импорте ключ копируется на ваш компьютер. Если требуется использовать сертификат на съёмном носителе, его нужно предварительно скопировать на носитель и после установить;

- Выберите сертификат в месте хранения;
- Нажмите «Открыть»;

- Введите пароль от сертификата, заданный при выгрузке;
- Нажмите «ОК»;
- В новом окне можно задать пароль на сертификат. Если пароль не нужен, оставьте поля пустыми;
- Нажмите «ОК».

- Проверить наличие сертификата можно в «КриптоПро»:
- Откройте «Инструменты КриптоПро»;
- Выберите вкладку «Сертификаты»;
- Выберите хранилище «Личное» из выпадающего меню.
Установка .cer (только открытая часть)
- Откройте «Инструменты КриптоПро»;
- Выберите вкладку «Сертификаты»;
- Нажмите «Показать расширенные»;
- Отметьте галкой «Отключить автовыбор хранилища (использовать текущее)». Если галку не ставить, «КриптоПро» автоматически определит хранилище для сертификатов. Личные сертификаты попадут в хранилище «Другие пользователи»;

- Выберите необходимое хранилище сертификатов из выпадающего меню;
- Нажмите «Установить сертификаты»;

- Выберите личный сертификат в месте хранения;
- Нажмите «Открыть»;

- После закрытия окна на вкладке отобразится строка с установленным сертификатом.
- Проверить наличие сертификата можно в «КриптоПро»:
- Откройте «Инструменты КриптоПро»;
- Выберите вкладку «Сертификаты»;
- Выберите хранилище «Личное» из выпадающего меню.

Установка из .key (скопированные с носителя 6 файлов ключа)
- Скопируйте папку с файлами в папку локального хранения контейнеров «КриптоПро», по умолчанию «/var/opt/cprocsp/keys/имя_пользователя»;

- После переноса ключи автоматически отобразятся на вкладке «Контейнеры» в «Инструментах КриптоПро»;
- Выберите нужный сертификат на вкладке «Контейнеры»;
- Нажмите «Установить сертификат». Появится сообщение: «Сертификат был успешно установлен»;

- Проверить наличие сертификата можно в «КриптоПро»:
- Откройте «Инструменты КриптоПро»;
- Выберите вкладку «Сертификаты»;
- Выберите хранилище «Личное» из выпадающего меню.

Установка сертификата с токена\флэш-накопителя
- Подключите накопитель или токен к вашему ПК;
- В «Инструментах КриптоПро» перейдите на вкладку «Контейнеры»;
- Выберите нужный контейнер на носителе;
- Нажмите «Установить сертификат»;

- Проверить наличие сертификата можно в «КриптоПро»:
- Откройте «Инструменты КриптоПро»;
- Выберите вкладку «Сертификаты»;
- Выберите хранилище «Личное» из выпадающего меню.

при помощи терминала Установите сертификат в зависимости от формата вашего ключа:
Установка .pfx (экспортированный ключ с закрытой частью) Выполните команду: /opt/cprocsp/bin/amd64/certmgr -install -pfx -file ‘путь к папке/my.pfx’ -pin ‘pin от токена/сертификата’ Пример: /opt/cprocsp/bin/amd64/certmgr -install -pfx -file «/tmp/src/cert.pfx» -pin 321 После выполнения команды установленный сертификат можно проверить:
- в списке сертификатов при помощи команды: /opt/cprocsp/bin/amd64/certmgr -list ;
- на вкладке «Сертификаты» в «Инструментах КриптоПро»:
- Откройте «Инструменты КриптоПро»;
- Выберите вкладку «Сертификаты»;
- Выберите хранилище «Личное» из выпадающего меню.

Установка .cer (только открытая часть) Выполните команду: /opt/cprocsp/bin/amd64/certmgr -inst -file ‘ путь к файлу *.cer’ -cont ‘текстовое название сертификата’ -silent Пример: /opt/cprocsp/bin/amd64/certmgr -inst -file «/tmp/src/pushkin.cer» -cont «pushkin» –silent После выполнения команды установленный сертификат можно проверить:
- в списке сертификатов при помощи команды: /opt/cprocsp/bin/amd64/certmgr -list ;
- на вкладке «Сертификаты» в «Инструментах КриптоПро».
- Откройте «Инструменты КриптоПро»;
- Выберите вкладку «Сертификаты»;
- Выберите хранилище «Личное» из выпадающего меню.

Установка из .key (скопированные с носителя 6 файлов ключа)
- Переместите папку с файлами сертификата по пути: /var/opt/cprocsp/keys/имя_пользователя
- Установите ключ, используя команду установки всех доступных сертификатов на носителях: /opt/cprocsp/bin/amd64/csptest -absorb -certs –autoprov
После выполнения команды установленный сертификат можно проверить:
- в списке сертификатов при помощи команды: /opt/cprocsp/bin/amd64/certmgr -list ;
- на вкладке «Сертификаты» в «Инструментах КриптоПро»:
- Откройте «Инструменты КриптоПро»;
- Выберите вкладку «Сертификаты»;
- Выберите хранилище «Личное» из выпадающего меню.

Установка сертификата с токена\флэш-накопителя Выполните команду: /opt/cprocsp/bin/amd64/certmgr -inst -cont » -store uMy После выполнения команды установленный сертификат можно проверить:
- в списке сертификатов при помощи команды: /opt/cprocsp/bin/amd64/certmgr -list ;
- на вкладке «Сертификаты» в «Инструментах КриптоПро»:
- Откройте «Инструменты КриптоПро»;
- Выберите вкладку «Сертификаты»;
- Выберите хранилище «Личное» из выпадающего меню.

Установка открытой части в контейнер закрытого ключа

Выполните команду: /opt/cprocsp/bin/amd64/certmgr -inst -inst_to_cont -ask-container -pin «пин-код токена» -file “путь к файлу сертификата” Пример: /opt/cprocsp/bin/amd64/certmgr -inst -inst_to_cont -ask-container -pin «12567» -file /path/to/certificate.cer После ввода команды проверить контейнер можно:
- утилитой csptest. Она находится в директории /opt/cprocsp/bin/. Выполните команду для проверки контейнера:
- пользователя: csptest -keyset -check -cont ‘\\.\имя считывателя\имя контейнера’
- компьютера: csptest -keyset -check -cont ‘\\.\имя считывателя\имя контейнера’ -machinekeyset
- через «КриптоПро»:
- через «КриптоПро»:
- Выберите «Показать расширенные»;
- Нажмите «Контейнеры». Все контейнеры отобразятся в списке автоматически. Чтобы найти конкретный контейнер, введите его имя в строке поиска.
Установка корневого сертификата удостоверяющего центра
Загрузить сертификаты можно с нашего сайта. Для установки воспользуйтесь любым из способов: при помощи графического интерфейса
- Откройте «Инструменты КриптоПро»;
- Нажмите «Показать расширенные»;

- Отметьте галкой «Отключить автовыбор хранилища (использовать текущее)»;
- В выпадающем меню выберите «Доверенные корневые центры сертификации»;

- Нажмите «Установить сертификаты»;
- В открывшемся меню найдите файл сертификата центра сертификации;
- Нажмите «Открыть»;
- Может появиться сообщение-предупреждение о том, что установка корневых сертификатов несет риск безопасности, нажмите «ОК»;
- Внизу окна появится сообщение «Установка завершена». Если его развернуть, появится информация о совершенном действии.

при помощи терминала Выполните команду: /opt/cprocsp/bin/amd64/certmgr -inst -cert -file ~/Загрузки/.cer -store uRoot После выполнения команды можно проверить установленный сертификат в «КриптоПро»:
- Откройте «Инструменты КриптоПро»;
- Выберите вкладку «Сертификаты»;
- Выберите хранилище «Доверенные корневые центры сертификации» из выпадающего меню.

Установка списка отозванных сертификатов
- Загрузите список отозванных сертификатов. Файл загрузки можно получить:
- На сайте удостоверяющего центра. Если сертификат выпущен:
- УЦ «Такском», загрузить файл можно по ссылке
- Другим УЦ — на сайте этого удостоверяющего центра.
- Из сертификата:
- Откройте «Инструменты КриптоПро»;
- Выберите вкладку «Сертификаты»;
- Перейдите в хранилище «Личное» в выпадающем меню;
- Выберите из списка нужный сертификат;

- Нажмите «Свойства сертификата»;
- В строке CA cert URL скопируйте ссылку;

- Откройте браузер и вставьте ссылку в адресную строку Если список отзыва сертификатов не получилось загрузить по ссылке:
- Откройте доступ к ссылке в браузере Google Chrome
- В правом верхнем углу браузера нажмите
; - Выберите «Настройки» — «Конфиденциальность и безопасность» — «Настройки сайтов»;
- В разделе «Контент» нажмите «Дополнительные настройки контента»;
- Откройте раздел «Небезопасный контент»;
- Напротив пункта «Разрешить сайтам показывать небезопасный контент» нажмите «Добавить»;
- Вставьте скопированную ссылку на списки отзыва и нажмите «Добавить».

- В правом верхнем углу браузера нажмите
Opera
- В правом верхнем углу браузера нажмите
; - Выберите «Открыть все настройки браузера»;
- Перейдите в раздел «Безопасность»;
- Выберите «Настройки сайтов»;
- В разделе «Контент» нажмите «Дополнительные настройки контента»;
- Откройте раздел «Небезопасный контент»;
- Напротив пункта «Разрешить сайтам показывать небезопасный контент» нажмите «Добавить»;
- Вставьте скопированную ссылку на списки отзыва и нажмите «Добавить».

Microsoft Edge
- В правом верхнем углу браузера нажмите
; - Откройте «Параметры»;
- Выберите «Файлы сookie и разрешения сайтов»;
- В разделе «Разрешения для сайтов» выберите «Небезопасное содержимое»;
- Напротив пункта «Разрешить» нажмите «Добавить»;
- Вставьте скопированную ссылку на списки отзыва и нажмите «Добавить».

Mozilla Firefox
- В правом верхнем углу браузера нажмите
; - Откройте «Настройки»;
- Выберите «Приватность и защита»;
- Нажмите «Управление исключениями»;
- Вставьте скопированную ссылку на списки отзыва и нажмите «Добавить исключение».

Яндекс Браузер
- В правом верхнем углу браузера нажмите
; - Откройте «Настройки»;
- Выберите «Сайты»;
- Откройте «Расширенные настройки сайтов»;
- В разделе «Защищенное содержимое» нажмите «Настройки сайтов»;
- Выберите «Разрешены» и нажмите «Добавить»;
- Вставьте скопированную ссылку на списки отзыва и нажмите «Добавить».

Разрешите в браузере скачивание файлов Google Chrome
Разрешить скачивание файлов с сайта можно через:
- Поисковую строку:
- Слева от ссылки на нужный сайт в строке поиска нажмите
; - Выберите «Настройки сайтов»;
- В строке «Автоматическое скачивание» выберите «Разрешить».
- Слева от ссылки на нужный сайт в строке поиска нажмите
- Настройки:
- В правом верхнем углу браузера нажмите
; - Выберите «Настройки» — «Конфиденциальность и безопасность» — «Настройки сайтов»;
- В разделе «Разрешения» нажмите «Дополнительные разрешения»;
- Выберите «Автоматическое скачивание»;
- Нажмите «Добавить»;
- Укажите адрес сайта, с которого необходимо скачать файл, и нажмите «Добавить».
- В правом верхнем углу браузера нажмите
Opera
- В правом верхнем углу браузера нажмите
; - Выберите «Открыть все настройки браузера»;
- Перейдите в раздел «Безопасность»;
- Выберите «Настройки сайтов»;
- В разделе «Контент» выберите «Файлы сookie и данные сайтов»;
- В разделе «Настраиваемое поведение» нажмите «Добавить»;
- Укажите адрес сайта, с которого необходимо скачать файл, и нажмите «Добавить».
Microsoft Edge
- В правом верхнем углу браузера нажмите
; - Выберите «Параметры»;
- Нажмите «Файлы сookie и разрешения сайтов»;
- В разделе «Все разрешения» нажмите «Автоматическая загрузка»;
- В разделе «Разрешить» нажмите «Добавить»;
- Укажите адрес сайта, с которого необходимо скачать файл, и нажмите «Добавить».
Mozilla Firefox
- В правом верхнем углу браузера нажмите
; - Выберите «Настройки»;
- В разделе «Файлы и приложения» в подразделах:
- «Загрузки» — отметьте галкой «Всегда выдавать запрос на сохранение файлов»;
- «Приложения» — отметьте «Сохранять файлы».
Яндекс Браузер
- В правом верхнем углу нажмите
— «Настройки»; - Выберите «Сайты» — «Расширенные настройки сайтов»;
- В разделе «Автоматическая загрузка файлов» отметьте «Разрешена».
- Откройте доступ к ссылке в браузере Google Chrome
- На сайте удостоверяющего центра. Если сертификат выпущен:

После выполнения команды список отзыва установится в хранилище «Промежуточные центры сертификации» и будет использоваться для последующей проверки сертификатов.
Установка цепочки промежуточных сертификатов;
Загрузить промежуточные сертификаты можно с нашего сайта.
Для установки выполните команду:
/opt/cprocsp/bin/amd64/certmgr -inst -cert -file ~/Загрузки/.p7b -store CA
- Откройте «Инструменты КриптоПро»;
- Выберите вкладку «Сертификаты»;
- Выберите хранилище «Промежуточные центры сертификации» из выпадающего меню. Сертификаты отобразятся в виде списка.
Создание сертификата OpenSSL
В наши дни очень часто для повышения безопасности сетевых соединений или просто для аутентификации используются SSL сертификаты. Одна из самых популярных свободных программ для создания сертификатов — это OpenSSL. Это утилита командной строки, которая позволяет создавать различные виды сертификатов, например, PKI или HTTPS.
В этой статье мы рассмотрим что такое сертификаты, какими они бывают, разберем подробно создание сертификата OpenSSL. Причем рассмотрим каждый этап, чтобы вам было легче понять что и как происходит.
Что такое сертификаты?
Думаю нужно начать с самого начала. Сертификаты в первую очередь позволяют идентифицировать человека или сервис, подтвердить что вы тот, за кого себя выдаете. А работает это так — есть два ключа — закрытый и открытый. Зашифровать сообщение можно с помощью открытого ключа, но чтобы его расшифровать нужен только закрытый ключ. Если у вас нет закрытого ключа, то вы попросту не сможете расшифровать зашифрованное сообщение. Фактически зашифровать сообщение может каждый, но расшифровать его способен только владелец закрытого (секретного ключа).
Если вы смогли расшифровать отправленное сообщение, зашифрованное с помощью вашего открытого ключа, то значит — это вы. Ключи работают только в паре, и вы не сможете расшифровать ничего другим ключом. Но еще остался один момент. Как определить что этот открытый ключ именно ваш и ему можно доверять? Все просто, достаточно, чтобы кто-то из авторитетных источников, например, Comodo или LetsEncrypt подписал ваш ключ. Это так называемые центры сертификации.
В этой инструкции мы будем иметь дело с такими видами ключей:
- .pem, .crt, .cer — готовый, подписанный центром сертификации сертификат, расширения разные, но означают одно и то же. Если совсем просто, то сертификат, это подписанный открытый ключ, плюс немного информации о вашей компании;
- .key — закрытый или открытый ключ;
- .csr — запрос на подпись сертификата, в этом файле хранится ваш открытый ключ плюс информация, о компании и домене, которую вы указали.
А теперь рассмотрим как создать сертификат openssl, как его подписать и что для этого нужно сделать. Генерация ключей openssl — это довольно простая задача, если во всем разобраться.
Создание закрытого ключа
В этой статье я буду использовать папку ~/certs для создания сертификатов. Вы можете создать эту папку и сразу перейти в неё с помощью команды:
mkdir ~/certs && cd ~/certs
Прежде всего необходимо создать закрытый ключ для сертификата. Для этого нужно использовать команду genrsa:
openssl genrsa -out domain.key 2048
Ей необходимо передать имя файла ключа с помощью опции -out. Вы можете выбрать любое имя, оно не имеет значения. Также можно указать размер ключа, например 2048. Если этого не сделать, то будет создан ключ размером 512 бит. Все ключи размером меньше 512 бит считаются небезопасными. После выполнения команды в текущей папке появится файл ключа:

Для того чтобы получить сертификат, который можно использовать нужно этот ключ подписать. А для этого надо создать запрос на подпись.
Создание запроса на подпись
При создании запроса на подпись нужно указать необходимую информацию. Обязательное поле здесь только одно. Это CN. Здесь должно быть указанно ваше доменное имя, для которого вы собираетесь использовать сертификат, также можно указать дополнительную информацию о вашей компании, адресе и организации, но это уже необязательно. Для создания запроса на подпись для ранее созданного ключа используйте такую команду:
openssl req -key domain.key -new -out domain.csr
Во время создания запроса большинство параметров можно оставить по умолчанию. Обязательно заполнять только Common Name (e.g. server FQDN or YOUR name). Если вы хотите создать сертификат для сайта, то в этом поле нужно указать домен этого сайта. В этом примере будет создан сертификат для localhost:

Вы также можете создать закрытый ключ и запрос на подпись открытого ключа одной командой:
openssl req -newkey rsa:2048 -nodes -keyout domain.key -out domain.csr
Опция -newkey указывает, что нужно создать новую пару ключей, а в параметрах мы сообщаем тип rsa и сложность 2048 байт. Опция -nodes указывает, что шифровать ключ не нужно, опция -new указывает что нужно создать запрос csr.
Кроме того, можно создать csr запрос из уже существующего сертификата и закрытого ключа, тогда вам не придется вводить информацию, она будет получена из сертификата:
openssl x509 -in domain.crt -signkey domain.key -x509toreq -out domain.csr
Параметр —x509toreq указывает, что нужно использовать сертификат для X509 для получения CSR. X509, это сертификаты, подписанные сами собой. Обычно сертификат подписывается другим сертификатом, а этот был подписан сам собой. Если вы получили сертификат от CA, то этот параметр не нужен.
Подпись сертификатов OpenSSL
Допустим, у вас есть приватный ключ и запрос на подпись, фактически, открытый ключ. Теперь вам нужно его подписать чтобы получить сертификат, который можно использовать. Тут есть несколько вариантов. Можно отправить csr файл на подпись какому-либо центру сертификации, например, LetsEncrypt. Можно подписать сертификат тем же ключом, с помощью которого он был создан, и третий вариант — создать свой центр сертификации.
Первый способ я рассматривать не буду. Здесь все просто. Либо используете утилиту сервиса, либо заполняете веб форму и получаете готовый сертификат. Второй вариант гораздо интереснее.
Подпись сертификата самим собой
Мы подпишем наш сертификат сами, ключом, на основе которого он был создан:
openssl x509 -signkey domain.key -in domain.csr -req -days 365 -out domain.crt
С помощью параметра -days мы указываем что сертификат будет действительным в течение 365 дней, то есть в течение года. Обратите внимание, что во время подписи проверяется CN, поэтому если вы не зададите этот параметр на этапе создания запроса на подпись, то ничего не заработает.

Вы можете объединить все в одну команду и сразу создать закрытый ключ, csr и подписанный сертификат:
openssl req -newkey rsa:2048 -nodes -keyout domain.key
-x509 -days 365 -out domain.crt
Или создать самоподписанный сертификат openssl из существующего закрытого ключа без csr:
openssl req -key domain.key -new -x509 -days 365 -out domain.crt
Опция -new говорит, что нужно запросить информацию о csr у пользователя. Чтобы браузер доверял ключу нужно этот же сертификат импортировать в список доверенных.
Подпись сертификатов с помощью OpenSSL
А теперь рассмотрим третий способ выполнить создание сертификата OpenSSL — подписать его с помощью собственного CA, центра сертификации.
Вот вы сейчас думаете что это что-то такое сложное, да? А нет, это обычная папка, в которой лежит защищенный паролем закрытый ключ, с помощью которого мы будем подписывать все другие ключи. А открытая часть этого ключа должна быть добавлена во все браузеры, которые будут ему доверять.
Вообще, центр сертификации в крупных корпорациях находится на отдельных компьютерах, которые даже к сети не подключены. Но для примера мы разместим папку в нашей домашней папке:
mkdir ~/ca && cd ~/ca
Дальше нужно создать самоподписанный сертификат openssl для нашего CA.
openssl req -newkey rsa:2048 -nodes -keyout ca.key -x509 -days 3654 -out ca.crt
С помощью параметра -days мы устанавливаем долгий строк действия — десять лет. Программа запросит стандартные данные, которые используются при создании сертификатов. Эти данные будут выводится в браузере при просмотре информации о центре сертификации если вы будете использовать подписанные сертификаты для HTTPS. В поле Common Name можно указать имя вашей организации:

Осталось подписать наш сертификат, созданный ранее:
openssl x509 -req -in ~/certs/domain.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out domain.crt -days 365

Готово, теперь наш сертификат подписан. Но теперь, чтобы браузеры ему доверяли нужно добавить сертификат CA в список доверенных сертификатов браузера.
Подпись сертификатов с помощью EasyRSA
Создание центра сертификации можно немного упростить. Существует набор скриптов под названием EasyRSA, который позволяет инициализировать центр сертификации, а также подписывать и отзывать сертификаты. Сначала установите пакет easy-rsa из официальных репозиториев:
sudo apt install easy-rsa
Далее нужно создать папку в которой будут находится файлы центра сертификации. Например, в домашней папке:
После этого скопируйте файлы из /usr/share/easy-rsa/ в эту папку:
cp -R /usr/share/easy-rsa/* ~/easy-rsa-ca
Дальше перейдите в неё и инициализируйте центр сертификации:

Прежде чем вы сможете создать сертификат, необходимо создать файл vars и в нём прописать информацию о центре сертификации. Например:
set_var EASYRSA_REQ_COUNTRY «US»
set_var EASYRSA_REQ_PROVINCE «California»
set_var EASYRSA_REQ_CITY «California»
set_var EASYRSA_REQ_ORG «Losst»
set_var EASYRSA_REQ_EMAIL «support@losst.pro»
set_var EASYRSA_REQ_OU «Losst»
set_var EASYRSA_ALGO «rsa»
set_var EASYRSA_DIGEST «sha512»
Первые 7 параметров аналогичны тем, что заполняются при создании запроса на подписание сертификата. Параметр EASYRSA_ALGO позволяет настроить алгоритм шифрования, можно использовать стандартный RSA или алгоритм на основе эллиптических кривых ES. Последний параметр — это формат подписи сертификатов. После этого можно создать сертификат CA:
Для корневого сертификата необходимо задать пароль. Если этого не сделать, сертификат не будет создан:

А в Common Name можно указать название центра сертификации, которое будет отображаться в браузере в информации о том кем подписан сертификат:

После этого можно переходить к подписи CSR. Например, давайте подпишем domain.csr, который был создан ранее. Сначала этот запрос надо импортировать. Для этого используйте такую команду:
./easyrsa import-req ~/certs/domain-server.csr domain-server
В первом параметре нужно указать путь к фалу CSR, а во втором имя, с помощью которого вы будете взаимодействовать с сертификатом.

После этого вы можете подписать этот запрос используя имя, заданное при импорте:
./easyrsa sign-req server domain-server
Команде необходимо передать два параметра тип сертификата и имя запроса. Тип сертификата может быть server или client. Программа попросит подтвердить данные сертификата, наберите yes и нажмите Enter:

А затем нужно будет ввести пароль от корневого сертификата. После этого будет создан новый сертификат в папке pki/issued с расширением .crt.

Просмотр сертификатов
Сертификаты сохраняются в формате PEM, а это значит, что вы не сможете их открыть как текстовый файл и нужно использовать специальные команды для просмотра информации о них. Сначала смотрим содержимое CSR:
openssl req -text -noout -verify -in domain.csr

Смотрим содержимое сертификата в режиме обычного текста:
openssl x509 -text -noout -in domain.crt

Проверяем действительно ли сертификат подписан нужным CA:
openssl verify -verbose -CAfile ~/easy-rsa-ca/pki/ca.crt pki/issued/domain-server.crt

Просмотр закрытого ключа:
openssl rsa -check -in domain.key

Чтобы проверить связаны ли между собой закрытый ключ, сертификат и открытый ключ (запрос на подпись) можно подсчитать сумы md5 для этих ключей, если значения совпадут, то есть вероятность что это ключи из одной пары:
openssl rsa -noout -modulus -in ~/certs/domain.key | openssl md5
openssl x509 -noout -modulus -in ~/certs/domain.crt | openssl md5
openssl req -noout -modulus -in ~/certs/domain.csr | openssl md5

Как использовать сертификат
Не зависимо от того какой способ создания сертификата OpenSSL вы выбрали у вас будет два файла. Это файл закрытого ключа с расширением .key и файл сертификата с расширение .crt. В данном примере это:
- domain.key
- domain-server.crt
Также вам может понадобится сертификат fullchain. Обычно этот файл содержит сам подписанный сертификат и сертификаты промежуточных центров сертификации. Но в случае если вы подписываете сертификат своим центром сертификации, промежуточных сертификатов у вас нет, а значит в качестве fullchain можно использовать сам подписанный сертификат.
Если вы хотите подключить ваши сертификаты к Apache, используйте такие директивы в файле виртуального хоста:
SSLEngine on
SSLCertificateFile /путь/к/сертификату/domain-server.crt
SSLCertificateKeyFile /путь/к/файлу/domain.key
SSLCertificateChainFile /путь/к/файлу/domain-server.crt
Для Nginx директивы подключения сертификатов выглядят похожим образом:
ssl_certificate /путь/к/файлу/domain-server.crt
ssl_certificate_key /путь/к/файлу/domain.key
Их нужно добавить внутри блока server для сайта на котором вы хотите настроить HTTPS.
Выводы
В этой статье мы рассмотрели как выполняется генерация сертификата openssl, какие бывают сертификаты, ключи и как все эти понятия связаны между собой. Это очень сложная и обширная тема, и недостаточно одной статьи чтобы все охватить, но, надеюсь, что теперь вам намного понятнее как это все работает.
¶ Установка сертификатов удостоверяющих центров в Debian/Ubuntu Linux
Некоторые приложения или сервисы в Linux, на самом деле подавляющее большинство, и в частности веб серверы, такие как NGINX или Apache, устанавливают защищенные SSL шифрованием HTTPS подключения. Установленные в системе сертификаты корневых удостоверяющих центров CA используются этими приложениями для проверки подлинности предоставляемых их клиентами сетификатов.
¶ Установка центра сертификации
Установите пакет корневых сертификатов ca-certificates
apt install -y ca-certificates
¶ Установка сертификатов
Скопируйте заказанный .cer или .crt файл сертификата
cp your_certtificate.crt /usr/local/share/ca-certificates
¶ Конвертация сертификата
Если сертификат получен в формате .pem , то его следует предварительно перевести с .crt формат, используя библиотеку OpenSSL
openssl x509 -outform der -in your_certificate.pem -out your_certificate.crt
После конвертирования можно скопировать файл в нужную папку.
¶ Обновление сертификатов
После этого остается лишь обновить сертификаты и сгенерировать ca-certificates.crt файл, содержащий все установленные в системе сертификаты:
update-ca-certificates
Это обновит файл на основании ссылок из
/etc/ca-certificates.conf
сертификатов из директории
/etc/ssl/certs
и добавит содержимое новых устанавливаемых сертификатов из директории
/usr/local/share/ca-certificates
¶ Обновление в Debian/Ubuntu Linux
В Debian Linux есть визуальный инструмент для обновления сертификатов
dpkg-reconfigure ca-certificates
где можно выбрать устанавливаемые сертификаты или удалить ненужные.
¶ Создание самоподписанного сертификата
Для создания самоподписанного сертификата и загрузки его в секреты Kubernetes:
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout ssl/tls.key -out ssl/tls.crt -subj "/CN=halfoff.ru" kubectl create secret tls halfoff-ru-cert --cert=/ssl/tls.crt --key=/ssl/tls.key kubectl create secret tls halfoff-ru-cert --cert=/ssl/tls.crt --key=/ssl/tls.key -n traefik-ingress
¶ Создание самоподписанного сертификата с альтернативным доменом
Создать директорию, сгенерировать ключ сертификат удостоверяющего центра:
mkdir ssl && cd ssl openssl genrsa -des3 -out ca.key 2048 openssl req -x509 -new -nodes -key ca.key -sha256 -days 365 -out ca.pem
Создать файл для добавления альтернативных имен
authorityKeyIdentifier=keyid,issuer basicConstraints=CA:FALSE keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment subjectAltName = @alt_names [alt_names] DNS.1 = megacorp.ru
Создать самоподписанный сертификат:
openssl genrsa -out selfsigned.key 2048 openssl req -new -key selfsigned.key -out selfsigned.csr openssl x509 -req -in selfsigned.csr -CA ca.pem -CAkey ca.key -CAcreateserial -out selfsigned.crt -days 365 -sha256 -extfile v3.ext