使用go-acme/lego工具获取SSL证书的完整指南

使用go-acme/lego工具获取SSL证书的完整指南

lego Let's Encrypt/ACME client and library written in Go lego 项目地址: https://gitcode.com/gh_mirrors/le/lego

前言

在当今互联网环境中,SSL/TLS证书已成为网站安全的基础设施。go-acme/lego是一个功能强大的ACME客户端工具,可以帮助开发者轻松获取和管理Let's Encrypt证书。本文将详细介绍如何使用lego工具获取SSL证书的多种方法。

准备工作

在开始之前,请确保:

  1. 已安装最新版本的lego工具
  2. 拥有一个有效的域名
  3. 能够对域名进行验证(通过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证书管理流程。

lego Let's Encrypt/ACME client and library written in Go lego 项目地址: https://gitcode.com/gh_mirrors/le/lego

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

崔锴业Wolf

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值