今晚一回来就看到 Google Search Console 给我发了封邮件说我站点上的 SSL 证书过期了我上去一看还真是这张我从 Andy 手里买来的通配符证书已经在昨天失效了

时间也是过得忒快啊转眼间一年就过去了我也成为了苦逼的高三党真是惨得不行 ( _ゝ)

不过正好我从 之前就一直在关注 Lets Encrypt 这个项目了这次正好试试看它好不好用

首先先是去查看一下它官网上的文档毕竟网上那些教程啊啥啥的可能已经过期了所以还是官方文档靠谱然后我们可以看到官方的 Getting Started 里是大力推荐 Certbot 这个自动化工具来签发证书的

我们在 Certbot 的站点上选择好我们的 Web Server 和操作系统版本后就可以看到详细些的教程了按照它上面所写的一般就可以正常使用了如果你看不懂鹰文的话可以去找找其他人写的中文教程


下面把一些需要注意的地方记录一下

注意 certonly 参数

如果不带参数地直接运行 certbot-auto 这个脚本的话它是需要一个 installer 的如果你懒得折腾这玩意就加上 certonly 参数吧这样脚本就会只会在 /etc/letsencrypt/live/ 目录下生成对应证书文件了然后你只需要在你的各站点 Nginx 配置中修改 ssl 证书目录就好了

注意让 Nginx 允许访问 .well-known 目录

我安装的 Nginx OneinStack默认是不允许访问 . 开头的文件和目录的估计其他 lnmp 包也是这样然而 ACME 验证你对域名的所有权的方式是通过访问 http://www.prinzeugen.net/.well-known/acme-challenge/blablabla 这个 URL 来实现的所以如果你的 Nginx 不允许访问这个目录的话就 GG 了

解决方法就是在你的 Nginx 配置里加上这么一段

location /.well-known/acme-challenge/ {
    allow all;
}

这个目录下的东西会在验证完毕后被自动删除所以不必担心安全问题

一次签发多个域名时需要注意的

因为我有好几个域名需要签发 SSL 证书但是每个域名的 webroot 是不一样的这就可能导致我们需要一条一条这样运行

./certbot-auto certonly --webroot -w /home/wwwroot/prinzeugen.net -d prinzeugen.net
./certbot-auto certonly --webroot -w /home/wwwroot/work.prinzeugen.net -d work.prinzeugen.net

或者把所有的 -w xxx -d xxx 写在一行里不过也还是一样的麻烦这咋行

还记得我们上面修改过的 Nginx 配置吗我们来给它做点小手脚

location /.well-known/acme-challenge/ {
    root /home/wwwroot/prinzeugen.net;
    allow all;
}

现在我们只需要指定一次 webroot 就好啦因为所有域名的上对于这个文件的请求都会访问到我们所设置的统一的 root

现在我们只需要这样写

./certbot-auto certonly --webroot -w /home/wwwroot/prinzeugen.net -d prinzeugen.net -d work.prinzeugen.net

就可以一次性签发多个域名的证书啦~ lol


最后愿你我都能享受到安全的互联网 :)