从域名验证到证书签发、自动续期、自动部署与 API 接入的完整指南。按左侧目录快速定位。
三步完成第一张证书的签发。HTTP-01 适合单域名且服务器 80 端口可达;DNS-01 适合泛域名或无法开放 80 端口的场景。
访问首页点击「免费注册」,或使用已有账号登录。首个注册账号会自动成为管理员。
进入「用户中心 → 域名管理」,填写域名并选择验证方式。HTTP-01 需要域名解析到当前服务器且 80 端口可达。
在「证书管理」发起签发;签发成功后到「自动续期设置」与「部署目标」中配置策略。
staging(测试环境)跑通完整流程,确认验证与部署链路无误后,再在后台切换到正式环境签发受信任证书,避免触发 CA 的签发频率限制。证书签发前必须证明你对该域名拥有控制权。平台支持两种 ACME 标准验证方式,可按场景选择。
| 方式 | 原理 | 适用场景 | 前置条件 |
|---|---|---|---|
| HTTP-01 | CA 访问 http://域名/.well-known/acme-challenge/<token>,校验返回内容 |
单域名 / 多域名 SAN | 域名解析到本机,80 端口对外开放 |
| DNS-01 | 在域名下添加指定 TXT 记录,CA 通过 DNS 查询校验 |
泛域名 *.example.com、无法开 80 端口 |
拥有该域名的 DNS 管理权限 |
若希望平台自动添加与清理 TXT 记录(无需手工操作),需在「用户中心 → DNS 凭证」中录入云厂商密钥,平台将加密存储。
| 厂商 | 所需凭证 | 权限范围建议 |
|---|---|---|
| Cloudflare | API Token(推荐)或 Global API Key | Zone → DNS → Edit |
| 阿里云 | AccessKey ID / Secret | AliyunDNSFullAccess(可限定域名) |
| 腾讯云 | SecretId / SecretKey | DNSPod 相关读写权限 |
| 手动模式 | 无需凭证 | 平台给出 TXT 值,你手工添加到 DNS |
在签发页选择 DNS-01 且凭证为「手动」,平台生成订单并展示待添加的 TXT 记录名与值。
按给出的主机记录与值添加,等待 DNS 生效(通常几分钟内,取决于 TTL)。
平台通知 CA 进行校验并完成签发,成功后即可下载证书。
在「证书管理」中发起签发,选择域名、密钥算法与证书类型。
www.example.com。*.example.com,必须使用 DNS-01。| 算法 | 特点 | 建议场景 |
|---|---|---|
| RSA 2048 | 兼容性最好,几乎所有客户端支持 | 通用默认选择 |
| RSA 4096 | 强度更高,握手开销略增 | 合规要求较高的场景 |
| ECDSA P-256 | 密钥更小、握手更快、更省资源 | 现代浏览器、移动端优化 |
证书有效期通常为 90 天,自动续期是避免服务中断的关键。
在「用户中心 → 自动续期」中,可为每张证书单独设置触发时机:
| 阈值 | 说明 |
|---|---|
| 提前 30 天 | 默认值,留足重试与排障时间,推荐 |
| 提前 7 天 | 缩短证书交替周期,适合自动化程度高的场景 |
| 提前 1 天 | 仅在特殊情况下使用,风险较高 |
平台通过定时任务扫描到期证书并触发续期,无需常驻进程。请在服务器添加如下 Crontab:
# 每分钟执行一次续期与提醒调度
* * * * * php /www/wwwroot/ssl.hshen.eu.cc/sslapp/cron/cert_cron.php >> /www/wwwroot/ssl.hshen.eu.cc/sslapp/runtime/cron.log 2>&1
在证书到期前按阈值分级预警,支持邮件与 Webhook 两大类渠道。
在「用户中心 → 通知渠道」新增邮件渠道,填入 SMTP 服务器信息:
| 参数 | 示例 | 说明 |
|---|---|---|
| SMTP 主机 | smtp.qq.com | 邮件服务商地址 |
| 端口 | 465 / 587 | 465 走 SSL,587 走 STARTTLS |
| 账号 / 密码 | you@qq.com / 授权码 | 多数服务商需使用授权码而非登录密码 |
| 发件人 | SSL 监控 <you@qq.com> | 收件人看到的发件人信息 |
支持钉钉、企业微信、飞书群机器人及自定义 Webhook。以钉钉机器人为例:
# 发送一条测试通知
curl -X POST "http://ssl.hshen.eu.cc/?r=api/notify_test" \
-H "X-API-Key: sk_你的密钥" \
-H "Content-Type: application/json" \
-d '{"channel_id": 1, "subject": "测试通知", "body": "这是一条测试消息"}'
续期成功后自动把新证书推送至目标,并按需执行重载命令,实现零人工干预。
| 类型 | 说明 | 所需配置 |
|---|---|---|
| 本机目录 | 将证书写入本机指定路径,适用于同机 Nginx / Apache | 证书 / 私钥 / 全链路径、重载命令 |
| 远程 SSH | 通过 SSH 推送证书到其他服务器 | 主机、端口、用户名、密钥、路径 |
| Webhook | 以 HTTP 回调形式把证书推送给自定义服务 | 回调地址、鉴权头 |
选择「本机目录」并填写如下配置,平台会在续期成功后写入文件并执行重载:
{
"cert_path": "/www/server/panel/vhost/cert/example.com/fullchain.pem",
"key_path": "/www/server/panel/vhost/cert/example.com/privkey.pem",
"fullchain_path": "/www/server/panel/vhost/cert/example.com/fullchain.pem",
"reload_cmd": "nginx -s reload"
}
在「证书管理」列表点击下载,支持多种格式以适配不同服务端。
| 格式 | 包含内容 | 适用服务 |
|---|---|---|
| PEM / CRT | 仅证书(不含链) | 多数场景配合 fullchain 使用 |
| Fullchain | 服务器证书 + 中间证书 | Nginx、Apache 推荐 |
| KEY | 解密后的私钥 | 与证书配对部署 |
| PFX / PKCS#12 | 证书 + 私钥 + 链打包 | IIS、Tomcat、Java 应用 |
# 查看服务器实际下发的证书信息
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null \
| openssl x509 -noout -subject -issuer -dates
# 校验证书与私钥是否匹配(比对两个 MD5)
openssl x509 -noout -modulus -in cert.pem | openssl md5
openssl rsa -noout -modulus -in key.pem | openssl md5
通过 API Key 以编程方式管理证书,适合集成到 CI/CD 或自建运维平台。
在「用户中心 → API 密钥」中创建。密钥明文仅显示一次,请立即保存;可通过作用域(scopes)限制权限范围。
| 作用域 | 说明 |
|---|---|
* | 全部权限 |
cert:read / cert:write | 证书读取 / 申请与操作 |
domain:read / domain:write | 域名读取 / 新增与修改 |
status | 读取系统状态统计 |
在请求头中携带 X-API-Key:
curl -H "X-API-Key: sk_xxxxxxxxxxxxxxxx" \
"http://ssl.hshen.eu.cc/?r=api/certs"
| 方法 | 端点 | 说明 |
|---|---|---|
| GET | ?r=api/certs | 列出当前账号下的全部证书 |
| GET | ?r=api/cert&id=1 | 查询单张证书详情 |
| GET | ?r=api/domains | 列出域名 |
| GET | ?r=api/status | 获取统计状态 |
| POST | ?r=api/issue | 发起签发 |
| POST | ?r=api/renew | 触发续期 |
{
"ok": true,
"data": [
{
"id": 1,
"domains": ["example.com"],
"issuer": "Let's Encrypt",
"status": "active",
"not_after": "2026-12-11 08:00:00",
"days_left": 90
}
]
}
401(未提供密钥)或 403(密钥无效 / 作用域不足)。所有接口均返回 JSON,字段 ok 标识请求是否成功。常见原因与排查方向:
/.well-known/acme-challenge/ 路径可读取。dig TXT _acme-challenge.example.com),TTL 较长时需等待。支持。*.example.com 必须使用 DNS-01 验证。若使用手动模式,需按平台提示分两步完成 TXT 记录添加与校验。
正常情况下不需要。配置好续期阈值与部署目标后,定时任务会自动完成续期与推送;仅在验证方式变更或 DNS 凭证失效时才需要人工处理。
私钥以 AES-256 加密后存入数据库,解密密钥保存在服务器配置文件中,不随代码分发;下载时仅临时解密并直接输出,不落明文文件。
平台内置 Let's Encrypt(含 staging / production)。如需接入其他 ACME 兼容 CA,可在后台配置 ACME 目录地址。