要为域名获取 Let’s Encrypt 的 SSL 通配符证书,可以使用 Docker 运行 Certbot 工具。以下是获取 *.xinzhizhu.me
通配符证书的命令:
# 使用 Docker 运行 Certbot 来获取通配符证书
# 说明:
# --rm: 命令执行完成后自动删除容器
# -it: 以交互方式运行容器
# -e TZ=Asia/Shanghai: 设置时区为上海
# -v "/path/to/letsencrypt:/etc/letsencrypt": 将证书存储目录挂载到容器中
# certonly: 仅获取证书不安装
# --preferred-challenges dns: 使用 DNS 验证方式
# -d '*.xinzhizhu.me': 为通配符域名申请证书
# --manual: 手动模式,将提示您创建 DNS TXT 记录进行域名所有权验证
docker run --rm -it \
-e TZ=Asia/Shanghai \
-v "/Users/xinzhizhu/Downloads/letsencrypt:/etc/letsencrypt" \
certbot/certbot certonly --preferred-challenges dns -d '*.xinzhizhu.me' --manual
运行此命令后,Certbot 将指导您创建必要的 DNS TXT 记录来验证域名所有权,然后颁发证书。证书将保存在指定的挂载目录中。
在运行 Certbot 后,它会提示您添加一个 TXT 记录到您的 DNS 配置。添加记录后,您可以使用以下命令验证 TXT 记录是否已正确传播:
# 使用 dig 命令查询 TXT 记录
dig _acme-challenge.xinzhizhu.me TXT
# 使用 host 命令查询 TXT 记录
host -t TXT _acme-challenge.xinzhizhu.me
# 使用 nslookup 查询 TXT 记录
nslookup -type=TXT _acme-challenge.xinzhizhu.me
输出示例(使用 dig):
;; ANSWER SECTION:
_acme-challenge.xinzhizhu.me. 300 IN TXT "your-challenge-token-here"
注意:DNS 记录传播可能需要几分钟到几小时。如果记录未立即显示,请等待片刻后再次检查。
您也可以使用在线 DNS 查询工具,如 MxToolbox 或 Google 的 DNS 查询 来验证记录。
证书成功颁发后,将在您指定的挂载目录中生成以下目录结构:
letsencrypt/
├── accounts/ # 账户信息
├── archive/ # 存储所有版本的证书文件
│ └── xinzhizhu.me/
│ ├── cert1.pem # 域名证书
│ ├── chain1.pem # 中间证书
│ ├── fullchain1.pem # 完整证书链
│ └── privkey1.pem # 私钥
├── live/ # 指向最新证书的符号链接
│ └── xinzhizhu.me/
│ ├── cert.pem -> ../../archive/xinzhizhu.me/cert1.pem
│ ├── chain.pem -> ../../archive/xinzhizhu.me/chain1.pem
│ ├── fullchain.pem -> ../../archive/xinzhizhu.me/fullchain1.pem
│ ├── privkey.pem -> ../../archive/xinzhizhu.me/privkey1.pem
│ └── README # 说明文件
└── renewal/ # 证书续期配置
└── xinzhizhu.me.conf
下面是一个生成后的文件夹截图:
如图所示,Certbot 会提供一个 TXT 记录值,您需要将其添加到 DNS 配置中。添加并等待 DNS 传播后,Certbot 将验证记录并颁发证书。
查看证书文件目录:
ls -la /Users/xinzhizhu/Downloads/letsencrypt/
主要目录说明:
accounts
: 包含 Let’s Encrypt 账户信息archive
: 存储所有历史版本的证书文件,每次续期都会创建新的编号文件live
: 包含指向最新证书文件的符号链接,应用程序应该使用这里的文件renewal
: 存储证书的续期配置信息主要证书文件:
privkey.pem
- 服务器私钥cert.pem
- 服务器证书chain.pem
- 中间证书链fullchain.pem
- 完整证书链(服务器证书+中间证书,大多数服务器使用此文件)要查看证书详情:
openssl x509 -in /Users/xinzhizhu/Downloads/letsencrypt/live/xinzhizhu.me/cert.pem -text -noout
输出将包含证书的详细信息,包括有效期、签发者、域名等信息。
server {
listen 443 ssl;
server_name *.xinzhizhu.me;
ssl_certificate /etc/letsencrypt/live/xinzhizhu.me/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/xinzhizhu.me/privkey.pem;
# 其他 SSL 设置
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
# 网站配置...
}
Let’s Encrypt 的证书有效期为 90 天,您可以使用以下命令更新证书:
docker run --rm -it \
-e TZ=Asia/Shanghai \
-v "/Users/xinzhizhu/Downloads/letsencrypt:/etc/letsencrypt" \
certbot/certbot renew
建议设置定时任务,定期运行续期命令,例如每月运行一次。