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://www.v2ex.com/t/524671
https://blog.filippo.io/mkcert-valid-https-certificates-for-localhost/
https://github.com/FiloSottile/mkcert