当前位置: 首页 > news >正文

使用 Let’s Encrypt 免费申请泛域名 SSL 证书,并实现自动续期

环境准备

在开始之前,确保你具备以下条件:

  1. 一台可以访问互联网的服务器(Linux 环境,如 Ubuntu/CentOS)。
  2. Root权限或sudo权限。
  3. 一个已解析的域名(本文以example.com为例)

关于Let’s Encrypt

Let’s Encrypt是一个免费的、自动化的、开放的证书颁发机构(CA),提供免费 SSL 证书。它的目标是让所有网站都能轻松实现 HTTPS 加密,保障用户数据的安全。通过Let’s Encrypt,你可以为你的主域名、子域名,甚至泛域名配置安全证书,而且过程完全自动化,不需要手动申请和管理证书,官方推荐使用 Certbot。

Certbot工作流程

Certbot 是一个自动化工具,用于为网站部署和管理 HTTPS 证书(SSL/TLS 证书)。其核心工作原理基于ACME 协议(Automated Certificate Management Environment),主要步骤如下:

1.初始化

客户端(如 Certbot)向 Let’s Encrypt 注册账户,生成公私钥对,公钥用于身份验证。

2.域名验证

在申请证书之前,Let’s Encrypt 必须验证你对所申请域名的控制权。这是通过以下几种方式进行的:

  1. HTTP-01 验证:Let’s Encrypt 向你请求创建一个特定的文件,并放在你网站的指定路径下。它通过访问该文件来验证你是否控制该域名。
  2. DNS-01 验证:Let’s Encrypt 提供一条 DNS TXT 记录,要求你将其添加到域名的 DNS 设置中。它通过检查 DNS 记录来验证你对域名的控制权。
  3. TLS-ALPN-01验证:通过 TLS 握手时的扩展协议验证,Apache、Nginx 或 Certbot 短期內都不支持这种验证方式。

对于泛域名证书,必须使用DNS-01验证方式,因为 HTTP 验证不能跨域名层级进行。

3.证书申请和签发

一旦验证成功,客户端(如Certbot)生成公私钥对,并将CSR(证书签名请求)发给CA(如Let’s Encrypt) ,CA会生成一个 SSL 证书,并将其发放给申请者。这个证书包含了公钥、域名、有效期等信息,任何人都可以通过该证书与网站进行安全通信。

