证书管理

证书管理 — 证书列表:域名 / CA / 服务器 / 验证方式 / 状态 / 过期时间 / 部署 / 自动续期 / 自动部署
在线演示:证书管理
Section titled “在线演示:证书管理”4 个 mock 域名,可以申请新证书、续期、下载、删除。完全本地。
| 域名 | DNS 提供商 | 关联服务器 | 到期时间 | 状态 | 操作 |
|---|---|---|---|---|---|
hk.example.com | Cloudflare | hk1.example.com | 2026-09-12(97 天后到期) | 正常 | |
us.example.com | Cloudflare | us1.example.com | 2026-07-03(26 天后到期) | 即将到期 | |
jp.example.com | Aliyun | jp1.example.comjp2.example.com | 2026-11-28(174 天后到期) | 正常 | |
old.example.com | Tencent | 未关联服务器 | 2026-05-15(23 天前到期) | 已过期 |
证书管理模块通过 ACME 协议自动申请和续期 TLS 证书。支持多种 DNS 提供商,证书自动同步到远程服务器。页面有两个选项卡:「证书列表」和「DNS 提供商」;顶部按钮为「刷新」「申请证书」「上传证书」。
支持的 DNS 提供商
Section titled “支持的 DNS 提供商”| 提供商 | 所需凭证 |
|---|---|
| Cloudflare | API Token |
| 阿里云 DNS | AccessKey ID + Secret |
| 腾讯云 DNSPod | SecretId + SecretKey |
| Namesilo | API Key |
在「DNS 提供商」选项卡点「添加 DNS 提供商」,选择类型后按提示填入凭证即可;系统会自动生成并校验配置:

添加 DNS 提供商:名称 + 提供商类型 + API 凭证
- 进入「证书管理」页面,点击「申请证书」
- 输入域名(支持通配符,如 *.example.com)
- 填写邮箱,选择 CA 提供商(默认 Let’s Encrypt)
- 验证方式选 DNS-01(通配符必须)并选择已添加的 DNS 提供商
- 申请泛域名时可开启「同时申请根域名和泛域名」,系统会把 example.com 与 *.example.com 作为同一张证书的 SAN
- 按需开启「自动续期」「自动部署」
- 提交后系统完成 DNS 验证;签发结果同时保存到数据库与证书目录

申请 SSL/TLS 证书:域名、邮箱、CA、验证方式、DNS 提供商、根域名 + 泛域名、自动续期、自动部署
已有证书(例如由 Certimate 或其他 ACME 客户端签发)可以直接粘贴 PEM 上传:

上传证书:域名 + 证书内容(PEM)+ 私钥内容(PEM);对话框顶部也给出了 API 上传方式
上传后证书出现在列表中,CA 显示为 manual,同样可以下载、部署到服务器。
下载与自动部署
Section titled “下载与自动部署”证书列表的「下载」会生成包含 fullchain.pem 与 privkey.pem 的压缩包。续期、重新签发或 Webhook 更新后,系统会重新下发到所有引用该证书的 Nginx 与 Xray 目录并替换旧文件;从 Agent 恢复历史 Xray 配置时也会先补发配置引用的证书。
证书到期前系统自动续期。续期成功后,证书文件自动更新到所有使用该证书的远程服务器。
证书文件路径(远程服务器): 证书: /root/cert/{domain}/fullchain.pem 私钥: /root/cert/{domain}/privkey.pem- VLESS/VMess/Trojan + TLS 入站需要 TLS 证书
- Hysteria2 / AnyTLS 入站需要 TLS 证书
- REALITY 入站不需要证书(使用目标站点证书)
添加节点向导在服务器 443 端口尚未配好证书时会弹出「SSL 配置」提示,可从那里一键为服务器配置证书与 Nginx 443。
Webhook 上传证书(Certimate 集成)
Section titled “Webhook 上传证书(Certimate 集成)”妙妙屋X 提供 HTTP 接口接收外部证书签发系统(如 Certimate)通过 webhook 推送的证书内容,落库后自动部署到所有标记了该域名的远程服务器。
Method: POST
URL: https://your-mmwx-host/api/admin/certificates/upload
鉴权: Authorization: Bearer <token> 或 MM-Authorization: <token>(系统设置里的全局 API Token,或 admin 用户在「API Token」管理页签发的个人 Token)
Content-Type: application/json
- domain — 证书绑定的主域名(如 *.example.com 或 a.example.com)
- cert_pem — 证书 PEM 文本,兼容两种格式:裸 PEM(以 —–BEGIN 开头)或 base64 编码(旧 UI 上传格式)
- key_pem — 私钥 PEM 文本,同样兼容裸 PEM 或 base64
- 同域名已存在 → 更新现有证书记录(cert_path / key_path / 有效期),并触发自动部署
- 首次上传 → 新建一条 manual / no-deploy 类型的证书记录,后续可在 UI 切换 deploy target
- 成功返回
{success: true, certificate_id: N};失败返回{success: false, message: "..."}
Certimate 配置示例
Section titled “Certimate 配置示例”Certimate webhook 部署器支持 ${CERTIMATE_DEPLOYER_*} 模板变量替换为实际证书内容(裸 PEM,无 base64)。妙妙屋X 接口自动嗅探 —–BEGIN 开头识别 PEM,与原 base64 上传两路兼容。
URL: https://your-mmwx-host/api/admin/certificates/uploadMethod: POSTHeaders: Authorization: Bearer <your-api-token> Content-Type: application/jsonBody: { "domain": "${CERTIMATE_DEPLOYER_COMMONNAME}", "cert_pem": "${CERTIMATE_DEPLOYER_CERTIFICATE}", "key_pem": "${CERTIMATE_DEPLOYER_PRIVATEKEY}" }curl 验证(PEM 直传)
Section titled “curl 验证(PEM 直传)”用文件内容直接 POST,无需 base64 转码。文件路径替换成实际证书位置。
curl -X POST https://your-mmwx-host/api/admin/certificates/upload \ -H "Authorization: Bearer YOUR_API_TOKEN" \ -H "Content-Type: application/json" \ -d "$(jq -n --rawfile cert /path/to/fullchain.pem \ --rawfile key /path/to/privkey.pem \ '{domain:"*.example.com", cert_pem:$cert, key_pem:$key}')"