Как сделать самоподписанный SSL-сертификат с собственным ЦС

Что такое SSL-сертификат?

Если у вас есть значок замка рядом с URL-адресом в браузере, это означает, что сервер имеет сертификат SSL. Этот сертификат обычно подписывается центром сертификации, таким как Digicert, Comodo, Let’s Encrypt и т. д. Сертификат SSL загрузится в ваш браузер и подтвердит, что домен действителен доверенным центром сертификации.

Самоподписанный SSL-сертификат

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

Запрос на подпись сертификата (CSR)

CSR — это файл, содержащий любую информацию для запроса открытого ключа, подписанного центром сертификации (CA). При запросе сертификата в ЦС вы должны сначала создать файл CSR и загрузить этот файл в ЦС.

Локальный центр сертификации

Простой способ создать центр сертификации (ЦС) — всего четыре шага с помощью команды openssl:
1. Создайте файл конфигурации и сохраните его в ca.cnf.

[req]
default_bits = 2048
prompt = no
default_md = sha256
encrypt_key = no
distinguished_name = dn
[dn]
C = ID                            # country code
O = Local Digital Cert Authority  # organization
OU = www.ca.local                 # organization unit/department
CN = Self-Signed Root CA          # common name / your cert name

2. Сгенерируйте закрытый ключ для ЦС

openssl genrsa -out ca-private.key 2048

3. Создайте CSR с файлом конфигурации и ca-private.key

openssl req -new -key ca-private.key -out ca.csr -config ca.cnf

4. Создайте самозаверяющий сертификат ЦС

openssl x509 -req -days 3650 -n ca.csr -signkey ca-private.key -out ca-public.crt

Объяснение:
-days ‹число› → срок действия вашего сертификата ЦС, обычно срок действия ЦС составляет 25 лет или 9125 дней.

И, наконец, у нас есть несколько файлов в каталоге:

  • ca.cnf →файл конфигурации содержит информацию об атрибутах
  • ca-private.key → закрытый ключ для подписи сертификата сервера
  • ca.csr → запрос на подпись сертификата для создания открытого ключа CA
  • ca-public.crt → корневой сертификат для подписи сертификата сервера.

Чтобы упростить эту команду, я использую Python и модуль подпроцесса:

Скрипт Python для регистрации CSR

Если вы когда-либо запрашивали сертификат для оплаты центра сертификации (Digicert/Comodo/Let’s Encrypt/и т. д.), вы должны загрузить свой запрос на подпись сертификата (CSR) на веб-сайт.

Вдохновленный этим процессом, я хочу создать скрипт Python для автоматизации процесса подписи локального центра сертификации, просто используя файл CSR.

Этот скрипт такой же простой, как и скрипт bash. Но на этот раз я просто хочу использовать скрипт Python. Просто скопируйте и используйте мой скрипт ниже:

Этот скрипт был протестирован в Linux, если вы используете Windows, я рекомендую вам использовать Git Bash для запуска этого скрипта Python, потому что в Git Bash предустановлен OpenSSL.

Как использовать скрипт Python:

ca.crt — это корневой сертификат, а server.crt — открытый ключ, который подписывает ЦС.

Бонус

Вы можете найти мой репозиторий по этой ссылке ниже.



Заключение

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

Дополнительные материалы на PlainEnglish.io. Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter и LinkedIn. Присоединяйтесь к нашему сообществу Discord.