SSL证书申请

机构与工具简介

  • Let’s Encrypt:由 Mozilla、思科等巨头联合设立的公共非盈利证书颁发机构(CA)。它致力于推动全球 Web 的 100% 加密化,提供免费、自动化且受主流浏览器信任的标准化 X.509 证书。
  • Certbot:由电子前哨基金会(EFF)维护的开源工具。作为 ACME(自动证书管理环境)协议的客户端,它充当着服务器的“外交官”,负责自动与 CA 握手、完成验证并修改 Web 服务器配置。

核心原理:HTTP-01 验证模式

Let’s Encrypt 并不依赖人工审核,而是通过机器对话来验证域名的控制权。最常用的机制称为 HTTP-01 验证

  1. 发起申请:Certbot 向 Let’s Encrypt 声明需要为某域名申请证书。
  2. 下发暗号:Let’s Encrypt 返回一个专属的随机字符串(Token)。
  3. 放置文件:Certbot 自动在 Web 服务器的根目录下创建一个公开的隐藏路径:/.well-known/acme-challenge/,并将 Token 放入其中。
  4. 公网回源:Let’s Encrypt 的验证服务器通过 80 端口 (HTTP) 访问该路径。一旦成功读取并核对 Token 无误,即认定域名所有权,瞬间下发证书文件,随后 Certbot 会自动清理临时文件。

HTTP-01 验证强依赖服务器的 80 端口畅通。如果云服务器位于中国大陆节点,必须先完成工信部 ICP 备案。在未备案状态下,云厂商的物理防火墙会从外部直接阻断 80 端口,导致 Let’s Encrypt 无法读取 Token,从而引发 403 Forbidden 报错。

详细步骤

1. :Nginx 绑定域名

在签发之前,必须确保 Nginx 配置文件中已经绑定了你的域名,否则 Certbot 将无法识别该修改哪个配置。

打开 Nginx 配置文件(如 /etc/nginx/sites-available/default),找到 server_name 指令并修改:

Nginx

server {
    listen 80;
    # 将下划线替换为你的真实域名
    server_name yourdomain.com www.yourdomain.com; 
    root /var/www/html;
    # ...其他配置...
}

修改后执行 sudo nginx -t 测试语法,并使用 sudo systemctl reload nginx 重载配置。

2. 安装 Certbot 及其环境插件

在 Ubuntu 系统中,直接通过 APT 包管理器安装:

Bash

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

3. 一键签发与部署

执行以下核心命令,启动全自动流程:

Bash

sudo certbot --nginx

运行后,按照终端提示依次输入邮箱(用于接收过期提醒)、同意开源协议,并选择需要开启 HTTPS 的域名编号,显示Successfully deployed certificate 即成功。

4. 验证自动续期 (Auto-Renewal)

Let’s Encrypt 的证书有效期为 90 天,但 Certbot 已经在系统中植入了定时任务,会在过期前自动续签。可以通过以下命令检查定时任务状态:

Bash

sudo systemctl status certbot.timer

底层原理

实际上,Certbot 自动修改了你的 Nginx 配置文件。如果你再次打开 /etc/nginx/sites-available/default,会发现certbot自动添加了这些配置:

Nginx

    # Certbot 自动添加了 443 端口的监听
    listen 443 ssl; # managed by Certbot
    
    # 自动挂载了刚刚下载好的证书公钥和私钥路径
    ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

不仅如此,它还在文件底部帮你写好了一个 301 重定向模块,确保所有通过 HTTP (80) 访问的流量,都会被强制跳转到安全的 HTTPS (443) 通道上。

版权声明:
本文由 Howard 原创发表于个人博客。
许可协议: 本文采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 (CC BY-NC-SA 4.0) 进行许可。可自由转载,但请务必注明原文出处,且不得用于商业目的。
本文链接: https://sallyharada.com/?p=84

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