给网站上HTTPS
给网站加HTTPS已成一种趋势,新版Chrome访问未加密的站点会直接提示不安全。总提示不安全,另外加S的确可以加强网站信息传输的安全,so有必要搞一搞,这里以我自己的站点为例,介绍下配置过程。
Let’s Encrypt证书
国内阿里云之前提供赛门铁克免费证书,但现在没了,好消息是Let’s Encrypt有免费SSL证书,不过证书有效期只有90天,别担心,有办法解决自动更新证书问题。
配置步骤
安装 acme.sh
1 | curl https://get.acme.sh | sh |
NGINX配置,特定路径支持对外访问
在生成证书时,CA会check网站下.well-known/acme-challenge/
的文件来完成证书发放,所以我们需要该路径下文件支持对外访问。
以下为NGINX容器下配置。
- 当最终CA完成check后,wellknow文件夹下是会被删除,所以我们看不到,但是还是保持该路径支持访问,因为证书更新还需要保持能够请求
1 | location ^~ /.well-known/acme-challenge/ { |
生成证书
1 | acme.sh --issue -d tool.alanhe.me --webroot /var/www/toolkit |
copy 证书到 NGINX下
注意
/etc/nginx/ssl
文件夹可能不存在,如果没有需要手动创建mkdir /etc/nginx/ssl
- 执行下面命令,证书是自动copy到ssl,不需要手动去做
可以执行证书命令
1 | acme.sh --installcert -d tool.alanhe.me --key-file /etc/nginx/ssl/tool.alanhe.me.key --fullchain-file /etc/nginx/ssl/fullchain.cer --reloadcmd "service nginx force-reload" |
没意外的话,终端会显示OK,接下来就是NGINX配置下证书即可。
NGINX证书配置
1 | server { |
配置完成后,执行nginx -t
,如果提示OK,则重启服务,访问https://tool.alanhe.me
,地址栏出现了小绿锁,完美!
证书更新?
安装acme.sh之后,程序会自动创建了cronjob,定期会Check证书,如果过期会自动更新,所以无需担心。
当我们执行crontab -e
会看到的确存在这样一个任务
1 | 16 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null |
写在最后
以上即是完整的配置过程,但每次部署难免麻烦,比如服务器更换等,于是有了更好的方式即将整套配置进行docker配置,这样每次部署只需要拉取docker配置文件,run即可。这里贴下我的博客部署配置,仅供参考
HTTPS安全在哪-题外话
HTTPS相对HTTP是安全了些,为什么安全,因为HTTPS对传输数据进行了加密。我们都知道TCP连接是3次握手,而建立在TCP之上的HTTP+TLS/SSL是7次握手。因为TSL连接是4次握手(双方发送机密信息,双方确认)。
上图来自李兵老师的《浏览器工作原理与实践》
需要注意HTTPS的安全只是相对安全依然有漏洞,比如利用中间人攻击我们就可以破译部分的HTTPS站点数据