Certbot & Nginx SSL 配置指南:详细步骤与实践
在当今互联网环境下,为您的网站启用 HTTPS 已不再是可选的增强功能,而是必不可少的基础安全措施。HTTPS 不仅保护用户数据的隐私和完整性,还能提升网站的信任度,改善搜索引擎排名(SEO),并支持更现代的 Web 特性(如 HTTP/2)。
过去,获取和配置 SSL/TLS 证书可能是一个复杂且昂贵的过程。但随着 Let’s Encrypt 项目的兴起以及 Certbot 工具的普及,为网站添加免费、自动化管理的 SSL 证书变得前所未有的简单。
本篇文章将为您提供一个详细的 Certbot 与 Nginx 配合配置 SSL 证书的指南,涵盖从安装 Certbot 到证书获取、Nginx 配置、自动续期以及常见问题解决的整个过程。
文章目录
- 引言:为何需要 SSL?Certbot 与 Nginx 的优势
- 准备工作:开始前的必要条件
- 安装 Certbot:获取 Certbot 工具
- 通过 Snap 安装(推荐)
- 通过包管理器安装(Ubuntu/Debian, CentOS/RHEL)
- 准备 Nginx 配置:确保 Certbot 可以识别您的域
- 使用 Certbot 获取并配置 SSL 证书
- 自动模式 (
certbot --nginx
) - 仅获取证书模式 (
certbot certonly --nginx
)
- 自动模式 (
- 理解 Certbot 对 Nginx 配置的修改
- 验证 SSL 配置:确认一切正常
- 自动续期:确保证书始终有效
- 进阶配置(可选):提升安全性与性能
- HTTP Strict Transport Security (HSTS)
- OCSP Stapling
- 常见问题与故障排除
- 总结
1. 引言:为何需要 SSL?Certbot 与 Nginx 的优势
为何需要 SSL?
- 数据安全与隐私: SSL/TLS 加密了客户端(用户浏览器)与服务器之间传输的数据,防止数据在传输过程中被窃听、篡改。
- 信任度: 浏览器地址栏中的小锁标志以及显示“安全连接”表明您的网站使用了 HTTPS,这能显著增强用户对网站的信任。对于电子商务网站尤其重要。
- 搜索引擎优化 (SEO): Google 等搜索引擎已将 HTTPS 作为重要的排名因素。
- 支持现代 Web 特性: HTTP/2 等高性能协议要求使用 HTTPS。一些新的浏览器 API 也仅在安全上下文中可用。
- 避免浏览器警告: 不使用 HTTPS 的网站可能会被浏览器标记为“不安全”,这会影响用户体验和转化率。
Certbot 与 Nginx 的优势
- Certbot:
- 免费: 获取 Let’s Encrypt 提供的免费 SSL 证书。
- 自动化: 自动化证书的申请、配置和续期过程,大大简化了管理。
- 易用性: 提供了针对流行 Web 服务器(如 Nginx、Apache)的插件,可以自动修改配置文件。
- 官方支持: 由电子前沿基金会 (EFF)、Mozilla 等组织支持和开发。
- Nginx:
- 高性能: 是一款轻量级、高性能的 Web 服务器和反向代理服务器。
- 稳定性: 在高并发环境下表现出色。
- 配置灵活: 强大的配置语法,易于集成各种模块。
Certbot 提供了针对 Nginx 的插件,能够自动识别 Nginx 配置中的域名,并直接修改配置,使其使用新申请的 SSL 证书,极大地简化了 SSL 配置流程。
2. 准备工作:开始前的必要条件
在开始之前,请确保满足以下条件:
- 一台运行 Linux 的服务器: 这是安装 Certbot 和 Nginx 的环境。常见的 Linux 发行版如 Ubuntu、Debian、CentOS、RHEL、Fedora 等都可以。
- 已安装并运行 Nginx: 您的 Nginx Web 服务器已经正确安装并正在为您的网站提供服务。
- 一个或多个已注册的域名: 您需要拥有您网站的域名,例如
yourdomain.com
和www.yourdomain.com
。 - 域名已指向服务器 IP 地址: 您的域名的 DNS A 记录(或 AAAA 记录,如果使用 IPv6)已经正确解析到您的服务器的公共 IP 地址。这一点非常关键,Certbot 需要通过您的域名访问您的服务器来完成验证。
- 服务器拥有公共 IP 地址并开放必要端口: 您的服务器需要可以通过公网 IP 访问。对于 HTTP 验证方式(Certbot 默认使用的验证方式之一,通过在您的网站根目录下放置一个临时文件进行验证),需要开放 HTTP (80) 端口。一旦配置好 SSL,您还需要开放 HTTPS (443) 端口。请检查您的防火墙(如 ufw, firewalld, iptables)或云服务提供商的安全组设置。
- 拥有服务器的 root 或 sudo 访问权限: 安装软件和修改 Nginx 配置文件需要相应的权限。
3. 安装 Certbot:获取 Certbot 工具
Certbot 的安装方法取决于您使用的 Linux 发行版。官方推荐使用 Snapd 进行安装,因为它能确保您获得最新版本的 Certbot 和所有必要的依赖项,而无需依赖于发行版的包更新周期。
通过 Snap 安装(推荐)
Snap 是一个跨发行版的软件包管理系统。大多数现代 Linux 发行版都预装了 Snapd。
-
确保 Snapd 已安装并最新:
bash
sudo snap install core
sudo snap refresh core -
移除潜在的冲突包(如果之前通过 apt/yum 安装过旧版本):
“`bash
# For Ubuntu/Debian
sudo apt remove certbotFor CentOS/RHEL/Fedora
sudo yum remove certbot
“`
注意: 如果是全新安装,这一步可以跳过。 -
安装 Certbot:
bash
sudo snap install --classic certbot
--classic
标志是必需的,因为 Certbot 需要访问系统和网络资源,这需要更高的权限。 -
创建软链接以方便命令行调用:
bash
sudo ln -s /snap/bin/certbot /usr/bin/certbot
这将创建一个符号链接,使得您可以在任何位置直接使用certbot
命令。
通过包管理器安装(Ubuntu/Debian)
如果您无法使用 Snapd,或者更倾向于使用发行版的包管理器,可以在 Ubuntu 或 Debian 上通过 apt 安装 Certbot 及其 Nginx 插件。
-
更新包列表:
bash
sudo apt update -
安装 Certbot 和 Nginx 插件:
bash
sudo apt install certbot python3-certbot-nginx
python3-certbot-nginx
是 Certbot 的 Nginx 插件包。
通过包管理器安装(CentOS/RHEL/Fedora)
在基于 RHEL 的系统上,通常需要先启用 EPEL 仓库才能安装 Certbot。
-
启用 EPEL 仓库:
“`bash
# 对于 CentOS 7
sudo yum install epel-release对于 CentOS 8, RHEL 8, Fedora
sudo dnf install epel-release
``
dnf
*注意:* 在较新的 CentOS Stream 8/9 或 RHEL 8/9 上,可能使用而不是
yum`。 -
安装 Certbot 和 Nginx 插件:
“`bash
# 对于 CentOS 7, RHEL 7
sudo yum install certbot python2-certbot-nginx对于 CentOS 8, RHEL 8, Fedora (可能使用 python3-certbot-nginx)
sudo dnf install certbot python3-certbot-nginx
``
python3-certbot-nginx
请根据您的具体系统版本选择正确的 Python 版本插件包。如果不确定,可以先尝试,如果找不到再尝试
python2-certbot-nginx`(尽管 Python 2 已EOL,但一些旧系统可能仍依赖它)。
安装完成后,您可以在终端中运行 certbot --version
来验证安装是否成功。
4. 准备 Nginx 配置:确保 Certbot 可以识别您的域
Certbot 的 Nginx 插件通过解析您的 Nginx 配置文件来确定您希望为其颁发证书的域名。它通常查找 server
块中的 server_name
指令。
在运行 Certbot 之前,请确保您有一个为您的域名设置的 Nginx server 块,并且该块正在监听 80 端口。即使您的网站目前只通过 HTTP 访问,也需要这个 80 端口的配置,因为 Certbot 默认使用 HTTP-01 验证方式来证明您对域名的所有权。
一个基本的 Nginx Server 块示例(监听 80 端口):
“`nginx
请替换 yourdomain.com 和 www.yourdomain.com 为您自己的域名
请替换 /path/to/your/website/root 为您网站的根目录
server {
listen 80;
listen [::]:80; # 如果支持 IPv6 也请添加
server_name yourdomain.com www.yourdomain.com;
root /path/to/your/website/root;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
# Certbot 需要访问 .well-known 目录进行验证
# 如果您的网站根目录配置正确,通常不需要额外配置,
# 但如果您的配置比较复杂,可以考虑添加如下location块
# location ~ /.well-known/acme-challenge/ {
# allow all;
# # 如果您使用了反向代理或特定的访问控制,确保这里允许来自Let's Encrypt验证服务器的访问
# }
}
“`
重要步骤:
- 将上述示例代码添加到您的 Nginx 配置文件中。常见的配置文件位置包括
/etc/nginx/sites-available/yourdomain.conf
或直接在/etc/nginx/nginx.conf
的http
块中。 - 如果您将配置文件放在
sites-available
目录中,请确保在sites-enabled
目录中创建了符号链接,使其生效。例如:
bash
sudo ln -s /etc/nginx/sites-available/yourdomain.conf /etc/nginx/sites-enabled/ - 测试 Nginx 配置语法: 在应用更改之前,务必测试配置是否有语法错误。
bash
sudo nginx -t
如果输出test is successful
,则表示语法正确。 - 重新加载或重启 Nginx: 应用新的配置。
bash
sudo nginx -s reload
# 或
sudo systemctl reload nginx
# 或
sudo systemctl restart nginx
请根据您的系统和服务管理方式选择合适的命令。通常重新加载 (reload
) 即可。
确保您的网站现在可以通过 HTTP (80 端口) 访问,以便 Certbot 进行域名验证。
5. 使用 Certbot 获取并配置 SSL 证书
这是核心步骤。Certbot 提供了几种获取证书的方式,其中针对 Nginx 用户最方便的是使用其 Nginx 插件。
自动模式 (certbot --nginx
)
这是推荐的方式。Certbot 将自动检测您的 Nginx 配置,获取证书,并修改您的 Nginx 配置以启用 SSL。
在终端中运行以下命令:
bash
sudo certbot --nginx
Certbot 将会:
- 扫描您的 Nginx 配置,找出所有
server_name
中列出的域名。 - 列出它找到的域名,询问您希望为哪些域名颁发证书。您可以使用空格选择多个域名,或者输入数字选择。
- 提示您输入电子邮件地址(用于接收续期通知和安全警告)。
- 要求您同意 Let’s Encrypt 的服务条款。
- 执行域名所有权验证(通常是 HTTP-01 验证,Certbot 会临时在您的网站目录下创建文件,由 Let’s Encrypt 服务器访问验证)。
- 成功验证后,Certbot 会从 Let’s Encrypt CA 获取证书。
- 询问您是否希望将所有 HTTP 流量自动重定向到 HTTPS。强烈建议选择重定向(通常是选项 2)。
- 自动修改您的 Nginx 配置文件,添加必要的
listen 443 ssl;
、ssl_certificate
、ssl_certificate_key
等指令,并配置重定向规则(如果选择了重定向)。 - 重新加载 Nginx 配置使更改生效。
整个过程是交互式的,您只需按照提示操作即可。
示例交互过程(简化版):
“`
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Which names would you like to activate HTTPS for?
1: yourdomain.com
2: www.yourdomain.com
Select the appropriate numbers separated by commas and/or spaces, or leave blank to select all options shown (Enter ‘c’ to cancel): 1 2
Plugins selected: Authenticator nginx, Installer nginx
Enter email address (used for urgent renewal and security notices) (Enter ‘c’ to
cancel): [email protected]
Please read the terms of service at
https://letsencrypt.org/documents/leaf/letsencrypt-wp-acme-v02-latest.pdf. By
hitting Enter you agree to the terms.
Press Enter to Continue
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let’s Encrypt project and the non-profit
organization that develops Certbot? We’d like to send you about their work on
encrypting the web, EFF news, campaigns, and events.
(Y)es/(N)o: N
Obtaining a new certificate
Performing the following challenges:
http-01 validation for yourdomain.com
http-01 validation for www.yourdomain.com
Waiting for verification…
Cleaning up challenges
Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
1: No redirect – Make no further changes to the webserver configuration.
2: Redirect – Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you’re confident your site works on HTTPS. You can undo this
change by editing your web server’s configuration file.
Select the appropriate number [1-2] then [enter] (press ‘c’ to cancel): 2
Congratulations! You have successfully enabled https://yourdomain.com and
https://www.yourdomain.com
You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=yourdomain.com
https://www.ssllabs.com/ssltest/analyze.html?d=www.yourdomain.com
IMPORTANT NOTES:
– Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/yourdomain.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/yourdomain.com/privkey.pem
Your certificate will expire on 20XX-XX-XX. To obtain a new or tweaked
version of this certificate in the future, simply run certbot again. Certbot
will automatically renew this certificate when it gets close to expiration.
– Your account credentials have been saved in your Certbot
configuration directory at /etc/letsencrypt. You should make a secure backup
of this folder now. This contains configuration information and credentials
that Certbot needs to renew certificates automatically.
– If you like Certbot, please consider supporting our work by:
Donating to EFF at https://eff.org/certbot/donate
Donating to ISRG / Let’s Encrypt at https://letsencrypt.org/donate/
“`
如果看到类似“Congratulations! You have successfully enabled…”的输出,说明证书获取和配置成功。
仅获取证书模式 (certbot certonly --nginx
)
如果您想手动配置 Nginx,而不是让 Certbot 自动修改配置文件,可以使用 certonly
选项。这适用于您有复杂的 Nginx 配置,或者希望完全控制配置过程的情况。
bash
sudo certbot certonly --nginx
与自动模式类似,它会检测域名并进行验证,但完成后它不会修改您的 Nginx 配置文件。它只会将证书文件保存在 /etc/letsencrypt/live/yourdomain.com/
目录下。
您需要记下证书文件的路径(fullchain.pem
和 privkey.pem
),然后在您的 Nginx server 块中手动添加或修改 SSL 配置。
6. 理解 Certbot 对 Nginx 配置的修改
如果使用了 certbot --nginx
自动模式,Certbot 会在您的 Nginx 配置文件中找到您为域名设置的 server
块,并对其进行修改。
修改示例:
原始配置(监听 80 端口):
nginx
server {
listen 80;
listen [::]:80;
server_name yourdomain.com www.yourdomain.com;
# ... 其他配置
}
Certbot 修改后的配置(通常会创建或修改为两个 server
块):
“`nginx
原始的 80 端口块,现在用于重定向
server {
listen 80;
listen [::]:80;
server_name yourdomain.com www.yourdomain.com;
# … Certbot 添加的重定向规则
# 如果您选择了重定向,这里可能会是:
# return 301 https://$host$request_uri;
# … 其他配置,可能被 Certbot 移动或注释掉
}
Certbot 新增的 443 端口(HTTPS)块
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name yourdomain.com www.yourdomain.com;
# Certbot 添加的 SSL 证书和密钥路径
ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem; # 完整的证书链
ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem; # 私钥
# Certbot 包含的推荐 SSL 配置片段
# 这些文件包含强密码套件、会话缓存设置、OCSP Stapling 等
include /etc/letsencrypt/options-ssl-nginx.conf;
# Certbot 包含的 Diffie-Hellman 参数文件(增强安全)
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
# ... 您网站的其他配置,例如 root 目录、index 文件、location 块等
root /path/to/your/website/root;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
}
“`
重要文件的位置:
- 证书文件:
/etc/letsencrypt/live/yourdomain.com/
目录下的fullchain.pem
(包含您的证书和中间证书) 和privkey.pem
(您的私钥)。live
目录下的文件是实际文件的软链接,它们指向/etc/letsencrypt/archive/yourdomain.com/
目录下带有版本号的实际文件。您应该始终在 Nginx 配置中使用live
目录下的路径,因为它们在续期后会自动更新软链接,无需修改 Nginx 配置。 - 推荐 SSL 配置:
/etc/letsencrypt/options-ssl-nginx.conf
,由 Certbot 生成,包含 Let’s Encrypt 推荐的 SSL 设置以提高安全性评级。 - DH 参数文件:
/etc/letsencrypt/ssl-dhparams.pem
,用于增强密钥交换安全性。
通过查看被修改的 Nginx 配置文件,您可以清楚地了解 Certbot 做了哪些更改。这个文件通常位于 /etc/nginx/sites-available/
或 /etc/nginx/conf.d/
目录下,其文件名可能包含您的域名,例如 yourdomain.conf
或 yourdomain-le-ssl.conf
(Certbot 可能为您创建新的 ssl 配置文件)。
7. 验证 SSL 配置:确认一切正常
安装证书后,您需要验证它是否正常工作以及配置是否安全。
-
通过浏览器访问:
- 尝试使用
https://yourdomain.com
访问您的网站。 - 检查浏览器地址栏,应该显示一个锁标志,表示连接是安全的。点击锁标志可以查看证书详情,确认颁发者是 Let’s Encrypt,并且证书覆盖了您访问的域名。
- 如果您选择了 HTTP 重定向,尝试使用
http://yourdomain.com
访问,看是否会自动跳转到 HTTPS。
- 尝试使用
-
使用在线 SSL 检查工具:
- 访问 SSL Labs 的 SSL Server Test (
https://www.ssllabs.com/ssltest/
)。 - 在输入框中输入您的域名,然后点击提交。
- 这个工具会深度分析您的 SSL 配置,包括证书链、协议支持、密码套件、安全性漏洞等。
- 目标是获得 A 或 A+ 的评级。Certbot 提供的默认配置通常可以达到 A 或 A+。检查是否有任何警告或错误需要解决。
- 访问 SSL Labs 的 SSL Server Test (
8. 自动续期:确保证书始终有效
Let’s Encrypt 证书的有效期只有 90 天。为了避免证书过期导致网站访问中断,您必须定期续期。Certbot 的一个主要优势就是自动化续期。
Certbot 自动设置续期:
在安装过程中,Certbot 通常会自动为您在系统中设置一个定时任务来定期运行续期检查。这个定时任务可能是通过 cron
或 systemd timers
实现的。
- Cron: 您可以在
/etc/cron.d/certbot
文件中找到相应的 cron 任务配置(具体位置可能因系统而异)。 - Systemd Timers: 在使用 systemd 的系统上,您可能看到
certbot.timer
和certbot.service
单元。您可以使用sudo systemctl status certbot.timer
来检查它的状态。
这个定时任务通常会每天运行两次(或其他周期),并执行类似 certbot renew
的命令。
certbot renew
命令:
certbot renew
命令会检查所有由 Certbot 管理的证书。如果一个证书在未来的 30 天内即将过期,certbot renew
就会尝试续期它。续期成功后,Certbot 会自动重新加载(或重启)Nginx 服务,以便使用新的证书。
测试续期过程:
您可以随时运行一个“空跑”(dry run)来测试续期过程是否能够成功,而不会真正进行续期操作。
bash
sudo certbot renew --dry-run
这个命令会模拟续期过程,如果您看到类似 Congratulations, all simulated renewals succeeded
的输出,说明自动续期设置是正常的。如果在测试过程中遇到错误,您需要根据错误信息进行排查。
手动续期(不推荐日常使用):
如果您因为某种原因需要立即尝试续期(例如在排除故障时),可以强制运行续期,即使证书还没到期:
bash
sudo certbot renew --force-renewal
警告: 请勿频繁使用 --force-renewal
,这可能导致超出 Let’s Encrypt 的速率限制。正常情况下应该依赖自动续期。
9. 进阶配置(可选):提升安全性与性能
Certbot 提供的默认配置已经相当不错,通常能让您获得 A 或 A+ 的 SSL Labs 评分。但您还可以进行一些额外的配置来进一步增强安全性或性能。
HTTP Strict Transport Security (HSTS)
HSTS 是一种安全策略机制。一旦网站设置了 HSTS 头,浏览器在接下来的一段时间内(由 max-age
指定)将强制使用 HTTPS 访问该网站,即使用户手动输入 http://
或点击 HTTP 链接。这可以防止 SSL 剥离攻击。
在您的 HTTPS server
块内添加以下行:
“`nginx
在 listen 443 ssl; … 配置下方添加
add_header Strict-Transport-Security “max-age=63072000; includeSubDomains; preload” always;
“`
max-age=63072000
: 设置 HSTS 策略的有效期(秒)。这里设置为 2 年(63072000 秒)。includeSubDomains
: 表示该策略也应用于所有子域名。preload
: 这是一个可选参数,如果您计划将您的域名提交到 HSTS Preload List(浏览器内置的 HSTS 列表),可以加上。一旦添加到这个列表,即使用户第一次访问您的网站,浏览器也会强制使用 HTTPS。请注意,一旦域名被列入 preload 列表,将很难移除,务必在确认所有子域名都支持 HTTPS 后再考虑。always
: 确保该头信息在任何响应中都添加(即使是错误页面)。
添加 HSTS 后,请测试 Nginx 配置并重新加载:
bash
sudo nginx -t
sudo nginx -s reload
注意: HSTS 是一个强大的安全特性,但也意味着一旦设置并被用户浏览器缓存,在 max-age
期间内,如果您的网站不再支持 HTTPS(例如您移除了证书或 SSL 配置),部分用户将无法访问您的网站。请谨慎使用,并确保您的 HTTPS 配置稳定。
OCSP Stapling
OCSP (Online Certificate Status Protocol) 用于检查证书是否被吊销。OCSP Stapling 是一种优化机制,由服务器定期查询证书颁发机构(CA)获取证书的吊销状态,并在 TLS 握手时“钉住”(staple)这个状态给浏览器。这样,浏览器就不需要自己去查询 CA,从而加快了握手速度并提高了用户隐私。
Certbot 自动生成的 options-ssl-nginx.conf
文件通常已经包含了启用 OCSP Stapling 的配置,例如:
“`nginx
included in /etc/letsencrypt/options-ssl-nginx.conf
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/letsencrypt/live/yourdomain.com/chain.pem; # 指向中间证书链文件
``
ssl_trusted_certificate
确保指令正确指向了您的中间证书链文件(Certbot 在
fullchain.pem中包含了它,但单独的
chain.pem文件也是可用的,并且是
ssl_trusted_certificate指令所需的)。Certbot 生成的
options-ssl-nginx.conf` 文件通常会处理好这一点。您可以通过 SSL Labs 测试来确认 OCSP Stapling 是否已启用并正常工作。
10. 常见问题与故障排除
在配置过程中,您可能会遇到一些问题。以下是一些常见问题及其解决方法:
- 防火墙问题: 确保您的服务器防火墙(如 ufw, firewalld)或云服务提供商的安全组允许来自 Let’s Encrypt 验证服务器的流量访问您的服务器的 80 端口(对于 HTTP-01 验证)和 443 端口(HTTPS)。如果您使用了 ufw,可以运行
sudo ufw allow 'Nginx Full'
来同时开放 80 和 443 端口。 - Nginx 配置错误: 在运行
certbot --nginx
之前,务必使用sudo nginx -t
测试您的 Nginx 配置。Certbot 需要一个有效的 Nginx 配置来正确识别域名并进行修改。如果 Certbot 报错说找不到配置或域名,很可能是 Nginx 配置有问题或server_name
没有正确匹配。 - 域名解析问题: 确保您的域名已经正确地通过 A/AAAA 记录指向了您的服务器的公共 IP 地址。您可以使用
ping yourdomain.com
或dig yourdomain.com A +short
命令来检查 DNS 解析是否正确。Certbot 必须能够通过您的域名从公共网络访问到您的服务器。 - Certbot 权限问题: Certbot 需要有读取和写入 Nginx 配置文件以及
/etc/letsencrypt
目录的权限。通常使用sudo
运行 Certbot 可以解决权限问题。 - Let’s Encrypt 速率限制: Let’s Encrypt 对每个域名和 IP 地址在一定时间内颁发证书的数量有限制。如果您频繁地尝试颁发证书(例如在测试或调试时),可能会触发速率限制。在测试阶段,可以使用
--dry-run
选项,或者使用 Let’s Encrypt 的 staging 环境 (certbot --staging ...
),staging 环境的证书不受速率限制,但不会被浏览器信任。 - 续期失败: 如果
certbot renew --dry-run
失败,或者您收到 Let’s Encrypt 关于证书即将过期的邮件通知,说明自动续期可能遇到了问题。常见原因包括:- Nginx 配置在证书颁发后被修改,导致 Certbot 无法找到正确的
server
块或验证目录。 - 防火墙阻止了 Let’s Encrypt 验证服务器访问 80 端口。
- 网站根目录权限问题,Certbot 无法写入验证文件。
- Certbot 的 cron job 或 systemd timer 未正确安装或运行。
检查 Certbot 的日志文件(通常在/var/log/letsencrypt/
)可以获得详细的错误信息,帮助您定位问题。
- Nginx 配置在证书颁发后被修改,导致 Certbot 无法找到正确的
- 浏览器显示证书不受信任:
- 检查是否访问的是正确的域名。
- 检查服务器时间是否同步,如果服务器时间比实际时间慢很多,可能导致证书被认为尚未生效或已过期。
- 检查在线 SSL 检查工具的报告,看是否存在证书链不完整的问题 (
fullchain.pem
应该包含了完整的证书链)。Certbot Nginx 插件通常会正确配置这一点。
11. 总结
通过 Certbot 与 Nginx 的结合,为您的网站启用和管理 SSL 证书变得非常高效。本指南详细介绍了从安装 Certbot、准备 Nginx 配置、使用 Certbot 获取和配置证书,到验证、自动续期以及进阶配置的整个过程。
为网站配置 HTTPS 是提升安全性和用户信任度的重要一步。通过遵循本指南,您可以轻松地为您的 Nginx 网站添加免费的 Let’s Encrypt SSL 证书,并确保其自动续期,让您专注于网站内容和功能本身。
请记住,网络安全是一个持续的过程。定期检查您的 SSL 配置(例如使用 SSL Labs),并确保您的服务器和软件(包括 Certbot 和 Nginx)保持更新,是维护网站安全的关键。
祝您配置顺利,并享受一个更安全、更快速的互联网!