Let’s Encrypt is a new Certificate Authority: It’s free, automated, and open.
letsencrypt 是一个免费的 CA ,有了它之后,要使用 HTTPS 链接的门槛就被降低了很多,很多个人网站也都能很方便的用上高大上的 HTTPS 了。
为了顺应潮流,这个周末我把 github-comment 这个社会化评论系统也全面升级到 HTTPS 了。
想要使用 Let's Encrypt,必要的条件只有两个:
- 自己的服务器
- 自己的域名
首先在自己的服务器上下载 Let's Encrypt 的客户端
git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt
然后进入 /opt/letsencrypt
目录,执行 ./letsencrypt-auto certonly --standalone
(注意执行命令时80端口不能被占用,所以如果你的 nginx 开着的话,要先关掉)。
然后就是交互式的对话框,要你输入邮箱地址(接收过期提醒用),以及要启用的域名(用空格隔开),所有你填写的域名都要能指向执行命令的服务器(如果之前有 A record 是指向 github 的服务器的, 记得转回来)。这样你就会得到一组密钥,例如:
root@ubuntu:/var/www/songofcode.com# ls /etc/letsencrypt/live/songofcode.com/
cert.pem chain.pem fullchain.pem privkey.pem
下面就是对 nginx 的配置了,打开 nginx 的配置文件,加入下面的内容:
server {
listen 443 ssl;
server_name github-comment.songofcode.com;
ssl_certificate /etc/letsencrypt/live/songofcode.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/songofcode.com/privkey.pem;
location / {
proxy_pass http://127.0.0.1:5000;
}
}
重启 nginx,试着访问 https://github-comment.songofcode.com/, 证明 HTTPS 配置成功了。
原则上说对 HTTP 协议的加密不会影响到应用层,不过实际上从应用的角度说,不修改东西是不可能的,首先我把客户端中所有的 http 访问路径改为了 https,另外还有 github 的 application 处的回调也做了修改。网页处的调用本来就是 https 的 cdn,不过我把版本号升级了,所以网页端也要跟着改。
最后说下,对于我这样比较依赖 github 服务的人来说,这次改动的影响还是蛮大的,因为域名指向了自己的服务器,意味着不能使用 github 提供的 pages 服务了(当然用 github 的子域名还是可以访问的),这样一来项目主页和个人博客都需要自己去 host 到服务器上。没办法 HTTPS 是必然的趋势,github 不支持自定义域名的 HTTPS,那就只好放弃了。