免费 HTTPS 证书!使用 Certbot 申请 Let's Encrypt

0 阅读4分钟

本文将详细介绍在 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. 实操步骤

  1. 登录服务器安全组/防火墙,放行 80、443端口;在域名解析后台,添加域名指向服务器IP的解析记录。
  2. 执行命令申请证书(一键自动化验证):
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. 实操步骤

  1. 执行命令启动 DNS 验证流程:
sudo certbot certonly \
  -d 你的域名 \
  --manual \
  --preferred-challenges dns \
  --agree-tos \
  -m 你的联系邮箱
  1. 命令执行后,会输出校验信息(示例):
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
请在你的域名后台添加以下 DNS TXT 记录:
记录名称:_acme-challenge.你的域名
记录值:系统生成的随机校验码
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1. 登录域名解析后台,添加解析记录:
  • 主机记录:_acme-challenge
  • 记录类型:TXT
  • 记录值:命令输出的随机校验码
  1. 等待 DNS 解析生效(通常1-5分钟),可通过在线工具检测:

工具地址:toolbox.googleapps.com/apps/dig/

检测到校验码后,回到服务器按 Enter 继续。

  1. 验证通过后,证书路径与 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 服务即可。