Перевод статьи: Sign server and client certificates
Автор: Джэми Нгуен (Jamie Nguyen)
Подпишем сертификаты при помощи нашего промежуточного удостоверяющего центра. Подписанные сертификаты можно использовать в различных целях, например, для установки безопасных подключений к веб-серверу или аутентификации клиентов, подключающихся к сервису.
Замечание. Шаги, описанные ниже, описаны с точки зрения удостоверяющего центра. Сторонние пользователи, однако, вместо этого могут создавать свои собственные приватные ключи и запросы на подпись сертификата, не предоставляя вам свои собственные приватные ключи. Они предоставят вам их запрос на сертификат, а вы отдадите им обратно подписанный сертификат. В этом случае пропустите команды genrsa и req.
Наши пары ключей для корневого и промежуточного удостоверяющих центров имеют длину 4096 бит. Сертификаты сервера и клиента обычно истекают через один год, поэтому можно безопасно использовать 2048-битные ключи.
Замечание. Хотя 4096-битные ключи немного более безопасны, чем 2048-битные, они замедляют рукопожатие TLS и значительно увеличивают нагрузку на процессор во время рукопожатия. По этой причине большинство веб-сайтов используют 2048-битные ключи.
Если вы создаёте криптографическую пару ключей для использования веб-сервером (например, Apache), нужно будет вводить этот пароль при каждой перезагрузке веб-сервера. Возможно вы захотите пропустить опцию -aes256, чтобы создать ключ без пароля.
# cd /root/ca # openssl genrsa -aes256 \ -out intermediate/private/www.example.com.key.pem 2048 # chmod 400 intermediate/private/www.example.com.key.pem
Используйте приватный ключ для создания запроса на подпись сертификата (CSR). Информация из запроса не обязательно должна совпадать с промежуточным удостоверяющим центром. Для сертификатов серверов поле общего имени Common Name должно быть полным доменным именем (например, www.example.com), а для сертификатов пользователей им может быть уникальный идентификатор (например, адрес электронной почты). Отметим, что поле общего имени Common Name не может быть таким же, как у сертификата корневого или промежуточного удостоверяющего центра.
# cd /root/ca # openssl req -config intermediate/openssl.cnf \ -key intermediate/private/www.example.com.key.pem \ -new -sha256 -out intermediate/csr/www.example.com.csr.pem Enter pass phrase for www.example.com.key.pem: secretpassword # Введите ключевую фразу для www.example.com.key.pem: секретныйпароль You are about to be asked to enter information that will be incorporated # У вас будет запрошена информация, которая будет вставлена into your certificate request. # в ваш запрос сертификата. ----- Country Name (2 letter code) [XX]:US # Название страны (двухбуквенный код) [XX]:US State or Province Name []:California # Название штата или провинции []:Калифорния Locality Name []:Mountain View # Название местности []:Маунтин Вью Organization Name []:Alice Ltd # Название организации []:ООО Алиса Organizational Unit Name []:Alice Ltd Web Services # Название подразделения []:Веб-сервисы ООО Алиса Common Name []:www.example.com # Общее имя []:www.example.com Email Address []: # Адрес электронной почты []:
Чтобы создать сертификат, воспользуемся промежуточным удостоверяющим центром для подписи запроса на сертификат. Если сертификат будет использоваться на сервере, воспользуемся расширением server_cert. Если сертификат будет использоваться для аутентификации пользователя, воспользуемся расширением usr_cert. Сертификаты обычно выдаются сроком на один год, но удостоверяющие центры обычно для удобства дают несколько дополнительных дней.
# cd /root/ca # openssl ca -config intermediate/openssl.cnf \ -extensions server_cert -days 375 -notext -md sha256 \ -in intermediate/csr/www.example.com.csr.pem \ -out intermediate/certs/www.example.com.cert.pem # chmod 444 intermediate/certs/www.example.com.cert.pem
Файл intermediate/index.txt должен содержать строку, ссылающуюся на этот новый сертификат.
V 160420124233Z 1000 unknown ... /CN=www.example.com
# openssl x509 -noout -text \ -in intermediate/certs/www.example.com.cert.pem
Эмитент - промежуточный удостоверяющий центр. Поле субъекта ссылается на сам сертификат.
Signature Algorithm: sha256WithRSAEncryption # Алгоритм подписания: sha256WithRSAEncryption Issuer: C=GB, ST=England, # Эмитент: C=GB, ST=Англия, O=Alice Ltd, OU=Alice Ltd Certificate Authority, # O=ООО Алиса, OU=Удостоверяющий центр ООО Алиса, CN=Alice Ltd Intermediate CA # CN=Промежуточный удостоверяющий центр ООО Алиса Validity # Действительность Not Before: Apr 11 12:42:33 2015 GMT # Не ранее: 11 апреля 2015 года в 12:42:33 по Гринвичу Not After : Apr 20 12:42:33 2016 GMT # Не позднее: 20 апреля 2016 года 12:42:33 по Гринвичу Subject: C=US, ST=California, # Субъект: C=US, ST=Калифорния, L=Маунтин Вью, O=Alice Ltd, OU=Alice Ltd Web Services, # O=ООО Алиса, OU=Веб-сервисы ООО Алиса, CN=www.example.com Subject Public Key Info: # Информация публичного ключа субъекта: Public Key Algorithm: rsaEncryption # Алгоритм публичного ключа: rsaEncryption Public-Key: (4096 bit) # Публичный ключ: (4096 бит)
В выводе также показаны расширения X509v3. При создании сертификата было использовано одно из двух расширений: server_cert или usr_cert. Опции из соответствующего раздела конфигурации будут отражены в выводе.
X509v3 extensions: # Расширения X509v3: X509v3 Basic Constraints: # Базовые ограничения X509v3: CA:FALSE Netscape Cert Type: # Тип сертификата Netscape: SSL Server # SSL-сервер Netscape Comment: # Комментарий Netscape OpenSSL Generated Server Certificate # Сертификат сервера, созданный OpenSSL X509v3 Subject Key Identifier: # Идентификатор ключа субъекта X509v3: B1:B8:88:48:64:B7:45:52:21:CC:35:37:9E:24:50:EE:AD:58:02:B5 X509v3 Authority Key Identifier: # Идентификатор ключа подлинности X509v3: keyid:69:E8:EC:54:7F:25:23:60:E5:B6:E7:72:61:F1:D4:B9:21:D4:45:E9 DirName:/C=GB/ST=England/O=Alice Ltd/OU=Alice Ltd Certificate Authority/CN=Alice Ltd Root CA # ИмяКаталога:/C=GB/ST=Англия/O=ООО Алиса/OU=Удостоверяющий центр ООО Алиса/CN=Корневой удостоверяющий центр ООО Алиса serial:10:00 509v3 Key Usage: critical # Использование ключа X509v3: критичное Digital Signature, Key Encipherment # Цифровая подпись, ключ шифрования X509v3 Extended Key Usage: # Расширенное использование ключа X509v3: TLS Web Server Authentication # Аутентификация веб-сервера TLS
Воспользуемся ранее созданным файлом цепочки сертификата удостоверяющего центра (ca-chain.cert.pem), чтобы проверить, что этот новый сертификат обладает действительной цепочкой доверия.
# openssl verify -CAfile intermediate/certs/ca-chain.cert.pem \ intermediate/certs/www.example.com.cert.pem www.example.com.cert.pem: OK
Теперь можно либо установить новый сертификат на сервер, либо передать сертификат клиенту. При установке на серверное приложение (например, Apache), нужно сделать доступными следующие файлы:
Если вы подписали запрос на сертификат, полученный со стороны, у вас не будет доступа к приватному ключу, так что обратно вам нужно будет передать только файл цепочки (ca-chain.cert.pem) и сертификат (www.example.com.cert.pem).