Я создаю самозаверяющий корневой центр сертификации для внутреннего использования, я решил использовать промежуточный сертификат. Однако у меня возникают проблемы с 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