Назад | Перейти на главную страницу

Цепочка сертификатов (самоподписанный корневой центр сертификации)

Я создаю самозаверяющий корневой центр сертификации для внутреннего использования, я решил использовать промежуточный сертификат. Однако у меня возникают проблемы с Chromium и Firefox 54.0, которые не доверяют цепочке сертификатов.

Контент размещается через Apache 2.4.18 в Ubuntu 16.04 со следующей конфигурацией:

<VirtualHost *:443> DocumentRoot /var/www/html/ SSLCertificateFile /etc/apache2/ssl/server.crt SSLCertificateKeyFile /etc/apache2/ssl/server.key SSLCertificateChainFile /etc/apache2/ssl/fullchain.crt </VirtualHost>

Chromium сообщает «Есть проблемы с цепочкой сертификатов сайтов», а Firefox «Код ошибки: SEC_ERROR_CA_CERT_INVALID». И Chromium, и Firefox имеют корневой ЦС, установленный в их хранилище доверенных сертификатов, в качестве доверенного сертификата для проверки веб-сайтов.

Ниже приведены настройки, используемые для создания, подписи и проверки сертификатов.

#Generate and self-sign the Root CA #=========================================================== openssl genrsa -out ca.key 2048 #openssl genrsa -aes256 -out ca.key 4096 openssl req -new -x509 -days 3650 -key ca.key -subj "/C=UK/ST=London/L=/O=SWS, Inc./CN=X1 SWS Root CA" -out ca.crt #===Generate and sign the intermediate CA #============================================================ openssl req -newkey rsa:2048 -nodes -keyout intermediate.key -subj "/C=UK/ST=London/L=/O=SWS Intermediate, Inc./CN=SWS Intermediate CA" -out intermediate.csr openssl x509 -req -extfile <(printf "subjectAltName=DNS:localhost") -in intermediate.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out intermediate.crt -days 2000 -sha256 #===Generate a certificate and sign with the intermediate CA #============================================================ openssl req -newkey rsa:2048 -nodes -keyout server.key -subj "/C=UK/ST=London/L=/O=SWS, Inc./CN=*.sws.com" -out server.csr openssl x509 -req -extfile <(printf "subjectAltName=DNS:sws.com,DNS:*.sws.com") -days 730 -in server.csr -CA intermediate.crt -CAkey intermediate.key -CAcreateserial -out server.crt #===Generate a certificate chain #=========================================================== cat intermediate.crt ca.crt > fullchain.crt #===Verify the certificate (CRT) info #============================================================ openssl x509 -in server.crt -text -noout #===Verifies the Chain of Trust #============================================================ openssl verify -CAfile ca.crt intermediate.crt openssl verify -verbose -CAfile <(cat intermediate.crt ca.crt) server.crt

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

Пожалуйста, подтвердите, что доменное имя «sws.com» является локальным DNS; он настраивается через файл hosts.

Поскольку эта тема довольно большая, я решил прикрепить нижеприведенные URL-адреса с подробным описанием процедуры настройки.

Используя документы по Jamie Linux, я создал корневой и промежуточный ЦС. Однако в это руководство не было включено расширение X509v3 для альтернативных имен субъектов. Эту проблему легко решить, изменив промежуточный файл / openssl.cnf в модуле [server_cert], добавив следующие строки.

[ server_cert ] ... subjectAltName = @alt_names [ alt_names ] DNS.1 = example.com DNS.2 = www.example.com

Измененный промежуточный файл конфигурации был добавлен ниже как «Config ICA».

Проблема, которую я поставил с первоначальным вопросом, заключалась в том, что промежуточный ЦС не имел основных ограничений. Следовательно, это был сертификат X509v1, так что у него не было ограничений, указывающих, был ли он CA, а поскольку X509v1 устарел, все браузеры автоматически не доверяют цепочке доверия.


Джейми Линукс: https://jamielinux.com/docs/openssl-certificate-authority/create-the-root-pair.html
Конфиг ICA: https://pastebin.com/gCGcFdiP