certbot-auto 生成 https 通配符证书
使用 certbot 为网站签发 letencrypt 的 HTTPS 通配符证书
在CentOS7上安装 Certbot 有三种方式:
- 使用 Certbot 官方提供的对应平台的 RPM 包安装
- 使用 Certbot 官方的提供的 certbot-auto 安装
- 使用 pip 安装 Certbot,因为 Certbot 是 Python 程序
安装
安装 certbot
获取安装脚本
shell 1
curl -o /usr/local/bin/certbot-auto https://dl.eff.org/certbot-auto
给脚本赋权
shell 1
chmod a+x /usr/local/bin/certbot-auto
安装 certbot hook 脚本
在使用 certbot 时自动给 letencrypt
通配符证书自动续期(renew),提供了阿里云、腾讯云、华为云、GoDaddy等服务商的API接口接入。
克隆 certbot
shell 1
2
3
4cd /opt/
git clone https://github.com/ywdblog/certbot-letencrypt-wildcardcertificates-alydns-au certbot-letencrypt
cd certbot-letencrypt
chmod 0777 au.sh配置
domain.ini
如果 domain.ini 文件没有你的根域名,请自行添加。
DNS API 密钥:
这个 API 密钥什么意思呢?由于需要通过 API 操作阿里云 DNS、腾讯云 DNS 的记录,所以需要去域名服务商那儿获取 API 密钥,然后配置在
au.sh
文件中:| 云厂商 | API 配置 | 备注 |
| —- | —- | —- |
| 阿里云 |ALY_KEY
和ALY_TOKEN
| API key 和 Secrec 官方申请文档 |
| 腾讯云 |TXY_KEY
和TXY_TOKEN
| API 密钥官方申请文档 |
| 华为云 |HWY_KEY
和HWY_TOKEN
| API 密钥官方申请文档 |
| GoDaddy |GODADDY_KEY
和GODADDY_TOKEN
| API 密钥官方申请文档 |
申请证书
测试:
shell 1
2
3certbot-auto certonly -d *.example.com --manual --preferred-challenges \
dns --dry-run --manual-auth-hook "<脚本目录>/au.sh python aly add" \
--manual-cleanup-hook "<脚本目录>/au.sh python aly clean"示例:
/opt/certbot-letencrypt 1
2
3
4certbot-auto certonly -d *.example.com --manual --preferred-challenges \
dns --dry-run \
--manual-auth-hook "/opt/certbot-letencrypt/au.sh python aly add" \
--manual-cleanup-hook "/opt/certbot-letencrypt/au.sh python aly clean"申请
确认无误后,实际运行(去除 —dry-run 参数):
shell 1
2
3
4certbot-auto certonly -d *.example.com --manual \
--preferred-challenges dns \
--manual-auth-hook "<脚本目录>/au.sh python aly add" \
--manual-cleanup-hook "<脚本目录>/au.sh python aly clean"示例:
/opt/certbot-letencrypt 1
2
3
4certbot-auto certonly -d *.example.com --manual \
--preferred-challenges dns \
--manual-auth-hook "/opt/certbot-letencrypt/au.sh python aly add" \
--manual-cleanup-hook "/opt/certbot-letencrypt/au.sh python aly clean"
续期证书
对机器上所有证书 renew
shell 1
2
3certbot-auto renew --manual --preferred-challenges \
dns --manual-auth-hook "<脚本目录>/au.sh python aly add" \
--manual-cleanup-hook "<脚本目录>/au.sh python aly clean"示例:
/opt/certbot-letencrypt 1
2
3certbot-auto renew --manual --preferred-challenges \
dns --manual-auth-hook "/opt/certbot-letencrypt/au.sh python aly add" \
--manual-cleanup-hook "/opt/certbot-letencrypt/au.sh python aly clean"对某一张证书进行续期
查看已有证书信息
shell 1
certbot-auto certificates
记住证书名,比如 simplehttps.com,然后运行下列命令 renew:
shell 1
2
3certbot-auto renew --cert-name simplehttps.com \
--manual-auth-hook "<脚本目录>/au.sh python aly add" \
--manual-cleanup-hook "<脚本目录>/au.sh python aly clean"示例:
shell 1
2
3certbot-auto renew --cert-name simplehttps.com \
--manual-auth-hook "/opt/certbot-letencrypt/au.sh python aly add" \
--manual-cleanup-hook "/opt/certbot-letencrypt/au.sh python aly clean"
加入 crontab
编辑定时任务工作表
1 | crontab -e |
加入如下命令
由于证书有效期<30天才会renew,所以crontab可以配置为1天或1周
1 | 1 1 */1 * * root certbot-auto renew --manual --preferred-challenges \ |
配置 Nginx SSL
根据上述第三步,申请证书成功后得到的文件路径
证书存放路径:/etc/letsencrypt/live/example.com/fullchain.pem
私钥存放路径:/etc/letsencrypt/live/example.com/privkey.pem
根据域名不同存放于不同域名同名文件路径下。
创建 nginx 代码片段存放路径
shell 1
mkdir -p /etc/nginx/snippets/
添加/编辑域名同名的配置文件
shell 1
vim /etc/nginx/snippets/ssl-example.com.conf
内容如下:
/etc/nginx/snippets/ssl-example.com.conf 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;
ssl_protocols TLSv1.2;
ssl_ciphers EECDH+AESGCM:EECDH+AES;
ssl_ecdh_curve secp384r1;
ssl_prefer_server_ciphers on;
ssl_stapling on;
ssl_stapling_verify on;
add_header Strict-Transport-Security "max-age=15768000; includeSubdomains; preload";
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;在需要使用 SSL 的网站配置文件中 SSL 部分server 中添加如下一行配置
/etc/nginx/conf.d/example.conf 1
2
3
4
5
6
7
8
9
10...
server {
listen 443 ssl;
server_name www.example.com;
client_max_body_size 2048m;
# 引用ssl代码段
include snippets/ssl-example.com.conf;
...
}
- 本文标题:certbot-auto 生成 https 通配符证书
- 本文作者:akiya
- 本文链接:https://little-star.love/posts/c2464ef6/
- 版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!