这两天又开始折腾自己的博客网站,这个域名在name.com注册的,还赠送https证书。
折腾好久,才发现https红色的not secure问题原因很多,我这记录的只算其中一个了。
问题背景
折腾激活https证书的过程不多说了,激活之后,name.com提供了两个证书。
第1个是"Server Certificate",文件命名为:sanzhou.crt。
第2个是“CA Certificates INTERMEDIATE”,文件命名为:sanzhou_inter.crt
我安装时只是把第1个证书给安装上去,具体文件位置为:
/usr/local/nginx/sanzhou.crt
nginx.conf的相关配置为:
ssl_certificate /usr/local/nginx/sanzhou.crt;
刚开始用chrome打开没问题,过一会就变成了红色的“not secure"
在chrome的developer tools下打开security查看,看到的错误信息是:
This page is not secure(broker HTTPS).
Certificate - Missing
This site is missing a valid trusted certificate
(net:ERR_CERT_AUTHORITY_INVALID)
解决办法
经过多方查探,甚至用上了sslchecker这些工具网站,才知道自己这个证书有问题。
然后查了半天name.com的说明,半猜半蒙的折腾了下,总算搞定了。
具体办法如下:
1.服务器端
将sanzhou.crt和sanzhou_inter.crt放到一个文件夹下面,然后输入如下命令:
cat sanzhou.crt sanzhou_inter.crt >> sanzhou_all.crt
sudo cp -rv sanzhou_all.crt /usr/local/nginx/sanzhou.crt
sudo service nginx restart
2.浏览器端
打开chrome,清空所有历史数据,其实也可以在developer tools中单独清空某一个网站的数据。
然后再次打开sanzhou.live,红色的not secure没再出现,搞定。
更新ssl
一般一年给域名续费一次,同步更新一次ssl。
有几个注意的地方
- csr文件与key文件是一起生成的,其中csr文件只是生成crt文件的时候发生作用,后面就不用了
- key文件需要与生成的crt文件一起使用,nginx需要计算他们两个是否匹配,如果不匹配,nginx就启动不了。
- name.com下生成的crt文件按顺序一共3个,第1个是SERVER CERTIFICATE,第2个CA CERTIFICATES INTERMEDIATE,第3个是ROOT,最终用于nginx的crt文件是第1个与第2个合并到一起的crt文件。
- 如何检查key与crt文件是否匹配:
openssl x509 -noout -modulus -in sanzhou_all.crt | openssl md5
(stdin)= 703c4c5bb18161533d5a130ff899f1a9
openssl rsa -noout -modulus -in sanzhou.key | openssl md5
(stdin)= 703c4c5bb18161533d5a130ff899f1a9
如上所示,两个md5值相同,就没有问题,不然nginx启动不了,然后报错
nginx: [emerg] SSL_CTX_use_PrivateKey_file("/usr/local/nginx/sanzhou.key") failed (SSL: error:0B080074:x509 certificate routines:X509_check_private_key:key values mismatch)