但!是!各位看官先别急着去实践,以上证书我在Chrome55下测试没问题,但是Chrome61下测试提示Subject Alternative Name missing错误:
The certificate for this site does not contain a Subject Alternative Name extension containing a domain name or IP address.提示必须指定DNS Name或者IP地址,而指定这个必须要用v3的证书。生成v3证书只需要比上面多加2个参数-extfile openssl.cnf -extensions v3_req,但是多了一个额外的配置文件,这个文件里面可以填很多东西(完整配置文件参考这里),我们这里仅仅需要指定subjectAltName即可。
先准备一个名为openssl.cnf的文件,内容如下:
[v3_req] subjectAltName = @alt_names [alt_names] DNS.1 = localhost.com DNS.2 = DNS.3 = #IP.1 = 127.0.0.1解释一下,这里的alt_names指的是最终可以访问的域名或者IP,所以,其实一个证书是可以多个网站同时使用的。被访问域名只要满足DNS和IP中的一个,其证书就是合法的。
然后再来重新生成证书,为了对大家产生误导,我们再来一遍完整的过程:
# 生成服务端私钥 openssl genrsa -out server.key 1024 # 生成证书请求文件 openssl req -new -key server.key -out server.csr # 生成最终证书文件,-day指定证书有效期 openssl x509 -req -days 365 -sha256 -CA ca.crt -CAkey ca.key -CAcreateserial -extfile openssl.cnf -extensions v3_req -in server.csr -out server.crt
双击生成的证书可以看到如下内容:
3.1.2.4. 生成客户端证书如果需要实现HTTPS双向认证,还要按照上述服务端一模一样的操作再生成一个client.crt和client.key,这里我们就不重述了,90%的场景都是不需要双向认证的。
3.1.2.5. 导入证书上述步骤执行完之后生成了如下文件:
我们只需要双击ca.crt导入这个自制根证书即可,以后只要是利用这个证书生成证书浏览器都会认为是可信任的,这让我想起了12306干的勾当,如果你能把你这个根证书推广到全世界的电脑和手机,那么你也可以成立一家CA公司专门卖证书了,哈哈。
导入的时候注意证书存储位置:
由于这是很敏感的操作,所以操作系统一定会有警告:
3.1.3. 引申话题:12306为啥不申请证书这个标题在大约在半个月前还是正确的,但是,就在大约半个月前,12306终于买证书了!!!倔强的12306坚持了这么多年推广自己的证书,终于还是妥协了:
我们还是回到12306没买证书以前。我们先回忆一下12306的做法,首页不是https,它在首页明显位置放置了一个证书下载链接让我们去下载,真正的购票页面才开启了https,没安装这个证书浏览器就会各种警告。
有很多人都在网上问,12306为啥没买证书呢?是不舍得花这个钱吗?当然不是,堂堂铁老大再怎么亏损多少个亿,这点钱还是出得起的,12306无非就是想利用自己绝对垄断地位推广自己的SRCA证书而已(12306有一个中铁数字证书认证中心),至于推广证书有什么用,这不用我多说吧。
摘抄一段网友的话:
合法证书对于SSL加密通信和通信完整性保护的意义就是合格钥匙之于锁的关系,你把山寨CA请到你家浏览器的受信任CA列表,就相当于你从大马路上捡把插着万能钥匙的锁回家装大门上。门上确实有锁,没钥匙确实进不来你家偷窥(机密性保护)和盗窃(完整性保护),但有万能钥匙的人呢?
3.2. 第二步,nginx的ssl模块安装 3.2.1. Windows系统Windows平台的nginx.exe一般内置了ssl模块,无需额外单独安装。
3.2.2. Linux系统linux系统的nginx一般都是编译安装的,如果你第一次安装nginx的时候已经安装了ssl模块的话,这一步可以跳过,如果没有,继续往下看。