什么是HTTPS
关于HTTPS的概念,在《全站HTTPS来了》这篇文章已经有非常全面的描述,推荐细读。
Let’s Encrypt
最近突然想把自己的博客弄成HTTPS,也不是为了加强安全,只是喜欢折腾,而且感觉加个绿色小锁酷酷的。
HTTPS免费证书颁发机构有startSSL和letsencrypt,我使用的是letsencrypt。
安装certbot
Letsencrypt官方建议使用certbot作为ACME客户端。
我使用的是Nginx + CentOS 6
通过脚本安装certbot-auto:
1 | wget https://dl.eff.org/certbot-auto |
如果你使用的python版本是2.6的,那么你需要升级到2.7,至于升级方法请自行谷歌
配置
最开始我尝试用certbot推荐的方法进行配置,结果老是注册失败。
后来找到了Nginx介绍的配置方法(也就是下面讲到的方法)就OK了。
1. 创建配置文件
/etc/letsencrypt/configs/wuyanxin.com.conf
1 | # the domain we want to get the cert for; |
2. 配置nginx,让Let’s Encrypt可以访问到临时文件
加上这个location到你的nginx配置中
1 | server { |
验证配置,重启nginx
1 | $ sudo nginx -t && sudo nginx -s reload |
3. 请求证书
1 | $ ./certbot-auto --config /etc/letsencrypt/configs/wuyanxin.com.conf certonly |
4. 配置nginx 443端口指向证书
1 | server { |
配置http跳转到https
1 | server { |
重启Nginx
1 | $ sudo nginx -t && sudo nginx -s reload |
自动刷新证书
Let’s encrypt 的证书有效期是90天,所以我们应该在过期之前刷新证书。
准备如下脚本,保存到
renew_letsencrypt.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15#!/bin/sh
cd /opt/letsencrypt/
./certbot certonly --config /etc/letsencrypt/configs/my-domain.conf
if [ $? -ne 0 ]
then
ERRORLOG=`tail /var/log/letsencrypt/letsencrypt.log`
echo -e "The Let's Encrypt cert has not been renewed! \n \n" \
$ERRORLOG
else
nginx -s reload
fi
exit 0如果
/var/log/letsencrypt/
不存在就先创建允许
crontab -e
设置每两个月刷新一次1
0 0 1 JAN,MAR,MAY,JUL,SEP,NOV * /path/to/renew-letsencrypt.sh
总结
给自己的网站加上一把绿色小锁就是这么简单,这是我自己为网站上https时候的记录,有问题欢迎反馈。
另外,很多国内网站可能会接入“多说”的评论,因为多说评论使用的第三方头像为http的,这会导致你页面上的绿色小锁变成灰色。
不过已经有人提出了解决方案,参考这两篇文章: