如何从Traefik+Let’s Encrypt获取domain.crt/key/ca格式的SSL证书?
从Traefik acme.json获取EMQX/MySQL所需TLS证书文件
第一步:从acme.json提取并解码证书内容
Traefik的acme.json以JSON格式存储Base64编码的证书,先定位到对应通配符域名*.calderasinecolma.com的条目,提取以下字段并解码:
可以用jq工具快速处理(替换为你的acme.json实际路径):
# 生成domain.key(对应服务器私钥) jq -r '.Certificates[] | select(.domain.main == "*.calderasinecolma.com") | .key' /etc/traefik/acme.json | base64 -d > domain.key # 生成domain.crt(对应服务器证书) jq -r '.Certificates[] | select(.domain.main == "*.calderasinecolma.com") | .certificate' /etc/traefik/acme.json | base64 -d > domain.crt # 生成domain.ca(对应CA证书链) jq -r '.Certificates[] | select(.domain.main == "*.calderasinecolma.com") | .chain' /etc/traefik/acme.json | base64 -d > domain.ca
如果没有jq,可直接打开acme.json,手动复制对应字段的Base64内容,用以下命令解码:
echo "复制的Base64内容" | base64 -d > 目标文件名
第二步:明确文件对应关系
- domain.key:对应Traefik导出的
privkey.pem,是服务器的私有密钥,需妥善保管 - domain.crt:对应Traefik的
cert.pem,仅包含你的域名证书内容 - domain.ca:对应Traefik的
chain.pem,是签发域名证书的CA机构中间证书链,用于客户端验证服务器证书合法性
第三步:验证证书有效性
生成文件后,用openssl命令验证:
# 验证私钥与证书匹配(两个输出哈希值需一致) openssl x509 -noout -modulus -in domain.crt | openssl md5 openssl rsa -noout -modulus -in domain.key | openssl md5 # 验证CA链有效性(输出应为"domain.crt: OK") openssl verify -CAfile domain.ca domain.crt
补充说明
Let's Encrypt的根CA证书通常已预装在多数操作系统和客户端中,因此仅用中间CA组成的chain.pem作为domain.ca即可满足验证需求,无需额外添加根CA证书。
内容的提问来源于stack exchange,提问作者Lenier Villalba
相关产品推荐
相关产品推荐

