博客使用http协议很长时间了,虽然没啥大问题,但每次chrome地址栏左侧都会显示个“不安全”的提示。今天弄了下服务器,现在已经支持https了,并且指定域名下的http请求都会转成https请求。具体操作记录如下。我的服务器是CentOS 7,代理用的是Nginx,如果你的也是,可以参考下面的操作记录。
目录
一、安装Let’s Encrypt客户端程序Certbot
sudo yum install epel-release sudo yum install certbot-nginx
二、安装Nginx(如果你没装过的话)
sudo yum install nginx sudo systemctl start nginx
安装完毕后的配置文件默认路径一般在/etc/nginx/nginx.conf,如果你是第一次装,具体如何配置网上有很多说明了,我的博客上好像以前也写过,自己搜下,这里不再赘述。
三、更新防火墙
sudo iptables -I INPUT -p tcp -m tcp --dport 80 -j ACCEPT sudo iptables -I INPUT -p tcp -m tcp --dport 443 -j ACCEPT
四、获取证书
sudo certbot --nginx -d orzzone.com -d www.orzzone.com -d book.orzzone.com
这里可以同时指定多个域名,每个域名前有个-d参数别漏了,上例中我就同时指定了3个。然后会有一些提示,自己阅读并做选择即可。里面会问是否自动将http请求重定向到https请求,看网上的说法最好选是,如果否的话,对百度来说可能是算多个站点有相同内容了,如果是这样的话,必然会有个站点的内容算重复内容了,不管是否是你原创的内容。事后我看了下nginx配置文件,其实这个重定向的逻辑它是自动加到nginx配置文件中的,所以后面想修改手动改下nginx配置文件即可。成功会看到类似下面这样的恭喜内容:
这时候你再通过https来访问你的网站,就可以正常访问了。
五、Nginx添加Diffie-Hellman参数
为提升网站的安全评级,还需要如此操作:
sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
然后打开nginx配置文件:
sudo vi /etc/nginx/nginx.conf
在nginx配置文件server块中添加ssl_dhparam参数配置:
ssl_dhparam /etc/ssl/certs/dhparam.pem;
检查下nginx配置的正确性:
sudo nginx -t
如果配置没问题,重启下nginx服务:
sudo systemctl reload nginx
六、定期更新证书
Let’s Encrypt的ssl证书目前的有效期是90天,据说还有人提议将有效期缩短为60天(出于安全考虑),所以我们可以设置一个定时任务,让服务器自动定期更新这个ssl证书。先执行下述命令:
sudo crontab -e
在上述命令自己打开的文件中添加下面这行代码:
15 3 28 * * /usr/bin/certbot renew --quiet
这样,每个月28号服务器会去自动更新一次ssl证书(参考资料链接的那篇文章里设置的是每天更新一次,我感觉没必要设置那么高的频率)。加完后的nginx局部配置见下图:
图中ssl_dhparam是我手动加的,其他的内容则是因为Certbot安装证书时我选择了自动将http请求转发为https请求由程序自动添加的重定向逻辑——可以看出来,这些重定向逻辑是针对指定的域名的,所以服务器上照样可以有其他的http请求存在,不影响平时测试一些功能。
七、不好的消息
我发现虽然支持了https,Chrome还是提示“不安全”。看了下Chrome的提示,应该是需要整站都换成https请求,包括图片。以后再弄。
参考资料:
1、https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-centos-7