使用go-acme/lego工具获取SSL证书的完整指南
前言
在当今互联网环境中,SSL/TLS证书已成为网站安全的基础设施。go-acme/lego是一个功能强大的ACME客户端工具,可以帮助开发者轻松获取和管理Let's Encrypt证书。本文将详细介绍如何使用lego工具获取SSL证书的多种方法。
准备工作
在开始之前,请确保:
- 已安装最新版本的lego工具
- 拥有一个有效的域名
- 能够对域名进行验证(通过HTTP或DNS方式)
方法一:使用内置Web服务器获取证书
这是最简单的方式,适合大多数场景:
lego --email="you@example.com" --domains="example.com" --http run
命令解析:
--email
:设置账户邮箱--domains
:指定需要申请证书的域名--http
:使用HTTP-01挑战验证方式run
:执行获取证书操作
证书文件说明:
.lego/certificates/example.com.crt
:服务器证书(包含CA证书).lego/certificates/example.com.key
:私钥文件.lego/certificates/example.com.issuer.crt
:CA证书.lego/certificates/example.com.json
:证书元信息
这些文件都是PEM格式,可直接用于大多数Web服务器配置。
方法二:使用DNS提供商验证获取证书
当无法使用HTTP验证时,DNS验证是理想选择。lego支持众多DNS提供商,以下是使用Gandi的示例:
GANDI_API_KEY=your_api_key \
lego --email "you@example.com" --dns gandi --domains "example.org" --domains "*.example.org" run
特殊DNS配置处理
对于具有多个SOA记录的DNS区域(如同时存在内网和外网DNS),需要指定解析器:
GANDI_API_KEY=your_api_key \
lego --email "you@example.com" --dns gandi --dns.resolvers 9.9.9.9:53 --domains "example.org" run
方法三:使用自定义CSR获取证书
如果已有证书签名请求(CSR)文件,可直接使用:
lego --email="you@example.com" --http --csr="/path/to/csr.pem" run
注意事项:
- lego会自动从CSR中提取域名信息
- 确保CSR中的Common Name和SubjectAltNames设置正确
方法四:与现有Web服务器集成
如果已有运行在80端口的Web服务器,可使用webroot模式:
lego --accept-tos --email you@example.com --http --http.webroot /path/to/webroot --domains example.com run
关键点:
- 指定的webroot目录必须能通过HTTP公开访问
- 挑战文件将写入
/.well-known/acme-challenge/
路径 - 确保服务器配置正确处理该路径的请求
证书获取后的自动化处理
lego支持获取证书后执行自定义脚本,非常适合自动化部署:
lego --email="you@example.com" --domains="example.com" --http run --run-hook="./myscript.sh"
脚本可获取以下环境变量:
LEGO_CERT_PATH
:证书路径LEGO_CERT_KEY_PATH
:私钥路径LEGO_CERT_DOMAIN
:证书主域名
自动化部署示例
以下脚本演示如何将证书部署到Postfix邮件服务器:
#!/bin/bash
postfix_cert_dir="/etc/postfix/certificates"
if [ "$LEGO_CERT_DOMAIN" = "example.com" ]; then
# 复制证书文件并设置正确权限
install -u postfix -g postfix -m 0644 "$LEGO_CERT_PATH" "$postfix_cert_dir"
install -u postfix -g postfix -m 0640 "$LEGO_CERT_KEY_PATH" "$postfix_cert_dir"
# 重新加载Postfix服务
systemctl reload postfix@-service
fi
总结
go-acme/lego提供了多种灵活的证书获取方式,无论是简单的单域名证书还是复杂的通配符证书,都能轻松应对。通过本文介绍的方法,您可以根据实际环境选择最适合的证书获取策略,并实现自动化部署,大大简化SSL证书管理流程。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考