HTTP 协议传输的数据都是不加密的。想象一下,你访问某个网站,当数据经过路由器、宽带网关,以及某墙的时候都是完全可见的,是不是有种裸奔的感觉?为网站启用 HTTPS 支持可以说是大势所趋,在某国日益倒车的互联网环境下更是如此。
第零步是选择一个靠谱的 CA(Certificate Authority,数字证书认证中心)。你以为所有的认证中心都是中立可信的吗?并不是的,比如此前频频爆出丑闻的 WoSign 和 StarCom,这两家认证中心已经被 Google Chrome 等多款浏览器默认设置为不信任。当然你更不能自己做裁判,像 12306.cn 一样给自己颁发证书。这里推荐 Let's Encrypt,这家成立于 2016 年、由互联网安全研究小组(ISRG)主导的机构致力于向用户提供免费的、自动化管理的证书方案。
Let's Encrypt 允许使用实现了 ACME 协议的客户端完成诸如证书获取、认证、签名、安装以及续签等步骤。官方推荐使用 Certbot。下面,我们以 Ubuntu 16.04 & Nginx 为例,说明如何使用 Certbot 快速地为网站启用 HTTPS 支持。
第一步:安装 Certbot
在系统中添加 Certbot 的 PPA,然后使用 apt
安装 Certbot。
$ sudo apt-get update
$ sudo apt-get install software-properties-common
$ sudo add-apt-repository ppa:certbot/certbot
$ sudo apt-get update
$ sudo apt-get install python-certbot-nginx
第二步:安装证书
运行下面的命令获取证书,这个命令同时会为你更改 Nginx 配置文件(并且重载 Nginx):
$ sudo certbot --nginx
如果你想自己修改 Nginx 配置文件,可以使用 certonly
选项:
$ sudo certbot --nginx certonly
第三步:自动续签
Let's Encrypt 签发的证书,有效期是 90 天。你可以使用下面的命令对证书进行续签:
$ sudo certbot renew --dry-run
当然,创建一个 Cron Job 周期性地自动续签是一个更省事的方案。
现在,在浏览器中打开你的网站,你就能从地址栏看到令人安心的绿色小锁了。除了本文介绍的方法,acme.sh 这个项目也提供了一种非常易用的方案。想要了解更多,请参考这篇文章。