在如今的互联网环境下,为网站配置 SSL 证书至关重要,它是保障网站安全的标配操作。而国内目前的免费SSL证书只有三个月的有效期,需要3个月后手动部署,麻烦且一旦忘记部署,对网站的seo和运营是很有影响的,本教程将详细指导你如何利用 Let’s Encrypt 免费获取泛域名 SSL 证书,并实现自动续期,让你的网站安全地通过 HTTPS 加密连接与用户交互。
在开始操作之前,请确保你已经具备以下条件:
- 服务器环境:拥有一台能够访问互联网的服务器,且服务器需为 Linux 环境,例如 Ubuntu 或者 CentOS 系统。
- 权限要求:具备 Root 权限或者 sudo 权限,这样才能顺利执行后续的安装、配置等操作。
- 域名准备:准备好一个已经解析的域名,在本教程中我们以
seoaide.cn
为例进行讲解说明。
Let’s Encrypt 是一家免费、自动化且开放的证书颁发机构(CA),它旨在助力所有网站轻松达成 HTTPS 加密,切实保障用户数据安全。通过它,你可以为自己的主域名、子域名,甚至泛域名配置安全证书,整个过程高度自动化,无需手动进行繁杂的证书申请和管理工作,官方推荐使用 Certbot 工具来完成相关操作。
- 域名验证
在申请证书时,Let’s Encrypt 需要先验证你对所申请域名是否拥有控制权,验证方式主要有以下两种:
- HTTP-01 验证:Let’s Encrypt 会要求你在网站的指定路径下创建一个特定文件,然后通过访问该文件来确认你是否能控制该域名。不过要注意,对于泛域名证书,这种验证方式无法跨域名层级进行验证,所以不能使用。
- DNS-01 验证:Let’s Encrypt 会提供一条 DNS TXT 记录,你需要将其添加到域名的 DNS 设置当中,随后它会通过检查 DNS 记录来验证你对域名的控制权。申请泛域名证书时,必须采用这种验证方式。
- 证书生成:当域名验证成功后,Let’s Encrypt 会生成一个 SSL 证书,并发放给申请者。该证书包含了公钥以及域名相关信息,凭借这个证书,任何人都可以与你的网站建立安全通信连接。
- 证书安装:
- 手动安装:你可以自行手动安装证书,比如当你使用的是 docker 版的 nginx 服务器时,可能就需要手动操作。
- 自动安装(使用 Certbot):如果你的服务器上已经安装了 Nginx 或者 Apache 等服务器软件,Certbot 能够自动将证书安装到对应的 Web 服务器上,并且配置好相应的加密设置。自动安装更加便捷,不过手动配置会更具灵活性,例如当申请证书和 Web 服务器不在同一台电脑上时,手动配置就很有必要了。
- 自动续期:Let’s Encrypt 颁发的证书有效期仅为 90 天,所以需要定期进行续期操作。Certbot 能够自动完成续期验证工作,确保你的网站不会因为证书过期而向用户弹出安全警告信息。
Certbot 是一个命令行工具,它在整个 SSL 证书管理流程中起着关键的自动化作用,具体功能如下:
- 申请证书:运用 ACME 协议从 Let’s Encrypt 获取证书。
- 验证域名所有权:通过 HTTP-01 或 DNS-01 验证方式来确认你是否拥有相应域名。
- 申请证书:自动将证书安装到你的 Web 服务器上,并配置好相关的加密参数。
- 续期证书:定期自动对证书进行续期,有效避免证书过期情况的发生。
Certbot 的核心工作机制是借助 ACME 协议(自动证书管理环境)与 Let’s Encrypt 进行通信,依靠这套标准协议来实现证书申请、验证以及安装等流程的自动化,保障你的网站能够通过安全的 HTTPS 连接进行访问。
推荐使用 Linux 的 snap 包管理工具来安装 Certbot,具体安装命令如下:
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
如果是其他系统平台,请参考
Certbot 官网提供的对应安装指南进行操作。
若你仅需为单个域名(例如 seoaide.cn
和 www.seoaide.cn
)申请证书,可以执行以下命令(前提是服务器预先安装了 nginx,certbot 获取到证书后会自动通过修改 nginx 的配置将证书安装到 nginx 上):
sudo certbot --nginx -d seoaide.cn -d www.seoaide.cn
按照提示输入邮箱地址,并同意服务条款后,Certbot 就会自动完成证书的申请与安装工作。
由于 Let’s Encrypt 证书有效期为 90 天,为避免证书过期,我们可以借助 Cron Job 来设置自动续期任务,操作步骤如下:
- 手动测试续期是否正常:
sudo certbot renew --dry-run
若没有报错提示,说明续期功能正常,可以继续下一步操作。
- 配置自动续期任务:
sudo crontab -e
在打开的编辑器中添加以下内容,表示每天凌晨 2 点执行自动续期任务(--quiet
参数表示静默模式,执行时不会输出非错误信息):
0 2 * * * /usr/bin/certbot renew --quiet
泛域名证书(Wildcard Certificate)能够为同一主域名下的所有子域名提供 HTTPS 支持,例如,*.seoaide.cn
可以覆盖像 blog.seoaide.cn
、api.seoaide.cn
等众多子域名。
使用 DNS 验证来申请泛域名证书,需运行以下命令:
sudo certbot certonly --manual --preferred-challenges dns -d *.seoaide.cn -d seoaide.cn
Certbot 会要求你在 DNS 中创建一个特定的 TXT 记录来验证域名的所有权,格式如下:
_acme-challenge.seoaide.cn IN TXT "certbot给出的随机字符串"
接着,前往你的域名 DNS 管理页面,添加上述记录后,返回命令行按下 Enter 键。大概等待几十秒钟,确保 DNS 记录在全网传播开来,以便 Certbot 可以查询到。Certbot 在执行验证时会发起 DNS 查询,如果能找到所需的 TXT 记录并验证其值准确无误,认证就会成功,随后便会颁发证书。证书颁发后,这条 TXT 记录就可以删除了。这里只是为了演示 Certbot 颁发证书的过程而采用手动添加删除 DNS 对应的 TXT 记录方式,实际应用中,最好采用自动化脚本添加和删除 DNS 的 TXT 解析记录。