使用Certbot申请SSL证书
阿里云的免费SSL证书的时长从一年下调到三个月了,而且还没得免费申请通配符证书,这样每三个月就得换一批证书,而且一个三级域名就要一个证书,有点太麻烦了,而且不够用。
因此一个不限量申请证书,可以续签的证书申请方式变成了刚需,网上冲浪刚刚好了解到Let’s Encrypt这个CA,正好解决了阿里云免费SSL证书不足的问题,让我们能够更加方便地为多个域名申请和续签SSL证书。
安装Certbot
先在服务器上下载安装对应版本的Certbot。
安装完毕后,运行certbot --version
检查安装是否成功。
申请证书
certbot申请证书使用certbot certonly(仅申请证书)命令,有两个模式:
standalone模式
需要关停服务器当前运行的web服务,腾出80端口给Certbot使用
webroot模式
会在当前web的80端口的静态资源文件夹创建Certbot的校验文件
为了不影响到网站的访问,这里我们选择使用webroot模式:
1 | certbot certonly --webroot |

运行命令后,certbot会提示输入要申请证书的域名,然后输入当前域名80端口对应的根目录即可,certbot会在目录下创建一个校验文件,供CA进行校验。
校验成功后就申请成功了。申请成功后,会显示申请到的证书存放的位置:

可以看到都是快捷方式来的,指向的是certbot目录下的archive文件夹。
里面的README文件的内容:
This directory contains your keys and certificates.
privkey.pem
: the private key for your certificate.(私钥)
fullchain.pem
: the certificate file used in most server software.(证书)
chain.pem
: used for OCSP stapling in Nginx >=1.3.7.(OCSP装订证书)
cert.pem
: will break many server configurations, and should not be used
without reading further documentation (see link below).(域名证书?应该没什么用,readme里也提示不应该用这个)WARNING: DO NOT MOVE OR RENAME THESE FILES!
Certbot expects these files to remain in this location in order
to function properly!
文件里提示我们也不要移动或删除这些文件,那就不用管了。
Nginx下使用SSL证书,只需要用到前两个文件就好了。我们把这两个文件路径复制下来,修改一下Nginx配置文件,找到对应的server,修改一下证书路径即可:
1 | ssl_certificate #certbot的证书路径; |
修改完成后重启Nginx,再打开网站,已经发现证书已经变成Let’s Encrypt的证书了:

certbot也已经启动了定时任务,会对证书自动续签。
申请通配符证书
前面我们申请的是普通证书,只能服务一个三级域名,如果三级域名很多,那申请的数量也很多。解决这个问题,我们需要申请通配符证书。
Let’s Encrypt对域名进行校验有两种模式,一种是http模式,一种是dns模式,http模式就是在网站根目录下生成校验文件,让CA请求来进行校验。dns模式就是添加一条TXT记录。
根据Certbot文档的说明:
This category of plugins automates obtaining a certificate by modifying DNS records to prove you have control over adomain. Doing domain validation in this way is the only way to obtain wildcard certificates from Let’sEncrypt.
为了证明你有对域名的所有控制权,因此DNS模式是唯一可以申请通配符证书的模式。(参考Certbot文档的Getting certificates (and choosing plugins)章节)。
申请通配符证书其实也很简单,使用下面的命令即可:
1 | certbot certonly -d "*.example.com" -d example.com --manual --preferred-challenges dns-01 # 注意要改成自己的域名 |
1 | certbot certonly -d "*.example.com" -d example.com --manual --preferred-challenges dns-01 |
最后的提示说明,manual模式申请的的证书是不会自动续签的,但是我们也可以钩子来实现续签。其实这里的申请也还算比较简单,每三个月重新申请一下就好了,也就几分钟的事。
申请成功后,和普通证书一样,替换一下证书路径,重启服务器就大功告成了。
问题
现在有一个问题,在证书还没到期前,重复运行上面的命令对证书进行重申,发现是不用进行添加DNS解析记录的,可以重申成功,可是理论上应该是需要更新解析记录的。具体情况怎么样还是三个月后再看吧。。。