Apache-2.4

證書鏈(自簽名根 CA)

  • September 10, 2017

我正在創建一個自簽名根 CA 供內部使用,我決定使用中間證書。但是,我遇到了 Chromium 和 Firefox 54.0 不信任證書鏈的問題。

內容通過 Ubuntu 16.04 上的 Apache 2.4.18 託管,配置如下:

<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 都在其信任庫中安裝了 Root CA,作為驗證網站的可信證書。

以下是用於生成、簽署和驗證證書的設置

#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;它是通過主機文件配置的。

由於這個話題比較大,所以我選擇附上下面的網址,詳細解釋配置過程。

使用 Jamie Linux 上的文件,我創建了根 CA 和中間 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

引用自:https://serverfault.com/questions/871474