Home Knowledge base Skyline Cloud 如何使用 Let's Encrypt 配置免费 SSL(自动续期) KNOWLEDGE BASE

如何使用 Let's Encrypt 配置免费 SSL(自动续期)

一份精确的分步指南,教你在 Nginx 上使用 Certbot 为站点配置免费的 Let's Encrypt SSL 证书,并通过 systemd 实现可靠的自动续期,适用于托管在沙特阿拉伯的服务器。

如何使用 Let's Encrypt 配置免费 SSL(自动续期)

一份精确的分步指南,教你在 Nginx 上使用 Certbot 为站点配置免费的 Let's Encrypt SSL 证书,包括通过 systemd 实现可靠的自动续期,适用于托管在沙特阿拉伯的服务器。

为什么选择 Let's Encrypt 免费 SSL

每一个公开的网站都需要 HTTPS。浏览器会将纯 HTTP 页面标记为“不安全”,搜索引擎更青睐加密站点,而沙特 PDPL 框架下的数据保护要求也将对传输中的流量进行加密列为基本要求。Let's Encrypt 是一家免费、自动化的非营利证书颁发机构,受到所有主流浏览器的信任。配合官方 ACME 客户端 Certbot,你可以零成本、零手动操作地签发和续期证书。

本指南将介绍如何在 Nginx(Ubuntu/Debian)上安装证书、验证证书,以及——最为重要的——配置不会出错的续期机制。续期部分比以往任何时候都更为关键:Let's Encrypt 证书的有效期历来为 90 天,而整个行业正在转向更短的有效期(45 天的证书配置已于 2026 年开始逐步推出)。手动续期已不再现实,因此自动化是必须的。

如果你在 Skyline Cloud 的 VPS 或云服务器上托管站点,并将其部署在沙特王国境内,下面的步骤可以在你的境内服务器上原样运行,让你的数据和 TLS 终端都保留在沙特本土。

前置条件

  • 一台运行 Ubuntu 22.04/24.04 或 Debian 的云服务器或 VPS,并具备 sudo 权限。
  • 一个域名(例如 example.com),其 DNS A 记录指向服务器的公网 IP。如果你通过 Skyline 的托管 DNS 管理域名,请在那里添加该记录并等待其生效。
  • 已安装 Nginx,并在 80 端口上为你的站点提供服务。
  • 防火墙和任何云安全组中均已开放 80443 端口。

在继续之前,请先验证 DNS 是否解析到你的服务器:

dig +short example.com

返回的 IP 必须与服务器的公网 IP 一致,否则域名验证将会失败。

第 1 步 — 安装 Certbot

推荐的方法是使用 snap 包,它由 EFF 维护并保持更新:

sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot

在没有 snap 的发行版上,APT 包同样可用:

sudo apt update
sudo apt install certbot python3-certbot-nginx

两种方式都包含下文所用的 Nginx 插件。

第 2 步 — 签发证书

Nginx 插件会一步到位地获取证书编辑你的 server 块以启用 HTTPS:

sudo certbot --nginx -d example.com -d www.example.com

Certbot 会提示你输入邮箱地址(用于到期提醒和账户恢复),并要求你同意 ACME 服务条款。当它询问是否将 HTTP 重定向到 HTTPS 时,请选择 Redirect(重定向),这样所有流量都会被加密。

在幕后,Certbot 使用 HTTP-01 验证:它会在 /.well-known/acme-challenge/ 下放置一个令牌,Let's Encrypt 通过 80 端口获取该令牌,以证明你拥有对该域名的控制权。

替代方案:webroot(不修改 Nginx 配置)

如果你不希望 Certbot 改动你的配置——当你的 TLS 设置由模板生成或统一管理时这很常见——可以使用 webroot 方式仅获取证书:

sudo certbot certonly --webroot -w /var/www/html -d example.com -d www.example.com

然后你需要在 Nginx 的 server 块中自行引用这些文件:

ssl_certificate     /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

务必让 Nginx 指向 live/ 路径,切勿指向带日期的 archive/ 文件——live/ 符号链接会在每次续期时更新。

第 3 步 — 验证 HTTPS 是否生效

