在这个隐私和安全日益重要的时代,如果你运营的网站还在用明文的 HTTP 协议,那地址栏旁边那个“不安全”的警告,是不是让你看着有点心慌慌?用户看到这个可能也会“用脚投票”,扭头就走。而且,搜索引擎(比如 Google)也早就明确表示,HTTPS 是影响排名的一个因素。所以,给网站启用 HTTPS 加密,从“可选配置”变成“基础标配”,已经是大势所趋。
“可是,搞 HTTPS 不是要花钱买 SSL 证书吗?还得自己手动配置,听说挺复杂的,我技术不太行啊……” 如果你有这样的顾虑,那么我要给你介绍两位“大救星”:
- Let's Encrypt: 这是一个由非营利组织 ISRG 发起的免费、开放、自动化的证书颁发机构 (CA)。它提供的 SSL/TLS 证书是完全免费的,并且被所有主流浏览器信任。简直是我等“穷站长”和开发者的福音!
- Certbot: 这是由 EFF 开发和维护的一个客户端工具。它的作用就是自动化地与 Let's Encrypt CA 进行交互,帮你完成域名验证、证书获取、以及(最厉害的是)自动配置你的 Web 服务器(如 Nginx 或 Apache)来使用这个证书,甚至还能帮你设置好证书的自动续期!有了它,申请和管理 Let's Encrypt 证书的过程变得极其简单。
可以把 Let's Encrypt 想象成一个免费发放“网站安全身份证”的机构,而 Certbot 就是一个超级智能、任劳任怨的“代办机器人”,你只需要告诉它你的域名和服务器类型,它就能帮你跑前跑后,把申请、配置、续期这些繁琐事儿全自动搞定!
这篇教程,我就带你手把手地在你的 Linux 服务器上安装和使用 Certbot,分别为最常见的两大 Web 服务器——Nginx 和 Apache——配置免费的 Let's Encrypt SSL 证书。跟着步骤来,保证让你轻松给网站“上锁”!
准备工作:在开始之前你需要什么?
在召唤 Certbot 这个“机器人”之前,请确保你的服务器已经满足以下基本条件:
- 一台运行 Linux 的服务器:本教程主要以 Ubuntu 22.04 为例进行演示,但 Certbot 也支持 Debian, CentOS, Fedora 等其他主流发行版(具体安装命令可能略有不同)。
- 安装并运行了 Nginx 或 Apache:你需要已经安装好了 Nginx 或 Apache,并且已经配置了一个基本的虚拟主机(Server Block 或 VirtualHost),能够通过 HTTP (80 端口) 正常访问你的网站域名。
- 一个注册好的域名:你需要拥有一个域名(比如
yourdomain.com
),并且已经将这个域名(以及你想要一起加密的子域名,如www.yourdomain.com
)的 DNS 解析正确地指向了你这台服务器的公网 IP 地址。- 检查方法: 在你本地电脑或其他地方
ping yourdomain.com
,看看返回的 IP 地址是不是你服务器的 IP。 - 极其重要: 这是 Let's Encrypt 验证你确实拥有该域名的关键一步(通常通过 HTTP-01 验证方式),如果 DNS 解析不对,Certbot 申请证书一定会失败!
- 检查方法: 在你本地电脑或其他地方
- 拥有服务器的
sudo
或root
权限:因为安装软件和修改 Web 服务器配置需要管理员权限。 - 可以通过 SSH 访问服务器:你需要能登录到服务器的命令行界面来执行命令。
确认以上条件都满足了?很好,我们可以开始召唤 Certbot 了!
第一步:安装 Certbot - 你的“证书申请机器人”
我们需要先把 Certbot 这个工具安装到服务器上。官方最推荐的安装方式是使用 Snap 包管理器,因为它能确保你使用的是最新版本的 Certbot,并且它自带所有依赖,能跨不同的 Linux 发行版保持一致性。
- 确保
snapd
已安装并更新: 大多数现代 Ubuntu 系统自带snapd
。对于其他系统,或者不确定的情况,可以执行相关安装和更新命令(具体命令请参考 Certbot 官网或你的发行版文档)。确保 snapd 核心是最新: [提示:请将以下代码片段复制并粘贴到 WordPress 的“代码”区块中]sudo snap install core; sudo snap refresh core
- 安装 Certbot: 确保没有旧的通过 apt/yum 安装的 Certbot 存在(如有,先卸载)。然后通过 Snap 安装: [提示:请将以下代码片段复制并粘贴到 WordPress 的“代码”区块中]
sudo snap install --classic certbot
- 创建 Certbot 命令的符号链接: 为了方便直接使用
certbot
命令: [提示:请将以下代码片段复制并粘贴到 WordPress 的“代码”区块中]sudo ln -s /snap/bin/certbot /usr/bin/certbot
安装完成后,你可以运行 certbot --version
来检查是否安装成功以及查看版本号。
第二步:为 Nginx 获取并安装证书
如果你使用 Nginx,Certbot 的 Nginx 插件能帮你自动化大部分工作。
- 运行 Certbot 命令: 将
yourdomain.com
和www.yourdomain.com
替换成你自己的域名。用多个-d
参数指定所有需要包含的域名。 [提示:请将以下代码片段复制并粘贴到 WordPress 的“代码”区块中]sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com
--nginx
参数告诉 Certbot 使用 Nginx 插件。 - 根据提示进行交互: 首次运行会要求你输入邮箱(用于续期提醒)、同意服务条款、以及选择是否分享邮箱给 EFF。
- 等待验证和配置完成: Certbot 会自动进行 HTTP-01 验证(确保你的服务器 80 端口能被公网访问!),下载证书,并自动修改你的 Nginx 虚拟主机配置,添加 HTTPS 相关指令(
listen 443 ssl http2
,ssl_certificate
,ssl_certificate_key
等)并设置 HTTP 到 HTTPS 的跳转。 - 查看结果: 成功后会有祝贺信息,告知证书位置和有效期。
- 验证 Nginx 配置并测试:
- 检查配置语法:
sudo nginx -t
。 - 重载 Nginx(Certbot 通常会自动做):
sudo systemctl reload nginx
。 - 用浏览器访问
https://yourdomain.com
,检查地址栏的安全锁标志。 - (推荐)用 SSL Labs 工具全面检测 HTTPS 配置。
- 检查配置语法:
对于 Nginx 用户,过程通常非常顺畅。
第三步:为 Apache 获取并安装证书
如果你使用 Apache(服务名可能是 apache2
或 httpd
),过程类似,只需更换插件参数。
- 确保 Apache 的
mod_ssl
模块已启用: 检查并启用 SSL 模块,然后重启 Apache。 [提示:请将以下代码片段复制并粘贴到 WordPress 的“代码”区块中]# Debian/Ubuntu sudo a2enmod ssl sudo systemctl restart apache2 # CentOS/RHEL (通常通过安装 mod_ssl 包启用) # sudo yum install mod_ssl -y # sudo systemctl restart httpd
- 运行 Certbot 命令 (使用 Apache 插件): [提示:请将以下代码片段复制并粘贴到 WordPress 的“代码”区块中]
sudo certbot --apache -d yourdomain.com -d www.yourdomain.com
--apache
参数告诉 Certbot 使用 Apache 插件。 - 根据提示进行交互(同 Nginx)。
- 等待验证和配置完成: Certbot 会自动完成验证,下载证书,并修改 Apache 的虚拟主机配置文件,添加
SSLEngine on
,SSLCertificateFile
,SSLCertificateKeyFile
等指令,并设置 HTTP 到 HTTPS 跳转。 - 查看结果并测试:
- 检查配置语法:
sudo apachectl configtest
(或sudo httpd -t
)。 - 重载 Apache(Certbot 通常会自动做):
sudo systemctl reload apache2
(或httpd
)。 - 用浏览器访问
https://yourdomain.com
,检查安全锁和证书。 - 用 SSL Labs 进行测试。
- 检查配置语法:
使用 Apache 插件同样可以实现高度自动化。
第四步:理解证书文件与自动续期 - 让“通行证”永不过期
证书拿到手了,但事情还没完。你需要了解证书放在哪,以及如何让它一直有效。
- 证书文件在哪里? Certbot 通常将证书相关文件存放在
/etc/letsencrypt/live/yourdomain.com/
目录下(yourdomain.com
是你的主域名)。里面有几个关键文件(实际是符号链接):cert.pem
: 服务器证书。chain.pem
: 中间证书链。fullchain.pem
: 完整证书链(服务器配置通常用这个)。privkey.pem
: 证书私钥(极其重要,保密!)。
- 自动续期的“魔法”: Let's Encrypt 证书有效期只有 90 天。但别担心,Certbot 最强大的地方在于它能**自动续期**!安装 Certbot 时,它通常会自动设置一个系统计划任务(systemd timer 或 cron job),每天运行两次检查证书有效期。当证书还剩 30 天或更少时,它会自动尝试续期,成功后还会自动帮你重载 Web 服务器配置。全程自动化,你几乎不用管!
- 如何测试自动续期是否正常工作? 你可以运行一个“模拟续期”命令来检查: [提示:请将以下代码片段复制并粘贴到 WordPress 的“代码”区块中]
sudo certbot renew --dry-run
如果命令成功执行且没有报错,说明自动续期机制配置正常。 - 检查续期任务本身: 想确认那个定时任务确实在?可以这样检查: [提示:请将以下代码片段复制并粘贴到 WordPress 的“代码”区块中]
# 检查 systemd 定时器 sudo systemctl list-timers | grep certbot # 或者检查 cron 任务 # sudo ls -l /etc/cron.d/certbot
只要你首次配置成功,并且 Certbot 能正常运行,你的证书就能持续自动续期,HTTPS 永不掉线。
(可选) 获取通配符证书 (*.yourdomain.com) - 进阶操作
有时你希望一张证书能保护主域名及其下所有一级子域名(如 blog.
, shop.
, api.
等)。这就是通配符证书。
Let's Encrypt 支持免费通配符证书,但它**只能通过 DNS-01 方式验证**,你需要证明你对域名的 DNS 解析有控制权。
如何获取?
- 手动模式 (不推荐,无法自动续期): [提示:请将以下代码片段复制并粘贴到 WordPress 的“代码”区块中]
sudo certbot certonly --manual --preferred-challenges=dns -d yourdomain.com -d '*.yourdomain.com' --server https://acme-v02.api.letsencrypt.org/directory
执行后,Certbot 会要求你手动去你的 DNS 服务商那里添加指定的 TXT 记录。验证过程需要人工干预,且无法自动续期。 - 使用 DNS 插件 (推荐,可自动续期): Certbot 支持多种 DNS 服务商插件(如 Cloudflare, Route53, GoDaddy, 阿里云 DNS, DNSPod 等)。你需要先安装对应的插件,并配置好该 DNS 服务商的 API 访问凭证。 [提示:请将以下代码片段复制并粘贴到 WordPress 的“代码”区块中]
# 示例:使用 Cloudflare 插件 (需要先安装 certbot-dns-cloudflare 插件并配置凭证文件) sudo certbot certonly --dns-cloudflare --dns-cloudflare-credentials /etc/letsencrypt/cloudflare.ini -d yourdomain.com -d '*.yourdomain.com' --server https://acme-v02.api.letsencrypt.org/directory
这种方式可以实现通配符证书的全自动获取和续期。配置相对复杂,请参考 Certbot 官方文档和你 DNS 服务商插件的具体说明。
获取通配符证书后,你还需要手动配置 Nginx/Apache 来使用它。
结论:拥抱免费 HTTPS,让安全成为标配
怎么样?是不是发现给网站加上那把象征安全的“小锁头”,其实并没有想象中那么复杂和昂贵?
有了 Let's Encrypt 提供的免费证书,再加上 Certbot 这个得力的“自动化助手”,无论是 Nginx 还是 Apache 用户,都可以非常轻松地为自己的网站启用 HTTPS 加密,并且享受自动续期的便利。这无疑是所有网站管理员和开发者的巨大福音。
现在,你已经掌握了使用 Certbot 为你的 Web 服务器配置 Let's Encrypt 证书的核心步骤。不要再犹豫了,赶紧行动起来,让你和你的用户都能享受更安全的网络浏览体验吧!让 HTTPS 成为我们每一个网站的基础配置,这在 2025 年,理应如此。