前言:上一篇解决了后端证书问题,这一偏解决前端配置问题,完美解决谷歌浏览器的疑难杂症(其他浏览器没有问题。。。)如证书无效:
一、下载openssl:(window版本)
建议下载1.0.2版本,下载地址: http://slproweb.com/products/Win32OpenSSL.html
二、前期配置:
参考博客:https://blog.csdn.net/youyouyouyou44/article/details/82457461
由于Chrome 58 及以上版本只会使用 subjectAlternativeName 扩展程序(而不是 commonName)来匹配域名和网站证书。如果直接按照下面的步骤生成的ssl证书是不能直接在谷歌正常使用的,会说证书无效,并报错:NET::ERR_CERT_COMMON_NAME_INVALID 。
开始干活:
修改在openssl.cfg(该文件在bin文件中)(其他博客都是openssl.cnf文件,我下载的版本时1.0.2,文件是openssl.cfg)
确保req下存在以下2行(默认第一行是有的,第2行被注释了)
[ req ]
distinguished_name = req_distinguished_name
req_extensions = v3_req
确保req_distinguished_name下没有 0.xxx 的标签,有的话把0.xxx的0. 去掉
[ req_distinguished_name ]
countryName = Country Name (2 letter code)
countryName_default = CN
stateOrProvinceName = State or Province Name (full name)
stateOrProvinceName_default = ShangHai
localityName = Locality Name (eg, city)
localityName_default = ShangHai
organizationalUnitName = Organizational Unit Name (eg, section)
organizationalUnitName_default = Domain Control Validated
commonName = Internet Widgits Ltd
commonName_max = 64
新增最后一行内容 subjectAltName = @alt_names(前2行默认存在)
[ v3_req ]
# Extensions to add to a certificate request
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names
新增 alt_names,注意括号前后的空格,DNS.x 的数量可以自己加
[ alt_names ]
DNS = localhost
IP = 127.0.0.1
针对以上特别说明:
1、如果有绑定了ip的域名,则DNS = 域名;且IP不需要配置;
2、如果只有ip,没有域名,则,一定要配置IP = 你自己前端地址的ip,且,DNS最好配置成localhost,因为测试过配置类似于www.my.com形式的假域名,当你生成证书后,访问系统会报错进不去系统的;
3、当你在生成证书时会填写Common Name,此时,就填写你配置的其中一个DNS,如我填写的是:localhost
接下来还需要准备的是:
CSR文件必须有CA的签名才可形成证书.可将此文件发送到verisign等地方由它验证,要交一大笔钱,何不自己做CA呢.
1、在bin目录下新建目录 demoCA、demoCA下级新建certs、newcerts两个目录
2、在demoCA建立一个空文件 index.txt
3、在demoCA建立一个文本文件 serial, 没有扩展名,内容是一个合法的16进制数字,例如 0000
三、开始制作证书:
1、生成私钥(key文件):
genrsa -out server.key 2048
2、生成csr文件:
req -new -key server.key -out server.csr -config openssl.cfg
3、生成ca.key并自签署:
req -new -x509 -days 3650 -keyout ca.key -out ca.crt -config openssl.cfg
4、用生成的CA的证书为刚才生成的server.csr文件签名:
ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key -extensions v3_req -config openssl.cfg
5、将server.key转换成server.pem
rsa -in server.key -out server.pem
四、node.js中进行证书配置:
var options = {
key: fs.readFileSync('./ssl/server.pem'), //私匙
cert: fs.readFileSync('./ssl/server.crt'),
ca: fs.readFileSync('./ssl/ca.crt'),
auth:"1CUI"
};
五、将ca.crt证书导入到浏览器的“受信任的根证书颁发机构”中即可;
六:最终效果:url栏目中最终是一把锁的标志,代表你证书生效了,再也不是“不安全”的提示了