本文将详细介绍在 Ubuntu 系统中,通过 Certbot 工具申请 Let's Encrypt 免费 HTTPS 证书 的完整流程,包含两种主流验证方式(HTTP-01、DNS-01)、证书部署与自动续期操作,新手也能快速上手。
一、前置准备:安装 Certbot
Certbot 是 Let's Encrypt 官方推荐的证书管理工具,我们通过 Ubuntu 官方 Snap 包管理器安装,确保版本最新且稳定。
执行以下命令完成安装与配置:
# 更新系统软件源
apt update
# 安装 Snap 包管理器
apt install -y snapd
# 初始化并更新 Snap 核心组件
snap install core
snap refresh core
# 安装 Certbot 工具
snap install --classic certbot
# 创建软链接,全局调用 Certbot 命令
ln -sf /snap/bin/certbot /usr/bin/certbot
安装完成后,执行 certbot --version 能看到版本号,即表示安装成功。
二、HTTP-01 验证方式(推荐单域名/无CDN场景)
1. 原理简介
Let's Encrypt 官方会通过 80端口 访问你的服务器文件路径:
http://你的域名/.well-known/acme-challenge/随机校验文件
若能读取到正确校验内容,即可证明你拥有该域名的控制权,完成证书签发。
2. 核心要求
- 服务器必须开放80端口(防火墙/安全组放行)
- 80端口不能被 Nginx、Apache、Go 等服务占用(需临时停止)
- 不推荐使用 CDN 的场景(容易验证失败)
3. 实操步骤
- 登录服务器安全组/防火墙,放行 80、443端口;在域名解析后台,添加域名指向服务器IP的解析记录。
- 执行命令申请证书(一键自动化验证):
sudo certbot certonly --standalone \
-d 你的域名 \
--agree-tos \
-m 你的联系邮箱 \
--non-interactive
4. 证书默认路径
申请成功后,证书文件会自动保存在以下目录:
`# 证书链文件 /etc/letsencrypt/live/你的域名/fullchain.pem
私钥文件
/etc/letsencrypt/live/你的域名/privkey.pem`
三、DNS-01 验证方式(推荐泛域名/有CDN场景)
1. 原理简介
无需占用80端口,通过添加域名DNS TXT记录完成验证:
Let's Encrypt 会检查域名的解析记录:_acme-challenge.你的域名
若存在指定的校验值,即验证通过。
2. 核心优势
- 支持泛域名证书(如
*.example.com) - 不受80端口占用、CDN 影响,兼容性更强
3. 实操步骤
- 执行命令启动 DNS 验证流程:
sudo certbot certonly \
-d 你的域名 \
--manual \
--preferred-challenges dns \
--agree-tos \
-m 你的联系邮箱
- 命令执行后,会输出校验信息(示例):
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
请在你的域名后台添加以下 DNS TXT 记录:
记录名称:_acme-challenge.你的域名
记录值:系统生成的随机校验码
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- 登录域名解析后台,添加解析记录:
- 主机记录:
_acme-challenge - 记录类型:
TXT - 记录值:命令输出的随机校验码
- 等待 DNS 解析生效(通常1-5分钟),可通过在线工具检测:
工具地址:toolbox.googleapps.com/apps/dig/
检测到校验码后,回到服务器按 Enter 继续。
- 验证通过后,证书路径与 HTTP-01 方式一致。
四、证书部署与权限配置
申请成功后,将证书复制到项目部署目录,并配置正确的文件权限(保障安全):
# 复制证书链文件到部署目录
cp /etc/letsencrypt/live/你的域名/fullchain.pem \
/自定义部署目录/cert/domain.pem
# 复制私钥文件到部署目录
cp /etc/letsencrypt/live/你的域名/privkey.pem \
/自定义部署目录/cert/domain.key
# 配置权限:私钥仅管理员可读取,证书公开读取
chmod 600 /自定义部署目录/cert/domain.key
chmod 644 /自定义部署目录/cert/domain.pem
五、证书续期(关键)
Let's Encrypt 证书有效期为 90天,需定期续期,推荐手动+自动化结合使用。
1. 手动续期命令
# 自动续期所有未过期的证书
certbot renew
# 续期后重新复制证书到部署目录
cp /etc/letsencrypt/live/你的域名/fullchain.pem /自定义部署目录/cert/domain.pem
cp /etc/letsencrypt/live/你的域名/privkey.pem /自定义部署目录/cert/domain.key
# 重启 Web 服务(Nginx/Docker 等)生效新证书
docker compose restart 你的Web服务
2. 自动化续期(可选)
Certbot 会自动创建续期定时任务,无需手动配置,只需确保续期后重启 Web 服务即可。