Skip to content

使用Certbot申请免费泛域名证书

环境

  1. 可操作web容器的服务器;
  2. certbot客户端;
  3. web容器(Nginx);
  4. 可修改DNS解析记录的域名;

过程

1. 安装certbot和阿里云DNS插件

安装步骤在certbot的官网上有,而且很详细。但最大的问题是,官网上的安装方法要求使用snapd,而七牛云服务器(实际上是阿里云服务器)并不支持snapd,所以需要使用yum安装。

1.1 安装手动申请证书所需工具

shell
yum install certbot

1.2 安装自动续期证书所需工具

shell
yum install certbot python3-certbot-nginx
pip3 install certbot-dns-aliyun
pip3 install certbot-nginx

2. 申请证书

2.1 手动申请证书

shell
certbot -d *.sunxiaolong.net -d sunxiaolong.net --manual certonly

这个--manual参数很重要,如果没有这个参数,就必须得用dns插件了~
随后会有提示,给域名添加一个TXT解析,按照提示去域名解析控制台添加对应记录。这里一定要注意这个解析记录不要区分大陆还是海外线路,否则可能会失败。
解析记录添加完成后,回到命令行按下回车键。
证书和私钥文件会保存到/etc/letsenctypt/live下,命令行上有回显。

2.2 自动申请证书

  1. 将阿里云DNS的key写到本地,格式如下:
properties
dns_aliyun_access_key=*******
dns_aliyun_access_key_secret=******

随后保存到服务器上,如/opt/cert/aliyun-dns.conf。access_key和access_key_secret是阿里云的多用户访问控制中相应用户的key和secret。 2. 签发证书

shell
certbot certonly --authenticator=dns-aliyun --dns-aliyun-credentials='/opt/cert/aliyun-dns.conf' -d "*.sunxiaolong.net,sunxiaolong.net"

然后就签发成功了~证书位置可以看回显,确认配置没错之后,reload一下nginx就可以了。

3. 修改nginx配置

将nginx配置中对应域名的证书和私钥文件路径指定到certbot回显的路径上。

4. reload nginx

重新加载nginx即可生效

shell
$NGINX_HOME/sbin/nginx -s reload

5. 验证是否生效

重新打开对应的HTTPS站点,不再提示证书不安全,且证书过期时间和certbot命令行回显能对应上即为成功。

6. 配置自动续期

6.1 手动续期

待证书要过期,执行certbot renew,再reload nginx即可。

6.2 自动续期

  1. 编辑crontab
shell
crontab -e

添加此记录,0 0 1 * * /root/renew-cert.sh,表示每月1日0点执行续期脚本。
2. 编写续期脚本 /root/renew-cert.sh的内容如下:

shell
#!/bin/bash
certbot certonly -n --authenticator=dns-aliyun --dns-aliyun-credentials='/opt/cert/aliyun-dns.conf' -d "*.sunxiaolong.net,sunxiaolong.net"
nginx -s reload
  1. 重新加载crond服务。
shell
service crond reload

完结~