1、背景
本文適用於基於https(http+ssl)的網站通信、本地調試等,上線是請尋找免費 ssl證書申請。
本地調試過程中,一些特殊的場景需要我使用http+ssl通信,比如在Chrome中使用客戶端麥克風。
筆者起初使用以下一些命令,在linux、windows進行自簽名,但是沒能得到Chrome的信任,本地Chrome版本76.0
1. 使用openssl生成密鑰privkey.pem: openssl genrsa -out D:\develop\nginx-1.14.2\conf\privkey2.key 1024/2038 證書信息可以隨便填或者留空,只有Common Name要根據你的域名填寫。 2. 使用密鑰生成證書server.pem: openssl req -new -x509 -key D:\develop\nginx-1.14.2\conf\privkey2.key -out D:\develop\nginx-1.14.2\conf\server2.pem -days 365
典型的症狀就是報錯:
1、ERR_CERT_AUTHORITY_INVALID
2、Subject Alternative Name missing
如下圖:
后來在網上一篇文章《怎么讓 chrome 信任自簽名的 localhost 證書啊》找到了一些原因:
高版本的Chrome需要驗證SAN
1. 首先要看你的 chrome 報的自簽名證書是什么問題(不同錯誤提示,有不同的解決方法)
2. 要看你的 chrome 的版本號,從 58 版本開始,自簽證書就只認 SAN 不認 CommonName 了
3. 自簽證書里面設置的 SAN 是 ip 還是域名,目前 chrome 會認域名的,本地測試,建議改 host 來測
使用了mkcert生成證書,響應的工具需要到github下載,https://github.com/FiloSottile/mkcert/releases
下載 mkcert-vx.y.z-windows-amd64.exe
起初使用的命令如下
mkcert-v1.4.1-windows-amd64.exe www.aaa.com
同時也配置了本地dns(c:\windows\system32\drivers\etc\hosts)文件
172.16.3.50 www.aaa.com
然后執行
mkcert-v1.4.1-windows-amd64.exe -install
結果無效,Chrome還是報錯。
正確方法如下:
1、生成證書
mkcert-v1.4.1-windows-amd64.exe www.aaa.com aiPlatform.dev localhost 127.0.0.1 ::1 172.16.3.50
2、安裝證書
mkcert-v1.4.1-windows-amd64.exe -install
3、把mkcert-v1.4.1-windows-amd64.exe目錄中生成的證書www.aaa.com+5.pem和www.aaa.com+5-key.pem拷貝到nginx的目錄中,修改證書
修改證書
4、重啟nginx
nginx -s stop
nginx
經過以上配置,證書可以被信任了,也可以正常訪問wss://服務
以上地址,可以使用上面命令中使用到的幾個地址,包括虛擬域名解析
https://www.aaa.com:8443/asr_online_ws.html
cer證書轉jks
java下面筆者在本地調試的時候,由於使用的是自簽名證書,需要在調試過程中加載自簽名的信任證書。
java下面只人jks,所需需要進行證書轉換,命令如下
keytool -import -alias mycert -file www.xxx.com+5.pem -keystore D:\cert\www.xxx.com+5.jks
彈出的提示框輸入兩次changeit,然后輸入"是”,java代碼中在通信前設置證書
public static void main(String[] args) { System.setProperty("javax.net.ssl.trustStore","cert\\www.xxx.com+5.jks"); System.setProperty("javax.net.ssl.trustStorePassword", "changeit"); int length = args.length; if(length==0) { System.out.println("請填寫wav識別文件路徑"); return; } String WS_URL="wss://ai.xxx.cn:6002/wsapi/asrv2"; }
版權歸https://global.v2ex.com/t/365406及原作者所有
相關網址:
https://blog.filippo.io/mkcert-valid-https-certificates-for-localhost/