diff --git a/ssl_manager/QUICKSTART.md b/ssl_manager/QUICKSTART.md index c33535a..606ba26 100644 --- a/ssl_manager/QUICKSTART.md +++ b/ssl_manager/QUICKSTART.md @@ -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 # 续期所有证书 diff --git a/ssl_manager/ssl_manager.py b/ssl_manager/ssl_manager.py index 5239e90..940c967 100755 --- a/ssl_manager/ssl_manager.py +++ b/ssl_manager/ssl_manager.py @@ -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,