證書鏈(自簽名根 CA)
我正在創建一個自簽名根 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