Youda's blog

努力工作 认真生活......

0%

Let’s Encrypt免费SSL证书申请

关于Cerbot

什么是 Certbot?

Certbot 是一个免费、开源的软件工具,用于在手动或自动管理的服务器上获取和部署 Let‘s Encrypt 的 SSL/TLS 证书。

它的核心目的是让网站能够轻松、免费地从 HTTP 切换到 HTTPS,从而实现加密通信,提升安全性和信任度。

您可以把它理解为一个“证书自动化管理机器人”。

核心价值与特点

  1. 完全免费:由非营利组织 EFF 开发维护,与 Let’s Encrypt 项目紧密合作,让 HTTPS 证书的获取成本降为零。
  2. 自动化:这是 Certbot 最大的亮点。它可以:
    • 自动获取证书:从 Let‘s Encrypt 申请新证书。
    • 自动部署证书:将证书配置到您的 Web 服务器(如 Nginx, Apache 等)。
    • 自动续期:SSL 证书有有效期(Let‘s Encrypt 的为90天),Certbot 可以设置定时任务自动续期,确保网站永远不会因为证书过期而中断服务,实现“一次设置,永久有效”。
  3. 安全:遵循最佳实践,自动处理私钥生成和证书管理流程,减少人为操作失误带来的安全风险。
  4. 简单易用:提供非常友好的命令行交互界面,即使不是安全专家也能轻松上手。通常只需一行命令即可完成所有配置。

Certbot 是如何工作的?

Certbot 使用 ACME协议 与 Let‘s Encrypt 的服务器进行通信,以验证您对域名的控制权。最常用的验证方式是 HTTP-01 挑战:

  1. 请求验证:您运行 Certbot 命令,指定您的域名。
  2. 接收挑战:Let’s Encrypt 服务器会给 Certbot 一个唯一的令牌。
  3. 完成挑战:Certbot 会在您网站的指定目录(例如 http://你的网站/.well-known/acme-challenge/)下放置一个包含该令牌的文件。
  4. 授权检查:Let‘s Encrypt 服务器尝试通过 HTTP 访问这个文件。如果能成功访问到正确的内容,就证明您控制着这个域名。
  5. 颁发证书:验证通过后,Let’s Encrypt 会向您的 Certbot 客户端颁发 SSL 证书。
  6. 部署证书:Certbot 会自动修改您的 Web 服务器(如 Nginx/Apache)配置文件,启用 HTTPS 并指向新获取的证书。

支持的环境

  • 操作系统:几乎所有主流的 Linux 发行版(Ubuntu, Debian, CentOS, Fedora 等)、macOS 和 BSD 家族。
  • Web 服务器
    • Apache:支持最好,可全自动配置。
    • Nginx:支持很好,现代版本也支持全自动配置。
    • 其他服务器(如 Tomcat, Caddy 等)可以通过“certonly”模式获取证书,然后手动配置。
  • 证书类型:支持单域名、多域名(SAN)和通配符证书(通配符证书通常需要使用 DNS-01 挑战方式)。

安装Cerbot

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

添加泛域名证书

1
sudo certbot certonly --manual --preferred-challenges dns -d *.abc.cn -d abc.cn

将生成的DNS记录 添加到域名后台的DNS解析,以证明自己对该域名拥有所有权
DNS记录

添加完成后等待1分钟,等待记录生效,然后回车(如果验证通过,则会自动下发证书;如果出现异常,重新进行当前步骤)

修改nginx配置,引入证书

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
server {
listen 443 ssl;
server_name home.abc.cn files.abc.cn blog.abc.cn;
ssl_certificate /etc/letsencrypt/live/abc.cn/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/abc.cn/privkey.pem;

location / {
proxy_pass http://localhost:7002; # 后端服务地址

# 必要的基础头部设置
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}

重新加载nginx systemctl reload nginx.service

浏览器访问链接:https://xxx.abc.cn 确认是否生效

附录:

参考文档:https://www.cnblogs.com/michaelshen/p/18538178