证书通常包括:

  • 域名证书(cert.pem
  • 私钥文件(privkey.pem
  • 中间 CA 证书链(chain.pem

4. 证书部署

certbot支持证书的自动部署,如果使用的nginx或者apache的默认配置方式,可以增加--nginx/apache配置选项实现自动部署。当然也可以选择手动部署,也很方便。

5.自动续期

Let’s Encrypt 的证书有效期为90 天,因此需要定期续期。Certbot 自动进行续期验证,确保你的网站不会因为证书过期而遭到用户的安全警告。

安装Certbot

Certbot是由Electronic Frontier Foundation (EFF)提供的一个开源工具,用于自动化从 Let’s Encrypt 获取和管理 SSL 证书。Certbot 会自动为你处理证书申请、安装和续期等过程。

Linux 系统

推荐使用 Linux 的 snapd包管理工具安装Certbot,支持snapd后可以使用如下命令安装Certbot。

sudo snap install --classic certbot #安装Certbot sudo ln -s /snap/bin/certbot /usr/local/bin/certbot #创建一个符号链接,确保可以执行certbot命令(相当于快捷方式)

其它系统平台

参考Certbot官网

单域名SSL证书

申请证书

如果你只需要为单个域名(如example.comwww.example.com)申请证书,可以使用以下命令:

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

如果还有子域名(如,api.example.com),可以在指令上继续增加(-d api.example.com)。

安装并配置证书

经过上面指令,一般会显示你申请成功的提示,并显示证书存储的路径。

默认路径为/etc/letsencrypt/live/<域名>/

使用以下命令查看证书详细信息

sudo certbot certificates

nginx配置示例

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; # 默认的ssl推荐配置 include /etc/letsencrypt/options-ssl-nginx.conf; ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; location / { proxy_pass http://127.0.0.1:8080; } # 如果配置的是静态网站,这里应是你的网站根目录 # location / { # root /html; # index index.html index.htm; # try_files $uri $uri/ =404; # } }

如果需要自动配置,增加--nginx。--nginx 需要服务器预先安装nginx,certbot获取到证书后会自动通过修改nginx的配置将证书安装到nginx上。--------没试过

自动续期

Let’s Encrypt 证书的有效期为90 天,为了避免证书过期,我们可以使用Cron Job设置自动续期。

首先,你可以手动测试续期是否正常:

# 首先,你可以手动测试续期是否正常: sudo certbot renew --dry-run # 如果没有报错,可以继续配置自动续期任务: sudo crontab -e # 在打开的编辑器中添加以下行,表示每10天凌晨 2 点执行自动续期任务: 0 2 */10 * * /usr/bin/certbot renew --quiet # --quiet 参数表示静默模式,不会输出非错误信息。

一般使用,这样就够了。

泛域名SSL证书

申请证书

泛域名证书(Wildcard Certificate)可以为同一主域名下的所有子域名提供 HTTPS 支持。例如,*.example.com可以覆盖blog.example.comapi.example.com等子域名。

Let’s Encrypt 要求通过DNS-01验证来申请泛域名证书。运行以下命令:

sudo certbot certonly --manual --preferred-challenges dns -d *.example.com -d example.com

Certbot 会要求你在 DNS 中创建一个特定的TXT 记录记录以验证域名的所有权。

_acme-challenge.example.com IN TXT "certbot给出的随机字符串"

前往你的域名 DNS 管理页面,添加该记录后,返回命令行按下Enter
如图:


大概等几十秒钟,确保 DNS 记录在全网传播开来,Certbot 可以查询到。
Certbot 在执行验证时会发起 DNS 查询,如果能找到所需的 TXT 记录并验证其值,认证就会成功,然后就会颁发证书。证书颁发后,这条TXT 记录就可以删除了。

这个是手动添加删除 DNS 对应的 TXT 记录,这里只是演示Certbot颁发证书的过程,实际情况下最好采用自动化脚本添加和删除 DNS 的 TXT 解析记录。

安装并配置证书

与之前单域名类似

自动续费

自动续费,需要使用脚本用于处理DNS-01验证的 DNS 记录添加和删除,请参考这篇文章,没有验证过。

http://www.jsqmd.com/news/812878/

相关文章:

  • shell 脚本中注释的正确写法是什么?
  • 招募Kiro大使!会员权益、内测资格等重磅福利等你领!
  • RAG:解锁大语言模型新能力,告别幻觉与知识陈旧!
  • 为AI智能体设计网站体验:AX设计原则与落地实践指南
  • 别再乱用multicycle约束了!一个真实案例带你搞懂ASIC/FPGA时序收敛中的-start与-end参数
  • 魔兽争霸III地图编辑器革命:HiveWE如何让地图制作效率提升5倍
  • Arm技术文档体系与合规使用指南
  • AI智能体架构实战:从规划、记忆到工具调用的核心组件解析
  • OpenCrab:面向中文开发者的开源项目导航与协作平台架构实践
  • 2026年比较好的母婴用品锂电池用户口碑推荐厂家 - 行业平台推荐
  • 基于MCP协议构建AI智能体工具网关:Orbis-mcp实战指南
  • AI都能直接生成代码了,程序员还有必要深究框架源码吗?
  • PowerToys Awake:如何彻底解决Windows休眠中断工作的烦恼?
  • 从零构建个人AI知识库:Quivr开源项目实战解析
  • ARM架构TLB失效机制与TLBIMVAH指令详解
  • 2026年4月铜雕供应商推荐,铜钟/铜牛/铜佛像/铜麒麟/铜雕/人物雕塑/动物雕塑/铜大缸/铜狮子,铜雕铸造厂哪家好 - 品牌推荐师
  • CipherGuard:编译器级密文侧信道攻击防护技术解析
  • Crawlio Browser Agent:让AI直接操作真实浏览器会话的MCP工具
  • AIWorkspace:基于Docker的一站式AI开发环境解决方案
  • Ariana Debugger:零侵入式代码调试与运行时观测实践指南
  • 2026年第二季度UVLED线光源优选剖析:润铎智能科技如何以综合实力脱颖而出 - 2026年企业推荐榜
  • 专利价值评估实战:从技术保护到商业竞争的核心方法论
  • Java程序员找不到工作别都怪行情!
  • 基于DGX Spark的多模型智能编排平台:架构、部署与生产实践
  • Kotlin 内联函数(inline)一篇看懂
  • AI智能体视频创作技能开发:从自动化流程到工程化部署
  • WSL2开发环境自动化配置:aether-kit工具实战指南
  • dotfiles工程化:用Git与符号链接打造可移植的开发环境
  • 基于MCP协议构建AI智能体情报分析服务器:从原理到工程实践
  • 读写分离与查询路由实战:从原理到Spring Boot代码实现