今天继续介绍一个用来申请免费证书的工具,这个工具也是博主上周才接触到的,简单使用了下发现还不错,和上期介绍的acme.sh脚本使用起来一样方便,它也支持acme协议,有和acme.sh一样,它也支持很多的验证方式用来申请证书。而且在let's encrypt的官网上它还是官方首推的工具。下面就以和上期同样的DNS API为例使用certbot工具申请一个免费的泛域名证书。

1、 安装certbot

$ sudo apt-get update
$ sudo apt-get install software-properties-common
$ sudo add-apt-repository universe
$ sudo add-apt-repository ppa:certbot/certbot
$ sudo apt-get update
$ sudo apt-get install certbot python-certbot-nginx 

以上是博主在nginx+ubuntu16.04版本下的安装命令,如果你是使用的apache或者debian等其他的环境或系统,你可以到cerbot官网详细查看,certbot官网很贴心的给出了各种不同环境和系统下的安装说明。

2、 安装DNS插件

由于certbot不像acme脚本在安装好后就直接可以使用各家域名服务商的接口进行验证,它首先需要用户自行安装对应的DNS插件后才能使用DNS方式验证域名。

点击这个链接查看certbot工具支持的DNS插件列表。

从列表中我们可以看到certbot支持的域名服务商并不是很多,如果你使用的DNS服务商并不在这个列表中,可以去看下acme.sh支持的列表,后者支持的服务商还是非常多的。如果打算使用acme.sh脚本申请证书,可以查看博主的上一篇文章

这里以certbot的cloudflare插件为例介绍下安装步骤,根据官方的说明,可以使用官方的Docker镜像安装插件,但是博主在镜像的说明中并没有看到具体的使用步骤,如果大家知道的话可以在留言中告诉我,这里我使用了另外一个简单的安装方法:

pip install certbot-dns-cloudflare

如果你是其他的域名服务商则对应修改命令中的服务商名字即可

3、 安装证书

和acme.sh脚本一样,由于使用了DNS的验证方式,首先需要设置dns-cloudflare的API信息。

#任意位置新建一个存储账号信息的配置文件
touch /etc/letsencrypt/cloudflare.ini
vim /etc/letsencrypt/cloudflare.ini

#在配置文件中将cloudflare的API信息对应写入,下面是一个范例
dns_cloudflare_email = cloudflare@example.com
dns_cloudflare_api_key = 0123456789abcdef0123456789abcdef01234567

其中cloudflare的API_KEY可以在这个页面找到。

然后就可以输入下面的命令申请泛域名证书了:

certbot certonly \
   --server "https://acme-v02.api.letsencrypt.org/directory" \
   --dns-cloudflare \
   --dns-cloudflare-credentials /etc/letsencrypt/cloudflare.ini \
   -d sourismu.me -d *.sourismu.me

过程中会提示输入邮箱,同意TOS等操作,按照提示都操作完成后应该就能看到申请成功的提示信息了,信息中会包括证书的到期时间,证书和私钥的路径等。到这里整个证书的申请就完成了。接下来就是将申请好的证书放到相应的路径,重启nginx等后续操作了,博主就不再这里赘述了。

4、 证书的更新

certbot不像acme.sh脚本会在安装完成后自动添加和启用定时任务,它的证书更新需要我们自己手动执行对应的更新脚本,如果想实现自动更新,我们只需要简单写个脚本添加到crontab中即可

certbot更新证书的命令:

certbot renew

以nginx为例的证书更新脚本范例:

#新建一个脚本,名称随意
vim cerbot_renew.sh
#更新证书,并把最新的证书添加到对应的路径,路径根据实际情况进行修改,然后重启nginx
certbot renew
cp /etc/letsencrypt/live/sourismu.me/fullchain.pem /etc/ssl
cp /etc/letsencrypt/live/sourismu.me/privkey.pem /etc/ssl
service nginx restart

一月执行一次的crontab脚本范例:

0 6 1 * * bash /xxxx/xxxx/cerbot_renew.sh


版权声明:本文为原创文章,版权归 nicolaszf 所有,转载请注明出处!

本文链接:https://blog.sourismu.me/archives/26/