1丶 环境准备
在开始之前,确保你具备以下条件:
- 一台可以访问互联网的服务器(Linux 环境,如 Ubuntu/CentOS)。
- Root 权限或
sudo权限。 - 一个已解析的域名(本文以
example.com为例)。
2丶什么是 Let’s Encrypt?
Let’s Encrypt 是一个免费的、自动化的、开放的证书颁发机构(CA),提供免费 SSL 证书。它的目标是让所有网站都能轻松实现 HTTPS 加密,保障用户数据的安全。通过 Let’s Encrypt,你可以为你的主域名、子域名,甚至泛域名配置安全证书,而且过程完全自动化,不需要手动申请和管理证书,官方推荐使用 Certbot。
3丶Let’s Encrypt 证书颁发原理
Let’s Encrypt 证书的颁发是通过 自动化的认证流程 完成的,以下是基本流程:
3.1域名验证
在申请证书之前,Let’s Encrypt 必须验证你对所申请域名的控制权。这是通过以下几种方式进行的:
- HTTP-01 验证:Let’s Encrypt 向你请求创建一个特定的文件,并放在你网站的指定路径下。它通过访问该文件来验证你是否控制该域名。
- DNS-01 验证:Let’s Encrypt 提供一条 DNS TXT 记录,要求你将其添加到域名的 DNS 设置中。它通过检查 DNS 记录来验证你对域名的控制权。
对于 泛域名证书,必须使用 DNS-01 验证方式,因为 HTTP 验证不能跨域名层级进行。
3.2 证书生成
一旦验证成功,Let’s Encrypt 会生成一个 SSL 证书,并将其发放给申请者。这个证书包含了公钥和域名信息,任何人都可以通过该证书与网站进行安全通信。
3.3证书安装
证书的安装你可以选择自己手动安装,也可以由 Certbot 自动完成;动手配置更灵活,比如申请证书和 Web 服务器不在同一台电脑上就需要手动;自动安装会更方便,前提是你已经在服务器上安装 Nginx 或 Apache 等服务器,Certbot 会将证书安装到 Web 服务器(如 Nginx 或 Apache)上,并配置好相应的加密设置。
3.4自动续期
Let’s Encrypt 的证书有效期为 90 天,因此需要定期续期。Certbot 自动进行续期验证,确保你的网站不会因为证书过期而遭到用户的安全警告。
4丶Certbot 的工作原理
Certbot 是一个命令行工具,用于自动化整个 SSL 证书的管理流程。它可以做以下几件事:
- 申请证书:使用 ACME 协议从 Let’s Encrypt 获取证书。
- 验证域名所有权:通过 HTTP-01 或 DNS-01 验证确保你拥有该域名。
- 安装证书:将证书自动安装到你的 Web 服务器,并配置相关的加密参数。
- 续期证书:定期自动续期证书,避免证书过期。
Certbot 的核心工作是通过 ACME 协议(自动证书管理环境)与 Let’s Encrypt 通信。ACME 是一套标准协议,用于自动化证书申请、验证和安装的过程。Certbot 使用 ACME 协议与 Let’s Encrypt 进行通信,确保你的网站能够通过安全的 HTTPS 连接。
5丶安装 Certbot
Certbot 是由 Electronic Frontier Foundation (EFF) 提供的一个开源工具,用于自动化从 Let’s Encrypt 获取和管理 SSL 证书。Certbot 会自动为你处理证书申请、安装和续期等过程。
5.1Linux系统
推荐使用 Linux 的 snap 包管理工具安装Certbot,支持snap后可以使用如下命令安装Certbot
sudo snap install --classic certbot #安装Certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot #创建一个符号链接,确保可以执行certbot命令(相当于快捷方式)Bash5.2其他系统平台

6丶单域名 SSL 证书
6.1申请单域名 SSL 证书
如果你只需要为单个域名(如 example.com 和 www.example.com)申请证书,可以使用以下命令:
sudo certbot --nginx -d example.com -d www.example.com Bash根据提示输入邮箱地址,并同意服务条款,Certbot 将自动完成证书申请和安装。
6.2单域名自动续期
Let’s Encrypt 证书的有效期为 90 天,为了避免证书过期,我们可以使用 Cron Job 设置自动续期。
首先,你可以手动测试续期是否正常:
sudo certbot renew --dry-runBash如果没有报错,可以继续配置自动续期任务:
sudo crontab -eBash在打开的编辑器中添加以下行,表示每天凌晨 2 点执行自动续期任务:
0 2 * * * /usr/bin/certbot renew --quietShellScript7丶 申请的 SSL 证书文件所在目录
当使用 Certbot 成功申请到 SSL 证书后,证书文件将默认保存在以下目录中:
/etc/letsencrypt/live/your-domain-name/Bash具体包含以下几个文件:
cert.pem:这是你的 SSL 证书 文件。privkey.pem:这是你的 私钥 文件,务必妥善保管,切勿泄露。chain.pem:这是 中间证书链 文件,用于验证证书的完整性。fullchain.pem:这是 完整证书链 文件,通常用于 Nginx 或 Apache 的 SSL 配置中。
例如,如果你的域名是 example.com,则目录路径为:
/etc/letsencrypt/live/example.com/Bash你可以使用以下命令查看证书详细信息:
sudo certbot certificatesBash输出示例:
Certificate Name: example.com
Domains: example.com www.example.com
Expiry Date: 2024-02-10 14:30:00+00:00 (VALID: 75 days)
Certificate Path: /etc/letsencrypt/live/example.com/fullchain.pem
Private Key Path: /etc/letsencrypt/live/example.com/privkey.pemBashexpiry date 在未来日期,说明配置成功。8丶常见问题及解决方法
8.1DNS 验证失败
检查 DNS 记录是否添加正确,并确保记录已完全传播,可以使用以下命令查看 DNS 解析状态:
nslookup -q=txt _acme-challenge.example.comBash8.2Nginx 配置冲突
如果 Certbot 无法自动修改 Nginx 配置文件,你可以手动更新 Nginx 配置文件(/etc/nginx/sites-available/default):
server {
listen 80;
server_name example.com www.example.com;
location / {
return 301 https://$host$request_uri;
}
}
server {
listen 443 ssl;
server_name example.com www.example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
location / {
proxy_pass http://127.0.0.1:8080;
}
}Nginx保存并测试 Nginx 配置:
sudo nginx -t
sudo systemctl reload nginxBash