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 环境)
|
||||
|
||||
### 单域名申请
|
||||
|
||||
```bash
|
||||
# 测试申请证书
|
||||
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
|
||||
```
|
||||
|
||||
### 多域名申请(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. 配置自动续期
|
||||
|
||||
### 使用 systemd timer(推荐)
|
||||
@ -166,10 +211,13 @@ python3 ssl_manager.py request --domain your-domain.com
|
||||
## 常用命令
|
||||
|
||||
```bash
|
||||
# 申请证书
|
||||
# 申请单域名证书
|
||||
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
|
||||
|
||||
# 续期所有证书
|
||||
|
||||
@ -375,13 +375,14 @@ class APISIXSSLManager:
|
||||
additional_domains: 额外域名列表
|
||||
max_retries: 最大重试次数(默认3次)
|
||||
"""
|
||||
# 确保 webroot 路由存在(为当前域名创建)
|
||||
self.ensure_webroot_route(domain)
|
||||
|
||||
domains = [domain]
|
||||
if additional_domains:
|
||||
domains.extend(additional_domains)
|
||||
|
||||
# 确保所有域名的 webroot 路由都存在
|
||||
for d in domains:
|
||||
self.ensure_webroot_route(d)
|
||||
|
||||
# 构建 certbot 命令
|
||||
cmd = [
|
||||
self.certbot_path,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user