Chrome瀏覽器的證書驗證規則比Edge和Firefox更嚴格,如果證書不包含SubjectAltName,Chrome會認為其不安全,所以自簽證書時要添加做額外配置來添加SubjectAltName。【這個問題困擾了我兩天,嘗試過很多網上的方法,都沒用,崩潰】
- 說明:
- 證書制作過程在Centos7環境進行,且使用Centos7自帶的OpenSSL工具。
- 不需要生成CA相關文件,直接生成服務端證書。
- 瀏覽器需要將生成的server.crt證書安裝到【受信人的根證書頒發機構】下。
- Nginx需要同時配置上server.crt和server.key兩個文件。
- 瀏覽器還要修改本地C:\Windows\System32\drivers\etc\hosts文件,配置證書所對應站點的域名,在瀏覽器本機的DNS映射。
建議先創建一個空目錄,作為證書制作空間,后續所有操作都在該目錄下進行。
- 首先新建一個小配置文件mySsl.conf,只包含如下內容:
[ req ]
default_bits = 4096
distinguished_name = req_distinguished_name
req_extensions = req_ext
[ req_distinguished_name ]
countryName = Country Name (2 letter code)
countryName_default = cn
stateOrProvinceName = State or Province Name (full name)
stateOrProvinceName_default = sc
localityName = Locality Name (eg, city)
localityName_default = cd
organizationName = Organization Name (eg, company)
organizationName_default = my
organizationalUnitName = Organizational Unit Name (eg, section)
organizationalUnitName_default = as
commonName = Common Name (e.g. server FQDN or YOUR name)
commonName_max = 64
commonName_default = yang.com
[ req_ext ]
subjectAltName = @alt_names
# 此段落標題的方括號兩邊【沒有空格】,只有同時配有IP和域名,才能在IP和域名訪問時都成功識別。
[alt_names]
IP.1 = 192.168.50.62
DNS.1 = yang.com
DNS.2 = yang.net
- 生成私鑰:
openssl genrsa -out server.key 4096
- 生成證書請求文件:
CSR是Certificate Signing Request的英文縮寫,即證書請求文件,也就是證書申請者在申請數字證書時由CSP(加密服務提供者)在生成私鑰的同時也生成證書請求文件,證書申請者只要把CSR文件提交給證書頒發機構后,證書頒發機構使用其根證書私鑰簽名就生成了證書公鑰文件,也就是頒發給用戶的證書。
openssl req -new -sha256 -out server.csr -key server.key -config mySsl.conf
這里會要求輸入一系列參數,可以選擇不填直接回車。
- 檢查證書申請文件內容:
openssl req -text -noout -in server.csr
應該可以看到:
X509v3 Subject Alternative Name:
IP Address:192.168.50.62, yang.com, DNS:yang.com, DNS:yang.net
- 利用證書請求文件生成證書,執行如下命令:
openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt -extensions req_ext -extfile mySsl.conf