重新加载 Nginx 并打开你的站点:

sudo nginx -t && sudo systemctl reload nginx

访问 https://example.com,你应当能看到锁形图标。通过命令行确认证书及其证书链:

echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -noout -issuer -dates

这会打印出签发者(Let's Encrypt)以及有效期范围。

第 4 步 — 配置自动续期

正是这一步能避免凌晨 3 点的服务中断。Certbot 是根据证书剩余有效期来续期的,而非固定的时间表,因此频繁运行续期检查是安全的——也是设计初衷。

大多数安装已经会创建续期任务。检查一下:

systemctl list-timers | grep certbot

如果你看到 certbot.timer,说明自动续期已经启用。默认情况下,它每天运行两次,并带有随机延迟,以分散 Let's Encrypt 服务器的负载。每天运行两次是 EFF 自己的推荐做法,足以从容应对 90 天以及更短的 45 天证书。

在不实际签发的情况下测试续期

请务必通过演练(dry run)端到端确认续期流程是否畅通,它会针对 staging 环境模拟续期:

sudo certbot renew --dry-run

演练成功意味着真实的续期也会成功。

续期后重新加载 Nginx

续期后的证书只有在 Nginx 重新加载后才会被实际提供。添加一个部署钩子(deploy hook),让每次续期时都自动完成重载:

sudo certbot renew --deploy-hook "systemctl reload nginx"

Certbot 会将此钩子保存到证书的续期配置中,因此后续的自动续期都会为你重新加载 Nginx。重载是平滑进行的,对在线连接的影响几乎为零。

如果不存在 timer(手动 cron)

在极少数没有预配置 timer 的系统上,可以添加一条 cron 任务,每天运行两次检查,并带有随机休眠时间:

echo "0 0,12 * * * root sleep $((RANDOM \% 3600)) && certbot renew -q --deploy-hook 'systemctl reload nginx'" | sudo tee /etc/cron.d/certbot

续期方式一览

方式 适用场景 是否重载 Nginx
certbot.timer(systemd) 大多数系统的默认方式;推荐 通过部署钩子
/etc/cron.d/certbot 没有 systemd timer 的系统 通过部署钩子
手动 certbot renew 仅用于一次性操作 / 故障排查 需添加 --deploy-hook

故障排查

  • 验证失败 / 超时: 在签发期间,80 端口必须可从互联网访问。请检查你的防火墙和云安全组。
  • DNS 不匹配: 重新运行 dig +short example.com,确认其与服务器 IP 一致。DNS 变更后请预留生效(传播)时间。
  • 触发速率限制: Let's Encrypt 对每个域名每周可签发的证书数量有限制。测试时请使用 --dry-run,以免耗尽你的配额。
  • 提供了错误的路径: 确保 Nginx 引用的是 /etc/letsencrypt/live/...,而不是 archive/

总结

现在,你已经在 Nginx 上拥有了一张免费、受浏览器信任的 SSL 证书,其续期可无人值守地自动运行,并会自动重新加载你的 Web 服务器——无论是 90 天还是更新的更短证书有效期都能从容应对。对于邮件而言,同样的原则也适用:安全的邮件传输同样重要,而 Skyline 企业邮箱托管 已为你预先配置好 TLS。想要更深入地了解证书、证书链与合规性,请参阅我们的 SSL 证书资源中心

准备好在一台快速、符合 PDPL 合规、位于王国境内并提供本地阿拉伯语支持的服务器上运行这一切了吗?创建你的 Skyline Cloud 账户,今天就部署一个安全的站点吧。

SKYLINE Engineering

@skyline

The engineering team at SKYLINE Industrial Solutions. We publish field-tested guides drawn from real KSA and GCC deployments.

See author profile
SKYLINE engineering services

Need this implemented for you?

Reading is free — building it right takes a team. SKYLINE engineers ship Skyline Cloud for Aramco vendors, banks, hospitals and government agencies across Saudi Arabia. Talk to us before you start.

Aramco Approved Contractor ISO 9001 · ISO 27001 SAMA CSF aligned NCA ECC ready 247+ KSA clients

Comments

0 total · 0 threads
Be the first to leave a comment.