IT заметки по программированию
IT заметки по программированию
IT заметки по программированию
IT заметки по программированию

Как сгенерировать самоподписанный корневой сертификат TLS

Команды для создания пары ключей (приватного и публичного) и самоподписанного сертификата с использованием OpenSSL:

1. Генерация приватного ключа (RSA)

Разбор команды:

  • openssl genpkey: Указывает OpenSSL сгенерировать новую пару ключей (приватный и публичный).
  • -algorithm RSA: Указывает, что ключ должен быть сгенерирован с использованием алгоритма RSA (одного из самых популярных алгоритмов для криптографических ключей).
  • -out ca.key: Указывает, что приватный ключ должен быть сохранён в файл с именем ca.key.
  • -pkeyopt rsa_keygen_bits:4096: Это дополнительная опция, которая задаёт длину ключа RSA — 4096 бит. Чем больше длина ключа, тем безопаснее, но тем больше ресурсов требуется для шифрования и расшифровки. Длина 4096 бит считается высокой степенью защиты.

Что происходит:

  • Генерируется новый приватный RSA-ключ длиной 4096 бит.
  • Ключ сохраняется в файл ca.key. Этот ключ можно использовать для создания и подписи сертификатов.

2. Создание самоподписанного сертификата (CA-сертификат)

Разбор команды:

  • openssl req: Команда для создания запроса на сертификат (CSR) или сертификата.
  • -x509: Указывает, что вместо CSR будет создан самоподписанный сертификат X.509. Сертификат X.509 используется для обеспечения подлинности и безопасности соединений, и это наиболее распространённый стандарт для сертификатов TLS/SSL.
  • -new: Указывает, что создаётся новый сертификат.
  • -key ca.key: Приватный ключ, который используется для подписания сертификата. Здесь используется ранее сгенерированный ключ (ca.key).
  • -out ca.crt: Указывает файл, в который будет сохранён созданный самоподписанный сертификат. В данном случае это ca.crt.
  • -days 3650: Указывает срок действия сертификата в днях. В этом случае сертификат будет действителен 3650 дней (около 10 лет).
  • -config openssl.cnf: Указывает файл конфигурации openssl.cnf, который содержит дополнительные параметры для сертификата (например, информацию о субъекте, расширения сертификата, такие как keyUsage, basicConstraints и т.д.).

Что происходит:

  • Создаётся новый самоподписанный сертификат X.509, который действует как корневой сертификат (CA-сертификат).
  • Сертификат подписывается приватным ключом, указанным в ca.key.
  • Сертификат сохраняется в файл ca.crt.
  • Сертификат будет действителен в течение 10 лет (3650 дней).

Этот сертификат можно использовать как корневой для подписи других сертификатов.

Файл конфига openssl.cnf

 

Этот конфигурационный файл OpenSSL используется для создания самоподписанного сертификата. Давайте подробно рассмотрим, что делают каждая из его секций и параметры.

1. Секция [ req ]

Секция [ req ] содержит параметры, которые определяют поведение команды openssl req при создании запроса на сертификат (CSR) или сертификата.

  • default_bits = 4096: Устанавливает длину ключа по умолчанию в 4096 бит. Это стандартный размер ключа, который обеспечивает высокую степень безопасности.
  • prompt = no: Отключает интерактивный режим. Без этого параметра OpenSSL запросил бы ввод данных о стране, организации и других полях. При отключении интерактивного режима данные берутся из раздела [ dn ].
  • default_md = sha256: Указывает хеш-функцию по умолчанию, которая будет использоваться для подписи сертификата. sha256 является современной и надёжной функцией хеширования, широко используемой в криптографических операциях.
  • distinguished_name = dn: Указывает, что данные для полей, таких как страна, организация и т.д., будут взяты из секции [ dn ].
  • x509_extensions = v3_ca: Указывает, что для сертификата будут применены расширения из секции [ v3_ca ]. Эти расширения делают сертификат пригодным для использования в качестве корневого сертификата (CA-сертификата).

2. Секция [ dn ]

Секция [ dn ] содержит данные, которые будут включены в CSR или сертификат. Это «различительные» поля (distinguished name), которые идентифицируют владельца сертификата.

  • C = RU: Страна владельца сертификата, в данном случае Россия (RU).
  • ST = Moscow: Штат или область, в данном случае — Москва.
  • L = Moscow: Город владельца сертификата — также Москва.
  • O = MPMSystem: Организация, в данном случае MPMSystem.
  • OU = IT Department: Организационная единица (отдел), в данном случае — IT Department.
  • CN = Root CA: Common Name (CN), который используется для идентификации сертификата. В данном случае это Root CA, что указывает, что данный сертификат будет корневым центром сертификации.

3. Секция [ v3_ca ]

Секция [ v3_ca ] содержит расширения X.509, которые будут добавлены к сертификату. Эти расширения необходимы для создания сертификата CA, который может подписывать другие сертификаты.

  • subjectKeyIdentifier = hash: Добавляет идентификатор открытого ключа (Subject Key Identifier) на основе хеша открытого ключа этого сертификата. Этот параметр помогает различать сертификаты по их открытым ключам.
  • authorityKeyIdentifier = keyid:always,issuer:always: Этот параметр указывает, что сертификат будет содержать идентификатор ключа, используемого для подписи (Authority Key Identifier). В данном случае указывается, что идентификатор ключа будет включать как keyid (идентификатор ключа), так и issuer (данные издателя), что помогает связывать сертификаты с их авторитетом (CA).
  • basicConstraints = critical,CA:TRUE,pathlen:0: Это расширение указывает, что сертификат является CA (сертификатом центра сертификации). Параметр CA:TRUE указывает, что сертификат может подписывать другие сертификаты. Флаг critical делает это расширение обязательным для проверки, и если программа не поддерживает это расширение, она отклонит сертификат. pathlen:0 указывает, что этот CA-сертификат может подписывать только конечные сертификаты (не другие CA), ограничивая «глубину» цепочки сертификатов.
  • keyUsage = critical, keyCertSign, digitalSignature, cRLSign: Это расширение указывает, для чего можно использовать ключ. Флаг critical снова означает, что это обязательное расширение.
    • keyCertSign: Сертификат может быть использован для подписи других сертификатов.
    • digitalSignature: Сертификат может быть использован для цифровой подписи.
    • cRLSign: Сертификат может использоваться для подписывания списков отзыва сертификатов (CRL, Certificate Revocation List).

Резюме

Этот конфигурационный файл создаёт самоподписанный сертификат центра сертификации (CA), который может использоваться для подписи других сертификатов. Он включает важные криптографические расширения и настройки, которые делают его полноценным CA-сертификатом с возможностью подписывать конечные сертификаты.

 

 

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *