前阵子换了新的域名www.kevin-wang.com,这次没有在阿里云上申请,而是用google domain申请的。理由很简单,因为google domain照顾了隐私,而阿里云上我申请的域名,赤裸裸的把我的信息暴露在互联网上供任何人参考……
用了google domain申请后,我就在考虑SSL证书的事情。之前我写过几篇文章记录了自己如何找SSL证书,如何把自己的服务器变成HTTPS ONLY的,支持HTTP/2等等,当时的结论是最简单的方法是在阿里云上一并申请,个人域名免费。
这次换到了Google domain,由于没用阿里云的东西,因此使用其域名服务也就变得不那么靠谱了。 查看Google的文档我发现他推荐Let’s Encrypt,也是免费的,而且支持自动renew。
Let’s Encrypt 是一家CA,我很惊讶自己为什么在之前的搜索中忽略掉了这个选项……它使用Certbot来验证并且申请你网站的证书,体验下来工作原理如下:
在你的服务器上安装Certbot后,Certbot将使用你网站的80端口(复用现有的,或者Certbot可以起一个临时的服务器运行80端口),来验证这个网站是否真实存在(通过下载临时文件之类的操作)。我的网站上80端口的信息会直接301重定向到HTTPS,在过程中导致多次失败。临时禁止了这个转换规则后得以成功。
然后Certbot申请并下载证书,证书的Expire Date很短,只有三个月。不过Certbot提供renew的命令,你可以把它放到crond脚本中定期运行即可。
Certbot支持多个插件也就是可以自动配置你的目标服务器。不过对于我这种已经在服务器上动过多出刀的同学来说,对于Certbot的需求仅仅是证书文件而已。因此我非常推荐使用其docker的版本,理由也很简单,你不需要按照它文档里写的一步步安装必要的dependencies。
命令大约如下:
docker run -it –rm –name certbot -v “<本地期望保存证书的目录>:/etc/letsencrypt” -v “/var/lib/letsencrypt:/var/lib/letsencrypt” -v “<本地的网站跟目录>:/root/blog” certbot/certbot certonly –webroot -w /root/blog -d www.kevin-wang.com -d kevin-wang.com
成功后,在你的目标目录下会产生一个叫live的文件夹,里面是你的域名,然后四个文件。其中你会用到的是fullchain.pem (也就是证书)和privkey.pem(也就是私钥)。将他们的路径放到网站的配置文件中即可。
Certbot也支持通配符域名,需要DNS TXT记录支持,本文不涉及。
Renew的时候,命令大约如下:
docker run -it –rm –name certbot -v “<本地保存证书的目录>:/etc/letsencrypt” -v “/var/lib/letsencrypt:/var/lib/letsencrypt” -v “<本地的网站跟目录>:/root/blog” certbot/certbot renew
在crond job里使用的时候增加 -q 参数(静默)。
大约就是这样。
