Chrome 桌面和 android 拒絕接受受信任的自簽名證書
我使用以下命令使用 OpenSSL 1.1.1b(2019 年 2 月 26 日)創建了一個自簽名證書:
openssl req -nodes -new –days 900 -subj /CN=192.168.0.104:8080 -x509 -keyout server.key -out server.crt
然後我使用 windows mmc將生成的 server.crt 導入控制台根目錄 -> 證書 - 目前使用者 -> 受信任的根證書頒發機構 -> 證書
當我轉到 192.168.0.104:8080 的 chrome 頁面時,它告訴我該頁面是“不安全的”(如果我查看證書資訊,證書路徑下的證書狀態顯示“此證書正常”。
我在我的安卓手機上做了類似的過程,將它上傳到我的手機,在加密和憑據設置部分添加證書。
但是,當我轉到該頁面時,它告訴我“伺服器的證書與 URL 不匹配”。
我在這裡做錯了什麼?
更新:
我現在正在使用 req.conf
[req] distinguished_name = req_distinguished_name x509_extensions = v3_req prompt = no [req_distinguished_name] C = US ST = CA L = Belmont O = N/A OU = N/A CN = 192.168.0.104 [v3_req] subjectAltName = @alt_names [alt_names] DNS.0 = localhost IP.0 = 192.168.0.104
並使用以下命令創建證書和密鑰:
openssl req -x509 -nodes -days 999 -newkey rsa:2048 -keyout server.key -out server.crt -config req.conf
然後我在 Windows 上重新啟動了 chrome(我不敢相信在 2019 年仍然需要重新啟動程序才能使設置生效)。然後 Windows chrome 可以很好地辨識它。
但是在 android 上,我什至無法安裝此證書 - 它告訴我“安裝證書需要私鑰”。這更令人困惑。
- **Chrome 需要 SAN。**兩年來,Chrome 一直在證書中使用主題備用名稱 (SAN) 擴展,而不是上個世紀使用的主題中的 CommonName (CN) 屬性。(其他瀏覽器、所有 TTBOMK 以及今天幾乎所有的客戶端都更喜歡SAN,但如有必要會回退到主題 CN;Chrome 不會。)您不會告訴我們您的 OpenSSL 配置文件中有什麼,或者您使用什麼版本. OpenSSL 1.1.1 現在有一個命令行選項
-addext
,req -new -x509
但除此之外,您需要至少在邏輯上在配置文件中設置 SAN——儘管在 Unix 上,我相信WSL,您可以讓 shell 將該配置文件創建為自動臨時文件與<(commands)
(或在 zsh 中=(commands)
)。看:使用可在 Chrome 58 中執行的 openssl 生成自簽名證書
無法擺脫帶有自簽名證書的 chrome 中的“net::ERR_CERT_COMMON_NAME_INVALID”錯誤
https://security.stackexchange.com/questions/172440/generate-x509- err-cert-common-name-invalid
但請注意,這些 Q 是關於使用 SAN 條目類型 DNS 的域名證書;對於 IP 地址,您需要改用 IP。
- **省略埠。**即使對於仍然使用主題 CN 的瀏覽器/客戶端,它也應該是沒有埠的主機名或 IP 地址。(對於 SAN,您不會弄錯,因為 SAN 語法只允許 DNS:dommainname 或 IP:IPv4or8addr 而沒有埠。)
PS:8080 通常用於備用 HTTP,8443 用於備用 HTTPS。將 8080 用於 HTTPS 令人困惑。