Документ описывает процедуру создания самоподписанных сертификатов с помощью OpenSSL.
CA – это корневой сертификат, по сути третья сторона, которой при шифровании данных доверяют клиент и сервер. На его основе будут выпускаться все остальные сертификаты. Для каждого нового домена верхнего уровня необходимо будет выпускать свой сертификат.
Чтобы сгенерировать любой x509 сертификат, необходима пара ключей, открытый и закрытый. В рассматриваемом примере будем использовать RSA ключ.
-
Создаем ключ:
openssl genrsa -out ca-key.pem 2048В каталоге появится файл ca-key.pem. Это – приватный ключ, он же закрытый ключ.
-
Генерируем сам CA-сертификат:
openssl req -x509 -new -key ca-key.pem -days 10000 -out ca.pemВ процессе генерации будут заданы вопросы, ответить на которые можно, например, так:
Country Name (2 letter code) []:RUState or Province Name (full name) []:MoscowLocality Name (eg, city) []:MoscowOrganization Name (eg, company) []:MyOwnCompanyOrganizational Unit Name (eg, section) []:DevOpsCommon Name (eg, fully qualified host name) []:Email Address []:admin@myowncompany.comНа выходе будет получен файл ca.pem. Это – наш корневой CA, которым мы будем подписывать конечные сертификаты.
-
Создаем ключ для конечного сертификата:
openssl genrsa -out cert-key.pem 2048 -
Создаем файл tls.cnf следующего вида:
[req]distinguished_name = req_distinguished_namereq_extensions = req_extprompt = no[req_distinguished_name]C = RUST = MoscowL = MoscowO = MailRU LLCOU = DevOpsCN = www.domain.tld[req_ext]keyUsage = keyEncipherment, dataEncipherment, digitalSignatureextendedKeyUsage = serverAuthsubjectAltName = @alt_names[alt_names]DNS.1 = www.domain.tldDNS.2 = cloud.domain.tldDNS.3 = '*.cloud.domain.tld'IP.1 = 127.0.0.1IP.2 = 192.168.1.4В этом файле указываем интересующие нас домены, ip-адреса и информацию о сертификате.
-
Генерируем запрос на сертификат:
openssl req -new -sha256 -out cert.csr -key cert-key.pem -config tls.cnfВ результате появится файл cert.csr, который можно проверить:
openssl req -text -noout -in cert.csr | grep 'DNS' -
Генерируем сам сертификат:
openssl x509 -req -in cert.csr -CA ca.pem -CAkey \ca-key.pem -CAcreateserial -out cert.pem \-days 1000 -extensions req_ext -extfile tls.cnf -
Проверяем что в сертификате есть все необходимые данные:
openssl x509 -in cert.pem -text | grep -E '(Issuer:|Subject:|DNS:)'Должена быть выведена следующая информация:
- Issuer - данные с CA.
- Subject - данные из конфига tls.cnf.
- DNS собственно - alternative names.
После выполнения описанных выше действий должны получить следующий набор файлов:
- ca.pem - ставим на клиентские машины, в систему, в браузер.
- cakey.pem - храним в секрете.
- cert.pem и cert-key.pem - должны находиться на ресурсе, который хотим перевести на HTTPS.
Технический писатель: Груздев Никита