Генерация самоподписного TLS сертификата
В данной инструкции описан процесс генерации самоподписного корневого сертификата и выпуск TLS сертификата на необходимый домен при помощи OpenSSL. Данный сертификат будет соответствовать всем требованиям КриптоПро по безопасности.
Создание корневого сертификата CA
- Создаем необходимые файлы и папки:
mkdir -p db
touch db/index.txt
echo "1000" > db/serial
- Создаем конфигурационный файл 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).
- Создаем приватный ключ (
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
- Создаем 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.
- Создаем приватный ключ 4096 бит (
klyuchnik.test.local.key) для TLS сертификата на доменklyuchnik.test.local:
openssl genrsa -out klyuchnik.test.local.key 4096
- Создаем запрос (
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"
- Создаем 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 сертификата |