feat: 支持多域名证书申请(SAN证书)
- 在 QUICKSTART.md 中添加多域名申请的详细说明和示例 - 修复多域名申请时只为所有域名创建 webroot 路由的问题 - 支持使用 --additional-domains 参数申请包含多个域名的证书
This commit is contained in:
parent
db30f3d7f1
commit
8ff3bf27ab
@ -85,6 +85,8 @@ curl -X PUT 'http://localhost:9180/apisix/admin/routes/certbot-webroot' \
|
|||||||
|
|
||||||
## 5. 测试申请证书(Staging 环境)
|
## 5. 测试申请证书(Staging 环境)
|
||||||
|
|
||||||
|
### 单域名申请
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# 测试申请证书
|
# 测试申请证书
|
||||||
python3 ssl_manager.py request --domain your-domain.com
|
python3 ssl_manager.py request --domain your-domain.com
|
||||||
@ -93,6 +95,49 @@ python3 ssl_manager.py request --domain your-domain.com
|
|||||||
python3 ssl_manager.py check --domain your-domain.com
|
python3 ssl_manager.py check --domain your-domain.com
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### 多域名申请(SAN 证书)
|
||||||
|
|
||||||
|
一个证书可以包含多个域名(Subject Alternative Names),适用于:
|
||||||
|
- 主域名和 www 子域名
|
||||||
|
- 多个相关域名
|
||||||
|
- 通配符域名的替代方案
|
||||||
|
|
||||||
|
**方法一:使用 `--additional-domains` 参数**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 申请包含多个域名的证书
|
||||||
|
python3 ssl_manager.py request --domain jingrowtools.com --additional-domains www.jingrowtools.com
|
||||||
|
|
||||||
|
# 或者使用简写 -a
|
||||||
|
python3 ssl_manager.py request -d example.com -a www.example.com api.example.com
|
||||||
|
```
|
||||||
|
|
||||||
|
**方法二:多次使用 `-d` 参数(如果支持)**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 注意:certbot 会自动将所有 -d 参数中的域名包含在一个证书中
|
||||||
|
python3 ssl_manager.py request --domain example.com --additional-domains www.example.com
|
||||||
|
```
|
||||||
|
|
||||||
|
**说明:**
|
||||||
|
- 主域名(`--domain`)将作为证书名称
|
||||||
|
- 所有域名(主域名 + 额外域名)都会被包含在证书的 SAN(Subject Alternative Names)中
|
||||||
|
- 证书申请成功后,会自动同步到 APISIX,所有域名都可以使用同一个证书
|
||||||
|
- 续期时只需要使用主域名:`python3 ssl_manager.py renew --domain example.com`
|
||||||
|
|
||||||
|
**示例:**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 为 example.com 和 www.example.com 申请证书
|
||||||
|
python3 ssl_manager.py request --domain example.com --additional-domains www.example.com
|
||||||
|
|
||||||
|
# 为多个子域名申请证书
|
||||||
|
python3 ssl_manager.py request --domain api.example.com --additional-domains api2.example.com api3.example.com
|
||||||
|
|
||||||
|
# 检查证书(使用主域名)
|
||||||
|
python3 ssl_manager.py check --domain example.com
|
||||||
|
```
|
||||||
|
|
||||||
## 6. 配置自动续期
|
## 6. 配置自动续期
|
||||||
|
|
||||||
### 使用 systemd timer(推荐)
|
### 使用 systemd timer(推荐)
|
||||||
@ -166,10 +211,13 @@ python3 ssl_manager.py request --domain your-domain.com
|
|||||||
## 常用命令
|
## 常用命令
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# 申请证书
|
# 申请单域名证书
|
||||||
python3 ssl_manager.py request --domain example.com
|
python3 ssl_manager.py request --domain example.com
|
||||||
|
|
||||||
# 续期证书
|
# 申请多域名证书(SAN 证书)
|
||||||
|
python3 ssl_manager.py request --domain example.com --additional-domains www.example.com api.example.com
|
||||||
|
|
||||||
|
# 续期证书(多域名证书续期时只需指定主域名)
|
||||||
python3 ssl_manager.py renew --domain example.com
|
python3 ssl_manager.py renew --domain example.com
|
||||||
|
|
||||||
# 续期所有证书
|
# 续期所有证书
|
||||||
|
|||||||
@ -375,13 +375,14 @@ class APISIXSSLManager:
|
|||||||
additional_domains: 额外域名列表
|
additional_domains: 额外域名列表
|
||||||
max_retries: 最大重试次数(默认3次)
|
max_retries: 最大重试次数(默认3次)
|
||||||
"""
|
"""
|
||||||
# 确保 webroot 路由存在(为当前域名创建)
|
|
||||||
self.ensure_webroot_route(domain)
|
|
||||||
|
|
||||||
domains = [domain]
|
domains = [domain]
|
||||||
if additional_domains:
|
if additional_domains:
|
||||||
domains.extend(additional_domains)
|
domains.extend(additional_domains)
|
||||||
|
|
||||||
|
# 确保所有域名的 webroot 路由都存在
|
||||||
|
for d in domains:
|
||||||
|
self.ensure_webroot_route(d)
|
||||||
|
|
||||||
# 构建 certbot 命令
|
# 构建 certbot 命令
|
||||||
cmd = [
|
cmd = [
|
||||||
self.certbot_path,
|
self.certbot_path,
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user