使用可在 Chrome 58 中使用的 openssl 生成自簽名證書
從 Chrome 58 開始,它不再接受依賴於
Common Name
:https ://productforums.google.com/forum/#!topic/chrome/zVo3M8CgKzQ;context-place= topicsearchin/chrome/category $3ACanary%7Csort 的自簽名證書:相關性%7Cspell:false相反,它需要使用
Subject Alt Name
. 我以前一直在關注如何生成自簽名證書的指南:https ://devcenter.heroku.com/articles/ssl-certificate-self效果很好,因為我需要server.crt
和server.key
文件來完成我正在做的事情。我現在需要生成新的證書,其中包括SAN
但我所有的嘗試都不適用於 Chrome 58。這是我所做的:
我按照上面提到的 Heroku 文章中的步驟生成密鑰。然後我寫了一個新的 OpenSSL 配置文件:
[ req ] default_bits = 2048 distinguished_name = req_distinguished_name req_extensions = san extensions = san [ req_distinguished_name ] countryName = US stateOrProvinceName = Massachusetts localityName = Boston organizationName = MyCompany [ san ] subjectAltName = DNS:dev.mycompany.com
然後
server.crt
使用以下命令生成:openssl req \ -new \ -key server.key \ -out server.csr \ -config config.cnf \ -sha256 \ -days 3650
我在 Mac 上,所以我
server.crt
用鑰匙串打開了文件,將它添加到我的系統證書中。然後我將其設置為Always Trust
.除了設置 SAN 值的配置文件之外,這些步驟與我在以前版本的 Chrome 中用於生成和信任自簽名證書的步驟類似。
但是,在此之後,我仍然可以使用
ERR_CERT_COMMON_NAME_INVALID
Chrome 58。
我的解決方案:
openssl req \ -newkey rsa:2048 \ -x509 \ -nodes \ -keyout server.key \ -new \ -out server.crt \ -subj /CN=dev.mycompany.com \ -reqexts SAN \ -extensions SAN \ -config <(cat /System/Library/OpenSSL/openssl.cnf \ <(printf '[SAN]\nsubjectAltName=DNS:dev.mycompany.com')) \ -sha256 \ -days 3650
狀態:為我工作
這是一個適合我的解決方案:
創建 CA 密鑰和證書
# openssl genrsa -out server_rootCA.key 2048 # openssl req -x509 -new -nodes -key server_rootCA.key -sha256 -days 3650 -out server_rootCA.pem
創建 server_rootCA.csr.cnf
# server_rootCA.csr.cnf [req] default_bits = 2048 prompt = no default_md = sha256 distinguished_name = dn [dn] C=DE ST=Berlin L=NeuKoelln O=Weisestrasse OU=local_RootCA emailAddress=ikke@server.berlin CN = server.berlin
創建 v3.ext 配置文件
# v3.ext authorityKeyIdentifier=keyid,issuer basicConstraints=CA:FALSE keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment subjectAltName = @alt_names [alt_names] DNS.1 = server.berlin
創建伺服器密鑰
# openssl req -new -sha256 -nodes -out server.csr -newkey rsa:2048 -keyout server.key -config <( cat server_rootCA.csr.cnf )
創建伺服器證書
# openssl x509 -req -in server.csr -CA server_rootCA.pem -CAkey server_rootCA.key -CAcreateserial -out server.crt -days 3650 -sha256 -extfile v3.ext
將證書和密鑰添加到 Apache2 站點文件、HTTPS(埠 443)部分
SSLCertificateFile /etc/apache2/ssl/server.crt SSLCertificateKeyFile /etc/apache2/ssl/server.key
將 server_rootCA.pem 從伺服器複製到您的電腦。
# scp you@server.berlin:~/server_rootCA.pem .
.. 並將其添加到 Chromium 瀏覽器
Chromium -> Setting -> (Advanced) Manage Certificates -> Import -> 'server_rootCA.pem'
你已經完成了!
PS您可以簡單地在 HTTP 伺服器配置中禁用 HSTS 標頭,而不是創建功能 CA 和伺服器證書對(按照上面的說明)。這將阻止 Chromium 強制執行 HTTPS,並允許使用者點擊“高級 → 繼續訪問 your.url(不安全)”,而無需獲取並安裝您的自定義 CA (server_rootCA.pem) 證書。換句話說 - 必須禁用 HSTS 將允許通過 HTTP 和/或不安全的 HTTPS 連接公開查看您的網站(當心!)。
對於 Apache2,將以下內容添加到站點文件 HTTP(埠 80)部分
Header unset Strict-Transport-Security Header always set Strict-Transport-Security "max-age=0;includeSubDomains"
在 Debian/Apache2.4 + Debian/Chromium 59 上測試
https://ram.k0a1a.net/self-signed_https_cert_after_chrome_58