acme.sh + cloudflare 获取泛域名证书
配置 cloudflare
在域名的 dns 记录里加上
类型 | 名称 | 内容 |
---|---|---|
A | * | xxx.xxx.xxx.xxx |
acme.sh
安装
cd ~
# 把 acme.sh 安装到 home 目录下
curl https://get.acme.sh
# 进入 .acme.sh 目录
cd ~/.acme.sh
注册 ZeroSSL.com
注意:自
v3
以来, zhucacme.sh
使用 Zerossl 作为默认证书颁发机构 (CA)。在颁发新证书之前,需要注册帐户(一次性)
https://github.com/acmesh-official/acme.sh/wiki/Change-default-CA-to-ZeroSSL
./acme.sh --register-account -m myemail@example.com --server zerossl
生成证书
准备
这里使用的是 dns 生成,查看对应的 dns 配置
https://github.com/acmesh-official/acme.sh/blob/master/dnsapi/README.md
https://github.com/acmesh-official/acme.sh/wiki/dnsapi
查看 cf 配置 https://github.com/acmesh-official/acme.sh/blob/master/dnsapi/dns_cf.sh
#!/usr/bin/env sh
#CF_Key="sdfsdfsdfljlbjkljlkjsdfoiwje"
#CF_Email="xxxx@sss.com"
#CF_Token="xxxx"
#CF_Account_ID="xxxx"
#CF_Zone_ID="xxxx"
...
配置环境变量
# 登录,访问 https://dash.cloudflare.com/profile/api-tokens
# Global API Key
export CF_Key="sdfsdfsdfljlbjkljlkjsdfoiwje"
# 账号邮箱
export CF_Email="xxxx@sss.com"
# 创建令牌,选择编辑区域 DNS
export CF_Token="xxxx"
# 在 cf 域名概述下
export CF_Account_ID="xxxx"
export CF_Zone_ID="xxxx"
生成
./acme.sh --issue --dns dns_cf -d xxx.com -d *.xxx.com
成功后会在 .acme.sh/xxx.com_ecc
下生成证书
# xxx.com_ecc/ca.cer
# xxx.com_ecc/fullchain.cer
# xxx.com_ecc/xxx.com.cer
# xxx.com_ecc/xxx.com.conf
# xxx.com_ecc/xxx.com.csr
# xxx.com_ecc/xxx.com.csr.conf
# xxx.com_ecc/xxx.com.key
acme.sh 会监听证书过期,过期查询生成
注意, 无论是 apache 还是 nginx 模式, acme.sh在完成验证之后, 会恢复到之前的状态, 都不会私自更改你本身的配置. 好处是你不用担心配置被搞坏, 也有一个缺点, 你需要自己配置 ssl 的配置, 否则只能成功生成证书, 你的网站还是无法访问https. 但是为了安全, 你还是自己手动改配置吧.
配置 nginx
将 xxx.com.cer
,xxx.com.key
复制出来,这边是复制到 /etc/nginx/ssl
# 创建 xxx.com.conf
ssl on;
ssl_certificate ssl/xxx.com.cer;
ssl_certificate_key ssl/xxx.com.key;
// 配置到 server 即可
server {
listen 443;
include ssl/xxx.com.conf;
...
}
配置 csr 到 cf
- 到 cf 的 SSL/TLS -> 源服务器
- 创建证书
- 把上述生成的 xxx.com.csr 内容复制证书内
- SSL/TLS 加密模式,设置为完全
完成
注意,生成的证书一般情况下是 90 天,过期需要重新配置一下