Перейти к основному содержимому

Генерация самоподписного TLS сертификата

В данной инструкции описан процесс генерации самоподписного корневого сертификата и выпуск TLS сертификата на необходимый домен при помощи OpenSSL. Данный сертификат будет соответствовать всем требованиям КриптоПро по безопасности.

Создание корневого сертификата CA

  1. Создаем необходимые файлы и папки:
mkdir -p db
touch db/index.txt
echo "1000" > db/serial
  1. Создаем конфигурационный файл openssl используемый в дальнейшем для генерации файлов тестового CA (Certificate Authority) и TLS сертификатов со следующим содержимым:
openssl.cfg
[ca]
default_ca = CA_default

[CA_default]
crl_extensions = crl_ext
database = db/index.txt
default_md = sha256
new_certs_dir = db
policy = policy_anything
serial = db/serial
x509_extensions = server_cert
copy_extensions = copy

[policy_anything]
countryName = optional
stateOrProvinceName = optional
localityName = optional
organizationName = optional
organizationalUnitName = optional
commonName = supplied
emailAddress = optional

[server_cert]
basicConstraints = CA:FALSE
keyUsage = digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth
crlDistributionPoints = @crl_section

[crl_ext]
authorityKeyIdentifier = keyid:always

[crl_section]
URI.1 = http://example.com/test_ca.crl

[req]
prompt = no
x509_extensions = req_v3_ca

[req_v3_ca]
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
basicConstraints = critical, CA:TRUE
keyUsage = critical, digitalSignature, cRLSign, keyCertSign

В нём указываем корректный URL для загрузки CRL (crl_section -> URI.1).

  1. Создаем приватный ключ (test_ca.key) и сертификат (test_ca.crt) тестового ЦС на 365 дней с /CN=Test CA:
openssl req -nodes -x509 -sha256 \
-newkey rsa:4096 \
-keyout test_ca.key \
-out test_ca.crt \
-days 365 \
-subj "/CN=Test CA" \
-config openssl.cfg
  1. Создаем CRL (Certificate Revocation List) файл на 365 дней и конвертируем его в DER формат:
openssl ca -gencrl \
-keyfile test_ca.key \
-cert test_ca.crt \
-out test_ca.crl.pem \
-crldays 365 \
-config openssl.cfg && \
openssl crl -in test_ca.crl.pem -out test_ca.crl -outform DER && \
rm test_ca.crl.pem
примечание

CRL должен раздаваться в сети именно в формате DER.

Создание TLS сертификата

Перед созданием TLS сертификата необходимо иметь все файлы сгенерированные на этапе Создание корневого сертификата CA.

  1. Создаем приватный ключ 4096 бит (klyuchnik.test.local.key) для TLS сертификата на домен klyuchnik.test.local:
openssl genrsa -out klyuchnik.test.local.key 4096
  1. Создаем запрос (klyuchnik.test.local.csr) на генерацию TLS сертификата на домен klyuchnik.test.local:
openssl req -new \
-key klyuchnik.test.local.key \
-out klyuchnik.test.local.csr \
-subj "/CN=klyuchnik.test.local" \
-addext "subjectAltName = DNS:klyuchnik.test.local"
  1. Создаем TLS сертификат на домен klyuochnik.test.local:
openssl ca \
-batch \
-in klyuchnik.test.local.csr \
-out klyuchnik.test.local.crt.tmp \
-keyfile test_ca.key \
-cert test_ca.crt \
-days 365 \
-config openssl.cfg && \
openssl x509 \
-in klyuchnik.test.local.crt.tmp \
-out klyuchnik.test.local.crt \
-outform PEM && \
rm klyuchnik.test.local.crt.tmp

В результате получаем следующий набор файлов:

ФайлОписание
db/index.txtБаза данных по выданным сертификатам
db/serialСерийный номер очередного выдаваемого сертификата
openssl.cfgКонфигурация openssl для выдаци корневого сертификата
test_ca.crtКорневой сертификат CA
test_ca.keyПриватный ключ корневого сертификата CA
test_ca.crlСписок отзыва выданных TLS сертификатов (CRL)
klyuchnik.test.local.csrЗапрос на TLS сертификат
klyuchnik.test.local.crtВыданный TLS сертификат
klyuchnik.test.local.keyПриватный ключ выданного TLS сертификата