Linux中申请Let’s Encrypt通配符证书

  1. 使用的工具,使用certbot申请并使用acme-dns-client作为manual-auth-hook执行更新证书的验证工作。
  • 安装certbot:在不同的Linux发行版中可以使用apt install certbot, yum install epel-release 之后再yum install certbot以及 dnf install certbot
  • 安装certbot之后会有以下提示,自动证书更新服务没有启动,但是新版本的话当使用certbot申请证书后,certbot-renew.timer服务会自动开启

###Certbot auto renewal timer is not started by default.

###Run ‘systemctl start certbot-renew.timer’ to enable automatic renewals.

systemctl status certbot-renew.timer

  • 使用acme-dns-client注册需要申请证书的域名,每一个执行一次并按提示修改DNS记录,因为CAA记录验证属于有风险操作所以 {必选参数 –dangerous},例子如下

acme-dns-client register -d cn-it.org -s https://auth.acme-dns.io –dangerous

acme-dns-client register -d 51azure.com -s https://auth.acme-dns.io –dangerous

acme-dns-client register -d yuushatech.com -s https://auth.acme-dns.io –dangerous

acme-dns-client register -d maoutech.com -s https://auth.acme-dns.io –dangerous

acme-dns-client register -d 5i818.com -s https://auth.acme-dns.io –dangerous

acme-dns-client register -d 51aws.com -s https://auth.acme-dns.io –dangerous

每一次命令输入完都会有一个通过DNS验证域名所有权的过程,需要添加CNAME记录,如下

_acme-challenge.cn-it.org.     IN      CNAME   6185f842-efb2-4c65-9813-a0c410ea36ac.auth.acme-dns.io

  • 在验证完CNAME记录之后会提示验证CAA记录,需要在DNS中添加CAA记录

caa         @            letsencrypt.org 0 issue  (单域名证书验证记录)

caa         @            letsencrypt.org 0 issuewild (通配符证书验证记录)

阿里云DNS注意事项,DNS记录值中的 “letsencrypt.org” 一定要有””

  • 验证CNAME的过程中可能会有警告信息,说明这个服务器以前做过相同操作留有旧的账户信息。

查看 /etc/letsencrypt/accounts/  目录下可能有两个账号,删掉老的。

Do you wish to set up a CAA record with accounturi now? [y/N]: y

[i] Found a total of 2 ACME account(s) on this system:

 [Certbot] URI: https://acme-staging-v02.api.letsencrypt.org/acme/acct/177419874

  • 在所有域名验证完成后,申请证书。Challenges模式是 dns,auth-hook 是acme-dns-client。由于新的证书安全性需要,通配符证书必须还要配合根域域名证书才能信任,所以要同时申请。

certbot certonly –manual –preferred-challenges dns \

–manual-auth-hook ‘acme-dns-client’ -d “*.cn-it.org” -d cn-it.org -d “*.51azure.com” -d 51azure.com -d “*.yuushatech.com” -d yuushatech.com -d “*.maoutech.com” -d maoutech.com -d “*.5i818.com” -d 5i818.com -d “*.51aws.com” -d 51aws.com

  • 如果之前的CNAME记录及CAA记录都完好可查的情况下,证书应该可以顺利签署。

使用命令 certbot renew –dry-run 可以测试证书是否可以正常renew,使用命令 systemctl status certbot-renew.timer 可以查看自动renew服务的状态

  1. 关于配置文件及自动运行脚本

配置文件位置 /etc/letsencrypt/renewal/cn-it.org.conf

自动运行脚本 /etc/letsencrypt/renewal-hooks/post/pkcs12convert.sh

脚本内容如下,每次自动更新证书后会自动运行renewal-hooks/post 中的脚本

#!/bin/sh

openssl pkcs12 -export -out /etc/letsencrypt/live/cn-it.org/cn-it.org.pfx -inkey /etc/letsencrypt/live/cn-it.org/privkey.pem -in /etc/letsencrypt/live/cn-it.org/cert.pem -certfile /etc/letsencrypt/live/cn-it.org/chain.pem -passout pass:XXXxxxXXX

echo “pkcs#12 generated!”

systemctl restart nginx

echo “Nginx restarted”

发表评论