Я создаю самоподписанный корневой центр сертификации для внутреннего использования, я решил использовать промежуточный сертификат. Однако у меня возникают проблемы с Chromium и Firefox 54.0, которые не доверяют цепочке сертификатов.
Контент размещается через Apache 2.4.18 в Ubuntu 16.04 со следующей конфигурацией: DocumentRoot / var / www / html / SSLCertificateFile /etc/apache2/ssl/server.crt SSLCertificateKeyFile /etc/apache2/ssl/server.key SSLCertificateChainFile /etc/apache2/ssl/fullchain.crt
Chromium сообщает "Есть проблемы с цепочкой сертификатов сайтов", а Firefox "Код ошибки: SEC_ERROR_CA_CERT_INVALID". И Chromium, и Firefox имеют корневой ЦС, установленный в их хранилище доверенных сертификатов, в качестве доверенного сертификата для проверки веб-сайтов.
Ниже приведена настройка, используемая для создания, подписи и проверки сертификатов
# Создать и самостоятельно подписать корневой ЦС
# ================================================= ==========
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
# === Создать и подписать промежуточный ЦС
# =================================================== ===========
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
# === Создать сертификат и подписать его с помощью промежуточного ЦС
# =================================================== ===========
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
# === Создать цепочку сертификатов
# ================================================= ==========
кот промежуточный.crt ca.crt> fullchain.crt
# === Проверить информацию о сертификате (CRT)
# =================================================== ===========
openssl x509 -in server.crt -text -noout
# === Проверяет цепочку доверия
# =================================================== ===========
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, я создал корневой каталог и промежуточный CA. Тем не мение,в это руководство не входило расширение X509v3 для альтернативных имен субъектов. Это было легко разрешено путем изменения промежуточного файла / openssl.cnf в модуле [server_cert] путем добавления следующих строк.
[server_cert]
...
subjectAltName = @alt_names
[alt_names]
DNS.1 = example.com
DNS.2 = www.example.com
Измененный промежуточный файл конфигурации был добавлен ниже как «Config ICA».
Проблема, которую я сделал с первоначальным вопросом, заключалась в том, что промежуточный CA не имел основных ограничений. Следовательно, это был сертификат X509v1, так что у него не было ограничений, указывающих, был ли он CA, а поскольку X509v1 устарел, все браузеры автоматически не доверяют цепочке доверия.
Jamie Linux: https: // jamielinux. com / docs / openssl-certificate-Authority / create-the-root-pair.html
Конфигурация ICA: https://pastebin.com/gCGcFdiP