机构与工具简介
- Let’s Encrypt:由 Mozilla、思科等巨头联合设立的公共非盈利证书颁发机构(CA)。它致力于推动全球 Web 的 100% 加密化,提供免费、自动化且受主流浏览器信任的标准化 X.509 证书。
- Certbot:由电子前哨基金会(EFF)维护的开源工具。作为 ACME(自动证书管理环境)协议的客户端,它充当着服务器的“外交官”,负责自动与 CA 握手、完成验证并修改 Web 服务器配置。
核心原理:HTTP-01 验证模式
Let’s Encrypt 并不依赖人工审核,而是通过机器对话来验证域名的控制权。最常用的机制称为 HTTP-01 验证:
- 发起申请:Certbot 向 Let’s Encrypt 声明需要为某域名申请证书。
- 下发暗号:Let’s Encrypt 返回一个专属的随机字符串(Token)。
- 放置文件:Certbot 自动在 Web 服务器的根目录下创建一个公开的隐藏路径:
/.well-known/acme-challenge/,并将 Token 放入其中。 - 公网回源:Let’s Encrypt 的验证服务器通过 80 端口 (HTTP) 访问该路径。一旦成功读取并核对 Token 无误,即认定域名所有权,瞬间下发证书文件,随后 Certbot 会自动清理临时文件。
HTTP-01 验证强依赖服务器的 80 端口畅通。如果云服务器位于中国大陆节点,必须先完成工信部 ICP 备案。在未备案状态下,云厂商的物理防火墙会从外部直接阻断 80 端口,导致 Let’s Encrypt 无法读取 Token,从而引发
403 Forbidden报错。
详细步骤
1. :Nginx 绑定域名
在签发之前,必须确保 Nginx 配置文件中已经绑定了你的域名,否则 Certbot 将无法识别该修改哪个配置。
打开 Nginx 配置文件(如 /etc/nginx/sites-available/default),找到 server_name 指令并修改:
Nginx
server {
listen 80;
# 将下划线替换为你的真实域名
server_name yourdomain.com www.yourdomain.com;
root /var/www/html;
# ...其他配置...
}
修改后执行 sudo nginx -t 测试语法,并使用 sudo systemctl reload nginx 重载配置。
2. 安装 Certbot 及其环境插件
在 Ubuntu 系统中,直接通过 APT 包管理器安装:
Bash
sudo apt update
sudo apt install certbot python3-certbot-nginx -y
3. 一键签发与部署
执行以下核心命令,启动全自动流程:
Bash
sudo certbot --nginx
运行后,按照终端提示依次输入邮箱(用于接收过期提醒)、同意开源协议,并选择需要开启 HTTPS 的域名编号,显示Successfully deployed certificate 即成功。
4. 验证自动续期 (Auto-Renewal)
Let’s Encrypt 的证书有效期为 90 天,但 Certbot 已经在系统中植入了定时任务,会在过期前自动续签。可以通过以下命令检查定时任务状态:
Bash
sudo systemctl status certbot.timer
底层原理
实际上,Certbot 自动修改了你的 Nginx 配置文件。如果你再次打开 /etc/nginx/sites-available/default,会发现certbot自动添加了这些配置:
Nginx
# Certbot 自动添加了 443 端口的监听
listen 443 ssl; # managed by Certbot
# 自动挂载了刚刚下载好的证书公钥和私钥路径
ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
不仅如此,它还在文件底部帮你写好了一个 301 重定向模块,确保所有通过 HTTP (80) 访问的流量,都会被强制跳转到安全的 HTTPS (443) 通道上。
版权声明:
本文由 Howard 原创发表于个人博客。
许可协议: 本文采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 (CC BY-NC-SA 4.0) 进行许可。可自由转载,但请务必注明原文出处,且不得用于商业目的。
本文链接: https://sallyharada.com/?p=84