# Certbot - 证书申请原理与安装

## Certbot 证书申请本质在做什么？

当你执行一次证书申请（`certbot certonly` 或带插件的命令）时，本质是：

{{< steps >}}
{{< step >}}

**向证书颁发机构（CA）申请证书**

Certbot 默认对接的是 [Let’s Encrypt](https://letsencrypt.org/)（也可以对接其他 CA）。

{{< /step >}}
{{< step >}}

**证明"这个域名是你的"，让 CA 信任你有权申请这个域名的证书。**

这是核心步骤，叫 域名所有权验证（Domain Validation, DV）

Let’s Encrypt 会要求你完成一个挑战（challenge），常见两种：
- HTTP-01（最常见）
- DNS-01（最强大）
- TLS-ALPN-01（较少用）

{{< /step >}}
{{< step >}}

**验证成功后签发证书**

验证通过后：
- CA 签发证书
- 证书存储在 `/etc/letsencrypt/live/域名/`

{{< /step >}}
{{< step >}}

**后续自动续期**

Certbot 会：
- 自动续期（通常 60 天前）
- 通过 hook 或自动 reload 服务

{{< /step >}}
{{< /steps >}}



### 三种方式对比

| 方式 | 是否需要端口 | 是否支持通配符 | 是否推荐 |
| --- | --- | --- | --- |
| HTTP-01 | tcp:80 | 不支持 | 推荐（简单） |
| DNS-01 | 不需要 | 支持 | 推荐（强大） |
| TLS-ALPN-01 | tcp:443 | 不支持 | 不推荐（复杂） |

### 完整申请流程总结（重点）

一次完整申请可以理解为：

```
1. Certbot 发起申请
2. 生成验证 token
3. 部署验证（HTTP 或 DNS）
4. Let’s Encrypt 验证
5. 签发证书
6. 保存到本地
7. 设置自动续期
```

### 安装Certbot

**不同系统安装方式不同，以下是Debian的安装方法：**

{{< tabs "install debian certbot" >}}
{{< tab "certbot" >}}

```bash
 apt update && apt install certbot
```

{{< /tab >}}
{{< tab "nginx" >}}

```bash
 apt update && apt install certbot python3-certbot-nginx
```

{{< /tab >}}
{{< /tabs >}}

**优点**

{{< tabs "install debian certbot advantages" >}}
{{< tab "certbot" >}}

完全可控

适合自动化

适合复杂架构

{{< /tab >}}
{{< tab "nginx" >}}

自动识别 Nginx 配置

自动修改 server block

自动添加 HTTPS 配置

自动重载 Nginx

{{< /tab >}}
{{< /tabs >}}


