Let’s encrypt 申请免费的通配符证书
Certbot 可以获取 Let’s Encrypt 的通配符证书(Wildcard Certificate),但需要使用 DNS-01 验证方式(文件验证无法适用通配符)
匹配域名:
匹配所有子域名:例如 *.example.com可以用于 blog.example.com、api.example.com、dev.example.com
不匹配主域名:*.example.com不包含 example.com,如果需要主域名,必须单独添加(-d example.com -d *.example.com)
前提条件:
- 必须使用DNS-01 验证(通过添加 DNS TXT 记录验证域名所有权)
- 需要域名提供商支持 API 自动更新 DNS(如 Cloudflare、AWS Route53、Aliyun DNS 等),或者手动添加 TXT 记录
- Certbot版本 ≥ 0.22.0(较新版本支持通配符)
手动配置DNS步骤:
手动添加DNS适合于域名和你要解析的云厂商不一样的情况,比如我的域名是在京东云购买的,但是certbot只支持阿里云的DNS插件,此时是不能使用自动DNS解析的,只有你的域名在你连接的DNS插件对应的阿里云账号上的时候才可以使用自动解析
获取通配符证书命令,如下:
#通配符不匹配主域名,因此ywabcd.cn要单独使用-d来申请证书
certbot certonly --manual --preferred-challenges dns -d "example.com" -d "*.example.com"
会提示需要去域名控制台添加TXT的解析记录
解析需要几分钟才能生效,此时先不要回车下一步,以免没检测到生效导致失败,此时通过命令先检测下解析是否成功,如果成功了在继续执行证书步骤,如下:
dig +short TXT _acme-challenge.ywdevops.cn @8.8.8.8
查看获取的证书中是否包含多个域名,可以使用如下命令:
openssl x509 -in fullchain1.pem -noout -text | grep -A1 "Subject Alternative Name"
自动DNS解析步骤
1.使用 Certbot 的 DNS 插件(推荐,自动更新 DNS),这里演示使用阿里云DNS插件,安装插件,如下:
python3 -m venv /data/pyproject/test //创建虚拟环境,跟外面隔离开
source /data/pyproject/test/bin/activate //激活
pip3 install certbot certbot-dns-aliyun //安装certbot和插件
certbot plugins //验证插件
2.配置阿里云 AccessKey 凭证,如下:
- 登录阿里云账户,创建RAM用户
- 创建AccessKey ID 和 AccessKey Secret,保存好
- 给用户授予AliyunDNSFullAccess策略
3.在服务器上创建配置文件/etc/letsencrypt/aliyun.ini,如下:
touch /etc/letsencrypt/aliyun.ini
chmod 600 aliyun.ini #权限控制在600
添加配置内容到aliyun.ini中,如下:
dns_aliyun_access_key = LTAI5tAoMeLxFa5boBcjWJs
dns_aliyun_access_key_secret = MP9CGqB98zaHN0t0BOpW9G2cMhfBAw
4.使用命令获取证书 , 如下:
certbot certonly \
--authenticator dns-aliyun \
--dns-aliyun-credentials /etc/letsencrypt/aliyun.ini \
--dns-aliyun-propagation-seconds 60 \
-d "*.example.com" \
-d example.com \
--non-interactive \
--agree-tos \
-m admin@example.com
登录阿里云,可以看到已经自动添加了DNS解析
再等一会就可以看到终端提示证书签发成功
注: 要获取证书的域名要跟aliyun.ini中配置AccessKeyID和AccessKeySecret所对应的阿里云账号在一起才能使用自动DNS解析
oxxo