Compare commits

...

493 Commits

Author SHA1 Message Date
xiaojunnuo
83df29d832 chore: 1 2026-01-22 11:10:53 +08:00
xiaojunnuo
607afe864a perf: cname记录支持批量导入和导出 2026-01-22 10:56:45 +08:00
xiaojunnuo
a97cee84f3 perf: 支持同步域名过期时间 2026-01-22 00:59:28 +08:00
xiaojunnuo
ad64384891 perf: 域名导入 2026-01-21 18:24:03 +08:00
xiaojunnuo
f75c73d739 perf: 优化流水线创建入口,各种证书申请任务类型拆分成多个按钮 2026-01-21 13:27:14 +08:00
xiaojunnuo
418bcddc95 fix: 修复流水线复制出错的bug 2026-01-20 16:56:36 +08:00
xiaojunnuo
61192b998a fix: 修复插件修改名字和删除后没有注销注册的bug 2026-01-20 11:52:14 +08:00
xiaojunnuo
5ea2b09dc3 fix: 编辑插件author不允许出现符号 2026-01-20 11:18:10 +08:00
xiaojunnuo
5bfc2c4a9b chore: 1 2026-01-20 00:15:31 +08:00
xiaojunnuo
8ec47c3894 Merge branch 'v2-domain-sync' of https://github.com/certd/certd into v2-domain-sync 2026-01-20 00:13:10 +08:00
xiaojunnuo
f4423638a2 perf: 支持从提供商导入域名列表 2026-01-20 00:13:05 +08:00
xiaojunnuo
7b3444308b chore: docs 2026-01-19 16:27:34 +08:00
xiaojunnuo
5ec9916817 chore: FormDialog 2026-01-19 11:01:48 +08:00
xiaojunnuo
be1a70299f chore: 域名自动同步初步 2026-01-16 18:18:39 +08:00
xiaojunnuo
8685aa371a chore: publish github 2026-01-16 15:47:25 +08:00
xiaojunnuo
0224faa184 chore: publish github 2026-01-16 12:57:14 +08:00
xiaojunnuo
8546e326cf build: update github actions 2026-01-16 09:30:47 +08:00
xiaojunnuo
9956fd2f04 Merge branch 'v2-dev' of https://github.com/certd/certd into v2-dev 2026-01-16 09:12:51 +08:00
xiaojunnuo
4f669ca82f build: release 2026-01-16 01:32:11 +08:00
xiaojunnuo
1cd3881aa8 chore: docs 2026-01-16 01:29:50 +08:00
xiaojunnuo
e634513f7b chore: docs 2026-01-16 01:22:51 +08:00
xiaojunnuo
7b6cde6ae3 build: publish 2026-01-16 01:00:16 +08:00
xiaojunnuo
18146fdf9e build: trigger build image 2026-01-16 01:00:03 +08:00
xiaojunnuo
2c80c35b21 v1.38.1 2026-01-16 00:58:32 +08:00
xiaojunnuo
54b73769b8 build: prepare to build 2026-01-16 00:55:54 +08:00
xiaojunnuo
f7983ee4d9 chore: docs 2026-01-16 00:46:57 +08:00
xiaojunnuo
9eace86aee perf: 自定义插件支持使用_ctx.import("/@/xxx.js")以绝对路径引用模块 2026-01-16 00:46:26 +08:00
xiaojunnuo
2fbb58eb2b fix: 修复自定义插件name丢失author导致找不到插件的bug 2026-01-15 23:43:07 +08:00
xiaojunnuo
187d04e3a1 chore: docs 2026-01-15 11:19:26 +08:00
xiaojunnuo
d5d7d73440 chore: publish 2026-01-14 16:07:15 +08:00
xiaojunnuo
b747e281b7 chore: publish 2026-01-14 16:00:49 +08:00
xiaojunnuo
e024d50476 chore: publish 2026-01-14 15:57:46 +08:00
xiaojunnuo
a6ba48c075 chore: publish 2026-01-14 15:54:46 +08:00
xiaojunnuo
e19375387d chore: 1 2026-01-14 15:25:58 +08:00
xiaojunnuo
a9f68187d4 chore: release 2026-01-14 15:25:27 +08:00
xiaojunnuo
4d754fa78d chore: 拆分git publish 2026-01-14 15:23:42 +08:00
xiaojunnuo
6d07ab2bc5 chore: release 2026-01-14 13:51:40 +08:00
xiaojunnuo
a60b00c440 chore: docs 2026-01-14 12:15:04 +08:00
xiaojunnuo
d0f3f303b6 build: release 2026-01-14 12:07:02 +08:00
xiaojunnuo
4fc8acce8c perf: 优化内存占用 2026-01-14 11:37:20 +08:00
xiaojunnuo
0797a4f99d chore: build 2026-01-14 02:06:08 +08:00
xiaojunnuo
db453c8038 chore: 修复metadata的一些bug 2026-01-14 02:05:31 +08:00
xiaojunnuo
c776c34cfd chore: build 2026-01-14 00:14:00 +08:00
xiaojunnuo
170b39fde6 chore: release 2026-01-14 00:12:43 +08:00
xiaojunnuo
fc27a66825 chore: build only 2026-01-14 00:03:58 +08:00
xiaojunnuo
06b49c140e chore: publish gitee 2026-01-14 00:00:10 +08:00
xiaojunnuo
3ab45c91e1 chore: publish release to gitee 2026-01-13 23:58:50 +08:00
xiaojunnuo
6660161cec chore: prebuild export md 2026-01-13 23:33:30 +08:00
xiaojunnuo
8c6e207008 build: publish 2026-01-13 23:30:47 +08:00
xiaojunnuo
4180e3c540 build: trigger build image 2026-01-13 23:30:35 +08:00
xiaojunnuo
a218cd0ffb v1.38.0 2026-01-13 23:26:42 +08:00
xiaojunnuo
31c8de5bbe build: prepare to build 2026-01-13 23:23:51 +08:00
xiaojunnuo
faac7f365f Chroe: 1 2026-01-13 23:23:01 +08:00
xiaojunnuo
8cc4332b10 build: prepare to build 2026-01-13 23:19:47 +08:00
xiaojunnuo
abd30da102 chore: 腾讯云更新证书id不变 说明更新 2026-01-13 23:12:26 +08:00
xiaojunnuo
f4701ff72a chore: 1 2026-01-13 23:08:03 +08:00
xiaojunnuo
393d7885a1 chore: docs 2026-01-13 23:05:08 +08:00
xiaojunnuo
b4c6d3c975 chore: docs 2026-01-13 23:01:31 +08:00
xiaojunnuo
3ce440a28d Merge branch 'v2' into v2-dev 2026-01-13 22:59:39 +08:00
xiaojunnuo
cb4ab6a99f chore: 1 2026-01-13 22:56:47 +08:00
xiaojunnuo
6c39d7b1ee perf: webhook触发器一个流水线限制只能添加一个 2026-01-13 19:07:21 +08:00
xiaojunnuo
840bd52671 perf: 证书流水线可以开启webhook 2026-01-13 19:02:23 +08:00
xiaojunnuo
f3d70c7ea1 chore: 1 2026-01-13 18:49:52 +08:00
xiaojunnuo
22b8528ee1 chore: sql sync 2026-01-13 18:01:01 +08:00
xiaojunnuo
900e302df7 chore: docs 2026-01-13 00:55:32 +08:00
xiaojunnuo
be03d8e137 perf: 流水线页面可以查看证书过期时间 2026-01-13 00:50:32 +08:00
xiaojunnuo
d338a9639a chore: 手机端适配 2026-01-13 00:30:30 +08:00
xiaojunnuo
235972f3da fix: 修复又拍云upyun密码错误没有报错的bug 2026-01-12 16:57:19 +08:00
xiaojunnuo
ae822881e7 chore: upyun 不存在的domain上传证书报错提示优化 2026-01-12 16:10:04 +08:00
xiaojunnuo
26f75c71ba perf: 优化站点监控,支持设置忽略主站证书一致性,支持开启和关闭自动同步ip 2026-01-09 12:25:56 +08:00
xiaojunnuo
ad2aa2eff5 chore: 1 2026-01-09 01:26:11 +08:00
xiaojunnuo
52689049ae perf: 站点监控增加是否自动同步IP开关 2026-01-09 01:20:04 +08:00
xiaojunnuo
1a29541140 perf: 支持webhook触发流水线,新增触发类型图标显示 2026-01-09 01:10:43 +08:00
xiaojunnuo
ece17eecef chore: 1 2026-01-08 19:04:02 +08:00
xiaojunnuo
2b353094eb chore: 1 2026-01-08 17:57:54 +08:00
xiaojunnuo
70305aa501 chore: 1 2026-01-08 15:42:30 +08:00
xiaojunnuo
22dc504ad0 chore: 1 2026-01-08 15:37:25 +08:00
xiaojunnuo
ef9402d403 chore: ipcheck 2026-01-08 15:33:26 +08:00
xiaojunnuo
f7e29532f7 chore: 1 2026-01-08 09:49:40 +08:00
xiaojunnuo
60770683b6 chore: 1 2026-01-08 09:30:01 +08:00
xiaojunnuo
051bbbc64f Merge branch 'v2-dev' of https://github.com/certd/certd into v2-dev 2026-01-08 09:27:27 +08:00
xiaojunnuo
206eef964c chore: 1 2026-01-08 09:27:21 +08:00
xiaojunnuo
b8b7adff17 chore: 优化系统公告显示 2026-01-08 00:49:05 +08:00
xiaojunnuo
42c68d362e chore: 1 2026-01-08 00:39:31 +08:00
xiaojunnuo
1df3967889 chore: 1 2026-01-08 00:31:18 +08:00
xiaojunnuo
dae87e26a3 perf: 支持部署到exsi,openwrt 2026-01-08 00:11:46 +08:00
xiaojunnuo
f193341eae fix: 优化源码部署缺少wget的提示 2026-01-07 23:43:03 +08:00
xiaojunnuo
d21a042ad8 chore: 已优化依赖版本 2026-01-07 23:30:42 +08:00
xiaojunnuo
b16b9e813d chore: 1 2026-01-07 19:06:59 +08:00
xiaojunnuo
a79fe1f350 perf: 支持公告功能 2026-01-07 17:54:18 +08:00
xiaojunnuo
14f99875fb perf: 每页记录条数保持 2026-01-07 12:12:42 +08:00
xiaojunnuo
2d2890b34f chore: 1 2026-01-07 12:04:57 +08:00
xiaojunnuo
66d8cafd76 chore: 1 2026-01-07 10:58:17 +08:00
xiaojunnuo
468ccbf2b7 fix: 修复重启certd后,再启用流水线,不会自动执行的bug 2026-01-06 13:38:10 +08:00
xiaojunnuo
6b6668f73b Merge branch 'v2-dev' of https://github.com/certd/certd into v2-dev 2026-01-06 09:24:26 +08:00
xiaojunnuo
5eda05f007 build: refresh metadata 2026-01-06 00:36:21 +08:00
xiaojunnuo
1d6a8bd851 chore: zenlayer 证书刷新插件完成 2026-01-06 00:29:41 +08:00
xiaojunnuo
e500af1ed4 chore: 优化支付提供者插件位置 2026-01-05 23:04:07 +08:00
xiaojunnuo
7ee39fd4ed fix: 修复禁用第三方登录自动注册无效的bug 2026-01-05 22:29:58 +08:00
xiaojunnuo
9ba6c83821 perf: zenlayer证书更新 2026-01-05 01:00:46 +08:00
xiaojunnuo
4243622414 perf: 新增部署1panel面板证书插件 2026-01-05 00:20:18 +08:00
xiaojunnuo
8374a4f5bf chore: 默认密码登录 2026-01-04 23:45:55 +08:00
xiaojunnuo
5d851141cb chore: 1panel面板证书更新提示优化 2026-01-04 18:21:41 +08:00
xiaojunnuo
26ac081182 perf: 手机号登录放到前面 2026-01-04 18:09:34 +08:00
xiaojunnuo
64e0d9a4d5 perf: 优化微信支付对接文档 2026-01-04 11:58:32 +08:00
xiaojunnuo
269a6cad80 chore: 1 2025-12-31 18:54:41 +08:00
xiaojunnuo
806ebdb8a8 chore: 修改metadata scriptPath的相对位置 2025-12-31 18:39:58 +08:00
xiaojunnuo
ed0016fd2b chore: 修复metadata 插件加载失败的问题 2025-12-31 18:36:24 +08:00
xiaojunnuo
a3fb24993d feat: 【破坏性更新】插件改为metadata加载模式,plugin-cert、plugin-lib包部分代码转移到certd-server中,影响自定义插件,需要修改相关import引用
ssh、aliyun、tencent、qiniu、oss等 access和client需要转移import
2025-12-31 17:01:37 +08:00
xiaojunnuo
9c26598831 chore: 阿里云错误提示优化 2025-12-31 13:25:10 +08:00
xiaojunnuo
7634f153b7 feat: 通过metadata加载插件,降低内存占用 2025-12-30 18:32:00 +08:00
xiaojunnuo
cabc4da3ac perf: 增加邮件发送证书模版配置 2025-12-30 11:53:26 +08:00
xiaojunnuo
6419539305 chore: metadata update 2025-12-30 11:42:21 +08:00
xiaojunnuo
97e1178525 chore: metadata update 2025-12-30 11:26:59 +08:00
xiaojunnuo
04faf12c14 chore: 忽略sourcemap,gen metadata 2025-12-30 11:09:50 +08:00
xiaojunnuo
e7aa79cc9f Merge branch 'v2-dev' of https://github.com/certd/certd into v2-dev 2025-12-30 09:49:11 +08:00
xiaojunnuo
f862e3f37f chore: 邮件格式必填 2025-12-30 09:49:07 +08:00
xiaojunnuo
ce051af5bb chore: atom git push 2025-12-30 01:05:57 +08:00
xiaojunnuo
dcb9f1c840 chore: 2 2025-12-30 01:04:27 +08:00
xiaojunnuo
83d0fe9f09 chore: auto push atomgit 2025-12-30 01:03:27 +08:00
xiaojunnuo
7789ba4d36 chore: atom ui publish 2025-12-30 00:58:54 +08:00
xiaojunnuo
80101b04e2 chore: atom publish 2025-12-30 00:53:13 +08:00
xiaojunnuo
310d4d1b57 chore: 1 2025-12-30 00:39:46 +08:00
xiaojunnuo
126c0c6ad6 chore: ui-xx.zip 2025-12-30 00:32:57 +08:00
xiaojunnuo
6a43b44087 chore: 1 2025-12-29 23:55:35 +08:00
xiaojunnuo
6772b32609 build: release 2025-12-29 23:49:49 +08:00
xiaojunnuo
db2f0b8c5c chore: 退回默认的malloc 2025-12-29 23:48:34 +08:00
xiaojunnuo
1376004197 chore: node-base-armv7 2025-12-29 23:16:53 +08:00
xiaojunnuo
1625989c48 chore: build-node-base-image 2025-12-29 22:54:19 +08:00
xiaojunnuo
f7863bd686 build: publish 2025-12-29 22:33:24 +08:00
xiaojunnuo
883565905a build: trigger build image 2025-12-29 22:33:12 +08:00
xiaojunnuo
786780ce9b v1.37.17 2025-12-29 22:31:45 +08:00
xiaojunnuo
d2e9fed62d build: prepare to build 2025-12-29 22:29:22 +08:00
xiaojunnuo
0e5a4fb098 fix: 修复流水线列表step数量统计错误的bug 2025-12-29 22:27:31 +08:00
xiaojunnuo
f223f042de chore: 1 2025-12-29 22:20:43 +08:00
xiaojunnuo
cd413825ed chore: 1 2025-12-29 22:08:56 +08:00
xiaojunnuo
a851c272cd build: prepare to build 2025-12-29 22:05:40 +08:00
xiaojunnuo
412077b418 chore: 1 2025-12-29 22:05:03 +08:00
xiaojunnuo
4df6f8a50e chore: 1 2025-12-29 18:59:42 +08:00
xiaojunnuo
44bf4b1cc1 perf: 支持部署到goedge 2025-12-29 18:57:22 +08:00
xiaojunnuo
136e8dd7c5 perf: 升级lego到4.30.1版本 2025-12-29 16:44:00 +08:00
xiaojunnuo
024b2b04a4 chore: 邮件优化 2025-12-29 15:54:21 +08:00
xiaojunnuo
5bbf210394 fix: 修复serverchan3 没有选择tags报错的bug 2025-12-29 15:45:42 +08:00
xiaojunnuo
039c62b09b perf: 批量运行优化,支持普通运行和强制重新运行 2025-12-29 15:31:33 +08:00
xiaojunnuo
07f0aa45ef chore: publish合并 2025-12-29 14:58:32 +08:00
xiaojunnuo
de11f44309 chore: 1 2025-12-29 14:47:22 +08:00
xiaojunnuo
acee96ef17 chore: 升级axios版本 2025-12-29 14:39:01 +08:00
xiaojunnuo
4ed49f9dfa chore: 1 2025-12-29 14:29:35 +08:00
xiaojunnuo
f68b585f8f chore: 1 2025-12-29 14:24:27 +08:00
xiaojunnuo
13ddc979ec perf: 优化源码方式部署,前端无需编译 2025-12-29 14:21:25 +08:00
xiaojunnuo
b0b7ac3efb chore: 1 2025-12-29 10:31:11 +08:00
xiaojunnuo
62f8525dd5 fix: 修复站点ip监控报主站与ip证书过期时间不一致的问题 2025-12-29 10:29:53 +08:00
xiaojunnuo
1347355cb1 perf: 支持授权给管理员查看和下载用户证书 2025-12-28 23:36:53 +08:00
xiaojunnuo
f847c4a414 chore: 1 2025-12-28 01:05:48 +08:00
xiaojunnuo
776fa924e3 chore: 1 2025-12-28 00:49:41 +08:00
xiaojunnuo
8872466968 perf: 支持从阿里云商用证书订单中获取证书 2025-12-28 00:38:38 +08:00
xiaojunnuo
b620038d98 Merge branch 'v2-dev' of https://github.com/certd/certd into v2-dev 2025-12-27 22:57:31 +08:00
xiaojunnuo
a248367b15 perf: 支持ucloud waf(未测试) 2025-12-27 22:57:26 +08:00
xiaojunnuo
c159ec4a9a Merge branch 'v2-dev' of https://github.com/certd/certd into v2-dev 2025-12-27 15:05:52 +08:00
xiaojunnuo
5359a7670f perf: 优化阿里云esa清理证书时机 2025-12-27 15:05:43 +08:00
xiaojunnuo
7e1c7a6de2 chore: 1 2025-12-27 02:23:29 +08:00
xiaojunnuo
91e19bbdd3 chore: 优化图标 2025-12-27 02:20:01 +08:00
xiaojunnuo
e61daaee2d perf: 支持ucloud,上传到ussl,部署到ucdn 2025-12-27 01:54:47 +08:00
xiaojunnuo
8caab1fd92 perf: aws route53 2025-12-26 23:20:14 +08:00
xiaojunnuo
cd944882c3 perf: 执行队列数量支持设置 2025-12-26 18:17:05 +08:00
xiaojunnuo
888d9591fe perf: 支持执行队列,避免同一时间触发流水线太多导致被限制 2025-12-26 16:30:03 +08:00
xiaojunnuo
833808c5de fix: 修复从模版创建的流水线不会自动执行的bug 2025-12-26 16:29:20 +08:00
xiaojunnuo
d731956b06 fix: 首页最快到期证书,不包含已禁用的流水线 2025-12-26 14:37:03 +08:00
xiaojunnuo
40449ae4de chore: docs 2025-12-26 14:26:27 +08:00
xiaojunnuo
44ad61f004 Merge branch 'v2-dev' of https://github.com/certd/certd into v2-dev 2025-12-26 09:29:37 +08:00
xiaojunnuo
74865d53f8 chore: 修复aws route53 删除record失败的问题 2025-12-26 09:29:29 +08:00
xiaojunnuo
373415261e Merge branch 'v2-dev' of https://github.com/certd/certd into v2-dev 2025-12-25 22:20:59 +08:00
xiaojunnuo
d0f653da9a perf: 批量修改定时时间支持随机时间 2025-12-25 22:20:54 +08:00
xiaojunnuo
cbb8319cfa perf: 支持aws route53 dns 2025-12-25 18:56:27 +08:00
xiaojunnuo
0e467a6024 chore: docs 2025-12-22 16:36:32 +08:00
xiaojunnuo
e505916525 fix: 修复用户删除后,用相同的oauth授权登录报错用户不存在的问题
https://github.com/certd/certd/issues/603
2025-12-19 11:37:22 +08:00
xiaojunnuo
31f09ab117 chore: ip证书文档 2025-12-19 11:30:01 +08:00
xiaojunnuo
09e5e0f9b3 chore: 1 2025-12-19 10:49:10 +08:00
xiaojunnuo
773cada57a perf: ip证书校验方式提示 2025-12-19 10:08:28 +08:00
xiaojunnuo
403947ed6d chore: 开源地址 2025-12-18 19:07:27 +08:00
xiaojunnuo
d9d08a725c perf: 官方开源地址 2025-12-18 19:03:46 +08:00
xiaojunnuo
e2ed75af94 Merge branch 'v2-dev' of https://github.com/certd/certd into v2-dev 2025-12-17 10:02:30 +08:00
xiaojunnuo
dd19afce92 fix: 修复部署到华为obs 报错的bug 2025-12-17 10:02:23 +08:00
xiaojunnuo
5b5deac7d9 perf: 腾讯云EO增加请求参数打印 2025-12-16 23:10:30 +08:00
xiaojunnuo
3f3ee3456e chore: 支持仅查询其他用户的流水线 2025-12-16 22:52:07 +08:00
xiaojunnuo
3e2f2fc02e chore: 批量修改流水线优化 2025-12-16 22:31:06 +08:00
xiaojunnuo
c5a3003cf7 fix: 发送证书到邮箱插件的邮件模版转为使用邮箱配置中的通用模版 2025-12-16 22:07:39 +08:00
xiaojunnuo
4c6dcddf11 Merge branch 'v2-dev' of https://github.com/certd/certd into v2-dev 2025-12-16 10:02:31 +08:00
xiaojunnuo
b314e500cd build: release 2025-12-16 07:43:49 +08:00
xiaojunnuo
b83e6ad13f build: publish 2025-12-16 01:47:46 +08:00
xiaojunnuo
fee401cfdf build: trigger build image 2025-12-16 01:47:35 +08:00
xiaojunnuo
fa14f62198 v1.37.16 2025-12-16 01:46:13 +08:00
xiaojunnuo
5526665494 build: prepare to build 2025-12-16 01:44:10 +08:00
xiaojunnuo
6249af996a build: prepare to build 2025-12-16 01:41:26 +08:00
xiaojunnuo
e51a1b365e build: prepare to build 2025-12-16 01:30:58 +08:00
xiaojunnuo
f53f00d126 chore: 1 2025-12-16 00:39:21 +08:00
xiaojunnuo
ab8fbaf21d chore: 修复清除定时任务未生效的bug 2025-12-16 00:34:32 +08:00
xiaojunnuo
63d8bcf882 perf: 批量设置定时,支持清除定时 2025-12-16 00:21:31 +08:00
xiaojunnuo
e4e16bc6a6 fix: 修复ipv6作为证书域名申请证书校验失败的bug 2025-12-15 23:34:47 +08:00
xiaojunnuo
e4c21c4d5c chore: 模版发邮件 plus 2025-12-15 22:32:25 +08:00
xiaojunnuo
d9e6dbf889 chore: 优化telegram更多保留字符 2025-12-15 22:21:43 +08:00
xiaojunnuo
5f4469e306 fix: telegram 修复消息内存在横杠无法发出的bug 2025-12-15 15:12:07 +08:00
xiaojunnuo
16f6365b18 chore: oidc自动注册时增加邮箱 2025-12-15 00:23:35 +08:00
xiaojunnuo
cdab54bf51 chore: 1 2025-12-15 00:21:42 +08:00
xiaojunnuo
b6fea0c856 perf: oidc支持使用第三方昵称或账号作为certd用户的用户名 2025-12-15 00:19:55 +08:00
xiaojunnuo
6f186932cc perf: 支持彩虹聚合登录 2025-12-15 00:12:27 +08:00
xiaojunnuo
de544ec725 chore: email template优化 2025-12-14 23:19:32 +08:00
xiaojunnuo
a6c0d2c6f1 perf: 支持邮件模版设置 2025-12-14 01:36:20 +08:00
xiaojunnuo
437d956cad chore: email template 2025-12-12 23:39:09 +08:00
xiaojunnuo
43ba0b9da6 docs: 1panel增加应用商店部署方式 2025-12-11 18:14:15 +08:00
xiaojunnuo
fe1e2c3b62 Merge branch 'v2-dev' of https://github.com/certd/certd into v2-dev 2025-12-10 14:17:20 +08:00
xiaojunnuo
bbe7e5f96d chore: 1 2025-12-10 14:15:39 +08:00
xiaojunnuo
2bfad9fc65 fix: 优化西部数据 500 already exists 的问题 2025-12-09 23:33:11 +08:00
xiaojunnuo
9f24c18f7f chore: 优化数据库脚本 2025-12-09 23:28:29 +08:00
xiaojunnuo
a2d1e5ea03 chore: 修复sqlite语句双引号改单引号 2025-12-09 23:11:19 +08:00
xiaojunnuo
b082e4e988 chore: 1 2025-12-09 00:47:08 +08:00
xiaojunnuo
45fbce0c2a perf: 新增数据库迁移doc说明文档,优化datetime字段平滑迁移 2025-12-09 00:45:10 +08:00
xiaojunnuo
ff7006e232 build: release 2025-12-07 01:17:22 +08:00
xiaojunnuo
c68fdef0e4 build: publish 2025-12-07 00:59:50 +08:00
xiaojunnuo
4c60e4edc1 build: trigger build image 2025-12-07 00:59:39 +08:00
xiaojunnuo
f2e4e59f8d v1.37.15 2025-12-07 00:58:12 +08:00
xiaojunnuo
898205b5b1 build: prepare to build 2025-12-07 00:56:13 +08:00
xiaojunnuo
8ec6862861 chore: 升级fs 2025-12-07 00:56:06 +08:00
xiaojunnuo
c3ba6322d8 build: prepare to build 2025-12-07 00:55:38 +08:00
xiaojunnuo
e589828425 build: prepare to build 2025-12-07 00:47:24 +08:00
xiaojunnuo
c909aa161b chore: webhook修改为隐藏变量,避免别人fork后触发我的流水线 2025-12-07 00:18:05 +08:00
xiaojunnuo
5cee7d44f1 perf: 第三方登录支持gitee 2025-12-06 17:25:02 +08:00
xiaojunnuo
973b323a99 docs: 优化教程 2025-12-06 16:24:19 +08:00
xiaojunnuo
d55954a363 perf: 支持k8s apply 2025-12-05 02:05:27 +08:00
xiaojunnuo
adca151e4f perf: 邮件模版安全优化 2025-12-05 00:45:56 +08:00
xiaojunnuo
43513049be perf: 支持部署到中国移动CDN 2025-12-04 00:46:25 +08:00
xiaojunnuo
a5ca41131b fix: oidc 支持nonce 2025-12-03 22:00:35 +08:00
xiaojunnuo
2ea3810980 build: release 2025-12-03 10:09:24 +08:00
xiaojunnuo
c9cb54e8b2 build: release 2025-12-03 07:34:48 +08:00
xiaojunnuo
23dd3db50b build: publish 2025-12-03 01:01:31 +08:00
xiaojunnuo
179c46914d build: trigger build image 2025-12-03 01:01:20 +08:00
xiaojunnuo
ddb18e6c21 v1.37.14 2025-12-03 00:59:54 +08:00
xiaojunnuo
d2e147ba51 build: prepare to build 2025-12-03 00:57:50 +08:00
xiaojunnuo
b63033f846 build: release 2025-12-03 00:57:37 +08:00
xiaojunnuo
677e1101e6 fix: 修复注销登录时,第三方登录注销请求失败的报错 2025-12-03 00:57:17 +08:00
xiaojunnuo
3abc2ccfbb build: 1 2025-12-03 00:48:21 +08:00
xiaojunnuo
827d28f1cd build: publish 2025-12-03 00:41:16 +08:00
xiaojunnuo
59d12a1bbe build: trigger build image 2025-12-03 00:40:59 +08:00
xiaojunnuo
8134172301 v1.37.13 2025-12-03 00:39:32 +08:00
xiaojunnuo
8d983aa561 build: prepare to build 2025-12-03 00:36:47 +08:00
xiaojunnuo
bb3085ef84 perf: 第三方登录允许选择logo 2025-12-03 00:35:17 +08:00
xiaojunnuo
78b1650bdb fix: 修复西部数据返回信息乱码问题 2025-12-02 16:37:26 +08:00
xiaojunnuo
5edc72d475 fix: 修复西部数码使用域名级别的key申请证书失败的问题 2025-12-02 16:11:33 +08:00
xiaojunnuo
1df32c9dfa docs: 阿里云超时配置 2025-12-01 19:10:47 +08:00
xiaojunnuo
bedb1ff7f9 docs: 流水线有效期 2025-12-01 11:48:57 +08:00
xiaojunnuo
fbf12f16b5 perf: 支持OIDC单点登录 2025-12-01 00:40:46 +08:00
xiaojunnuo
22a5f34e1f build: release 2025-11-30 02:53:41 +08:00
xiaojunnuo
e1a8b08619 build: publish 2025-11-30 02:32:23 +08:00
xiaojunnuo
466d30fb74 build: trigger build image 2025-11-30 02:32:06 +08:00
xiaojunnuo
7a1c6d2918 v1.37.12 2025-11-30 02:30:29 +08:00
xiaojunnuo
9fcc0dc8e7 build: prepare to build 2025-11-30 02:28:22 +08:00
xiaojunnuo
286f244caf build: prepare to build 2025-11-30 02:18:12 +08:00
xiaojunnuo
52ebeab90b chore: group dict刷新 2025-11-30 02:16:04 +08:00
xiaojunnuo
6be7591332 perf: 支持证书颁发机构 LiteSSL
https://github.com/certd/certd/issues/590
2025-11-30 01:30:47 +08:00
xiaojunnuo
73325aaefb perf: 支持微信扫码登录 2025-11-30 01:13:55 +08:00
xiaojunnuo
0adcc6a8d1 fix: 修复waf tls版本号小写 2025-11-29 12:15:58 +08:00
xiaojunnuo
93fb6acd1d build: release 2025-11-29 04:30:52 +08:00
xiaojunnuo
77d52b323d build: publish 2025-11-29 04:17:51 +08:00
xiaojunnuo
ca8e8bf6ef build: trigger build image 2025-11-29 04:17:34 +08:00
xiaojunnuo
9acac86ed5 v1.37.11 2025-11-29 04:15:57 +08:00
xiaojunnuo
ba5007219d build: prepare to build 2025-11-29 04:13:44 +08:00
xiaojunnuo
ec046fd599 build: prepare to build 2025-11-29 04:10:55 +08:00
xiaojunnuo
5452ff1153 build: prepare to build 2025-11-29 04:08:56 +08:00
xiaojunnuo
d03b1e0608 chore: 数据库脚本同步 2025-11-29 04:06:51 +08:00
xiaojunnuo
53c88ad5af perf: 优化天翼云cdn 等待5秒部署完成 2025-11-29 03:25:21 +08:00
xiaojunnuo
21585ca565 chore: 优化oidc登录 2025-11-28 01:42:42 +08:00
xiaojunnuo
2fabee647a fix: 修复阿里云 waf tlsVersion参数缺失导致部署失败的问题 2025-11-27 22:36:33 +08:00
xiaojunnuo
cf4632045c Merge branch 'v2-dev' of https://github.com/certd/certd into v2-dev 2025-11-27 01:59:28 +08:00
xiaojunnuo
ec75afbc44 perf: 支持oidc单点登录 2025-11-27 01:59:22 +08:00
xiaojunnuo
c7b298c46f fix: 修复备注撑开表格行高的bug
https://github.com/certd/certd/issues/586
2025-11-26 23:38:34 +08:00
xiaojunnuo
3406bb5a4a fix: 修复域名管理无法创建tencent-eo dns授权的bug
https://github.com/certd/certd/issues/587
2025-11-26 23:36:34 +08:00
xiaojunnuo
e9427b4694 chore: oauth-second 2025-11-26 23:25:51 +08:00
xiaojunnuo
517a1f1835 Merge branch 'v2-dev' of https://github.com/certd/certd into v2-dev 2025-11-26 16:04:24 +08:00
xiaojunnuo
6e735bbd1e fix: openapi 成功后失败都返回msg 2025-11-26 16:04:14 +08:00
xiaojunnuo
5a148aa3b9 chore: oidc first 2025-11-26 07:34:42 +08:00
xiaojunnuo
b4c362da37 docs: openapi 2025-11-25 09:12:35 +08:00
xiaojunnuo
575ae164c8 perf: ssh支持ppk格式私钥 2025-11-25 00:48:21 +08:00
xiaojunnuo
a9606bfb4e chore: 1 2025-11-24 23:43:14 +08:00
xiaojunnuo
b5ec04723d perf: ssl.com支持ecc 2025-11-24 23:33:25 +08:00
xiaojunnuo
51cc08411f perf: 优化宝塔网站证书在并发部署时导致nginx配置文件错乱的问题 2025-11-24 23:18:56 +08:00
xiaojunnuo
d75034deae build: release 2025-11-19 23:57:16 +08:00
xiaojunnuo
4ce23debb6 build: publish 2025-11-19 23:55:03 +08:00
xiaojunnuo
063706a7bf build: trigger build image 2025-11-19 23:54:03 +08:00
xiaojunnuo
eb41a3655f v1.37.10 2025-11-19 23:52:19 +08:00
xiaojunnuo
a84476187f build: prepare to build 2025-11-19 23:49:47 +08:00
xiaojunnuo
70b603d601 perf: 站点证书监控备注输入框改成textarea 2025-11-19 23:49:09 +08:00
xiaojunnuo
c9709f2698 perf: 优化dokploy 部署插件,配置选择serverId 2025-11-19 23:47:26 +08:00
xiaojunnuo
be4f479afd build: release 2025-11-19 15:41:19 +08:00
xiaojunnuo
a251465dbc build: publish 2025-11-19 15:30:56 +08:00
xiaojunnuo
9b7051f2be build: trigger build image 2025-11-19 15:30:33 +08:00
xiaojunnuo
8bfdef79c4 v1.37.9 2025-11-19 15:28:27 +08:00
xiaojunnuo
f2c2bf81b3 build: prepare to build 2025-11-19 15:24:37 +08:00
xiaojunnuo
8b5247b9bb build: prepare to build 2025-11-19 15:23:57 +08:00
xiaojunnuo
075b1dc0eb fix: 商用证书上传保存失败的bug 2025-11-19 15:13:08 +08:00
xiaojunnuo
42e1f0478d chore: docs 2025-11-19 13:24:40 +08:00
xiaojunnuo
d4653678b2 perf: 优化阿里云clb 过期证书清理报错的问题 2025-11-18 18:09:59 +08:00
xiaojunnuo
a4ce752e58 chore: 阿里云nlb证书清理增加日志打印 2025-11-18 18:02:55 +08:00
xiaojunnuo
f6649398ef chore: 清理过期证书增加日志打印 2025-11-18 18:01:23 +08:00
xiaojunnuo
02859cc270 build: release 2025-11-18 01:28:48 +08:00
xiaojunnuo
4ed30e082f build: publish 2025-11-18 01:18:48 +08:00
xiaojunnuo
d3985dd129 build: trigger build image 2025-11-18 01:18:32 +08:00
xiaojunnuo
ac70821fea v1.37.8 2025-11-18 01:16:57 +08:00
xiaojunnuo
38b273a1c9 build: prepare to build 2025-11-18 01:14:14 +08:00
xiaojunnuo
eb5c88fbb2 perf: 支持回车键触发登录 2025-11-18 01:13:31 +08:00
xiaojunnuo
1102952b47 perf: 修复西数解析记录添加失败的bug,支持部署证书到西数虚拟主机 2025-11-18 01:04:47 +08:00
xiaojunnuo
5ad6cadcee chore: 1 2025-11-15 16:56:04 +08:00
xiaojunnuo
5d236808d6 Merge branch 'v2-dev' of https://github.com/certd/certd into v2-dev 2025-11-15 16:46:06 +08:00
xiaojunnuo
ada9243e84 chore: 1 2025-11-15 16:32:41 +08:00
xiaojunnuo
ad4e1c1b5b Merge branch 'v2' into v2-dev 2025-11-13 13:54:44 +08:00
xiaojunnuo
c5105c29b0 build: release 2025-11-13 01:31:28 +08:00
xiaojunnuo
f689b0f3b2 Merge branch 'v2-dev' into v2 2025-11-13 01:17:55 +08:00
xiaojunnuo
730f614024 build: publish 2025-11-13 01:17:09 +08:00
xiaojunnuo
2e4eb17a48 build: trigger build image 2025-11-13 01:16:45 +08:00
xiaojunnuo
55d2a1f09b v1.37.7 2025-11-13 01:15:01 +08:00
xiaojunnuo
e3a5bcb907 build: prepare to build 2025-11-13 01:12:01 +08:00
xiaojunnuo
d56567c9de chore: teo dns 测试成功 2025-11-13 01:11:04 +08:00
xiaojunnuo
d7c381e05d chore: 1 2025-11-13 00:50:40 +08:00
xiaojunnuo
1d23dd2426 perf: 支持腾讯云teo dns解析 2025-11-13 00:45:05 +08:00
xiaojunnuo
86ce00adf9 perf: 支持使用letencrypt测试环境申请ip证书 2025-11-12 23:56:02 +08:00
xiaojunnuo
e1eef013a8 fix: 修复点击立即触发运行报错的bug 2025-11-12 22:15:17 +08:00
Rab
d20046c866 fix(plugins/woai-cdn): 修正默认接口域名与帮助链接中的路径 (#576) @LjyLab 2025-11-12 15:30:32 +08:00
xiaojunnuo
2df452fe5b Merge branch 'v2' of https://github.com/certd/certd into v2 2025-11-12 09:10:43 +08:00
xiaojunnuo
c31bfd8b94 docs: 1 2025-11-11 16:03:40 +08:00
xiaojunnuo
f443675f4f docs: 1 2025-11-11 16:03:19 +08:00
xiaojunnuo
a44bd8849d chore: 1 2025-11-11 13:29:38 +08:00
xiaojunnuo
274c887140 chore: nslookup 改成dig命令 2025-11-11 11:41:36 +08:00
xiaojunnuo
44973ebd00 fix: 账号绑定页面某些情况下打不开的bug 2025-11-11 11:05:34 +08:00
xiaojunnuo
88f74163ff build: release 2025-11-11 01:16:32 +08:00
xiaojunnuo
6cd57dd426 Merge branch 'v2-dev' into v2 2025-11-11 00:57:37 +08:00
xiaojunnuo
481e866011 build: publish 2025-11-11 00:50:16 +08:00
xiaojunnuo
a78450ba79 build: trigger build image 2025-11-11 00:49:58 +08:00
xiaojunnuo
9fcdeca692 v1.37.6 2025-11-11 00:48:12 +08:00
xiaojunnuo
8e10c56304 build: prepare to build 2025-11-11 00:42:43 +08:00
xiaojunnuo
591f600b11 build: prepare to build 2025-11-11 00:34:53 +08:00
xiaojunnuo
af03e55a73 build: prepare to build 2025-11-11 00:33:55 +08:00
xiaojunnuo
1462cddd1e perf: 支持letencrypt测试环境,支持IP证书? 2025-11-11 00:32:43 +08:00
xiaojunnuo
aac569a925 fix: 修复创建流水线报id不能为空的bug 2025-11-11 00:15:09 +08:00
greper
d19ac1fd15 Update promotional content in README.md 2025-11-10 10:56:54 +08:00
greper
410a23751b Update README.md 2025-11-10 10:56:23 +08:00
greper
8190507e8c Revise README for permanent version promotion
Updated promotional text for the permanent professional version and adjusted the display format.
2025-11-10 10:54:47 +08:00
greper
645f74f39d Update README with promotional content
Added promotional message for permanent professional version and Double Eleven event.
2025-11-10 10:53:38 +08:00
xiaojunnuo
acdf0912d4 perf: server 增加 "@peculiar/x509" 依赖 2025-11-09 20:10:52 +08:00
xiaojunnuo
32e4e91ab8 perf: 增加vip时间同步按钮 2025-11-09 14:38:38 +08:00
xiaojunnuo
b59ca329f3 build: release 2025-11-09 05:19:54 +08:00
xiaojunnuo
beb9099bdc build: publish 2025-11-09 05:08:01 +08:00
xiaojunnuo
a013d95f0f build: trigger build image 2025-11-09 05:07:44 +08:00
xiaojunnuo
9d5daf0015 v1.37.5 2025-11-09 05:06:02 +08:00
xiaojunnuo
1146307736 build: prepare to build 2025-11-09 05:00:01 +08:00
xiaojunnuo
c25eaadc1d build: prepare to build 2025-11-09 04:56:37 +08:00
xiaojunnuo
50f6e76ab9 chore: 1 2025-11-09 04:14:33 +08:00
xiaojunnuo
c3637e731f Merge branch 'v2-dev-buy' into v2-dev 2025-11-09 02:06:57 +08:00
xiaojunnuo
c31eef6b82 chore: buy 2025-11-09 00:12:31 +08:00
xiaojunnuo
802683b765 chore: 1 2025-11-07 01:50:34 +08:00
xiaojunnuo
335cf93970 perf: doge云支持删除过期证书 2025-11-07 01:46:44 +08:00
xiaojunnuo
041954c067 perf: doge云插件支持选择CDN域名,以及支持同时部署多个域名 2025-11-07 01:38:46 +08:00
xiaojunnuo
2da44c3699 chore: 优化流水线运行时状态timeline被挤成2行的问题 2025-11-07 01:35:30 +08:00
xiaojunnuo
65e53092e8 fix: 修复某些情况下编辑流水线,没有立即展示变更效果的bug 2025-11-07 01:15:05 +08:00
xiaojunnuo
0203aa2b6e perf: 优化任务参数配置界面在手机版下的展示效果 2025-11-07 00:44:13 +08:00
xiaojunnuo
f83fe28a18 chore: 优化input-number 2025-11-06 23:24:58 +08:00
xiaojunnuo
e487b45898 Merge branch 'v2-dev' of https://github.com/certd/certd into v2-dev 2025-11-06 23:20:09 +08:00
xiaojunnuo
4a94eab393 perf: 支持列表展示时固定证书最大天数,有助于列表进度条整齐展示 2025-11-06 23:20:02 +08:00
xiaojunnuo
5ff7e6ef0e fix: 修复在苹果手机下输入框被放大的问题 2025-11-05 13:59:40 +08:00
xiaojunnuo
0c99f41bd9 chore: bindurl 提示消除 2025-11-05 00:08:59 +08:00
xiaojunnuo
bcac810f71 Merge branch 'v2-dev' into v2-dev-buy 2025-11-04 23:04:11 +08:00
xiaojunnuo
feae105426 docs: 群晖delegated配置说明 2025-11-03 18:22:35 +08:00
xiaojunnuo
d46b9c54b1 perf: 支持记忆字段排序 2025-10-31 16:57:32 +08:00
xiaojunnuo
d0b7162b6a Merge branch 'v2-dev' of https://github.com/certd/certd into v2-dev 2025-10-30 15:08:20 +08:00
xiaojunnuo
c16660254b fix: 修复批量修改定时没有立即显示生效的bug 2025-10-30 15:08:14 +08:00
xiaojunnuo
bbe0d52740 build: release 2025-10-29 01:52:41 +08:00
xiaojunnuo
65117ebdd7 build: publish 2025-10-29 01:32:37 +08:00
xiaojunnuo
445d55e800 build: trigger build image 2025-10-29 01:32:19 +08:00
xiaojunnuo
dbce751464 v1.37.4 2025-10-29 01:30:41 +08:00
xiaojunnuo
b8640d903f build: prepare to build 2025-10-29 01:28:26 +08:00
xiaojunnuo
6e7560ee77 build: prepare to build 2025-10-29 01:25:54 +08:00
xiaojunnuo
efa26a067f fix: 修复站点证书监控复制按钮无效的bug 2025-10-28 23:45:08 +08:00
xiaojunnuo
f7cf7c198d fix: 修复lego模式下 私钥加密类型错误的bug 2025-10-28 15:46:52 +08:00
xiaojunnuo
d32f4fc38e 修复邮箱注册验证码报错的bug 2025-10-28 15:30:31 +08:00
xiaojunnuo
0c8b8647f3 docs: openapi 2025-10-28 10:34:52 +08:00
xiaojunnuo
c38dbbb1d7 perf: 优化数据备份效率,流式写入文件 2025-10-27 15:25:41 +08:00
xiaojunnuo
98cec15625 build: release 2025-10-25 01:26:51 +08:00
xiaojunnuo
bad9828f47 build: publish 2025-10-25 01:15:11 +08:00
xiaojunnuo
18f91ddffa build: trigger build image 2025-10-25 01:14:52 +08:00
xiaojunnuo
335745d365 v1.37.3 2025-10-25 01:13:14 +08:00
xiaojunnuo
4204b31398 build: prepare to build 2025-10-25 01:10:48 +08:00
xiaojunnuo
029a568645 build: prepare to build 2025-10-25 01:06:05 +08:00
xiaojunnuo
6b2f1fcd3e perf: 注册页面增加手机注册tab页签 2025-10-25 01:05:42 +08:00
xiaojunnuo
3bdc610249 chore: 流水线有效期 2025-10-25 00:42:27 +08:00
xiaojunnuo
c03a70fde2 fix: 修复网络测试,telnet的bug 2025-10-25 00:15:40 +08:00
xiaojunnuo
c77645e173 perf: 通知支持meow 2025-10-25 00:09:54 +08:00
xiaojunnuo
6531002d61 chore: 流水线有效期优化 2025-10-24 23:48:32 +08:00
xiaojunnuo
fea808ca5f chore: 1 2025-10-24 23:11:21 +08:00
xiaojunnuo
59ba408070 perf: 流水线创建时支持添加到证书监控 2025-10-24 23:10:20 +08:00
xiaojunnuo
3a8931feef perf: ssh 增加禁止-i参数提示 2025-10-24 22:48:32 +08:00
xiaojunnuo
7ebd8f6bf5 chore: 1 2025-10-23 00:37:35 +08:00
xiaojunnuo
73883979c6 chore: 1 2025-10-23 00:37:09 +08:00
xiaojunnuo
d8935b46b3 chore: check before 2025-10-23 00:36:20 +08:00
xiaojunnuo
1505d04622 chore: pipeline valid time add to plus 2025-10-23 00:14:31 +08:00
xiaojunnuo
3b690cc31f 支持开启流水线有效期设置 2025-10-23 00:05:36 +08:00
xiaojunnuo
b3814920bd perf: 群辉增加请求超时时长设置 2025-10-22 23:40:00 +08:00
xiaojunnuo
8bf1f828b9 perf: esa 自动删除过期证书提示 2025-10-22 23:07:33 +08:00
xiaojunnuo
911e69e3bc perf: 流水线支持有效期设置 2025-10-21 23:23:56 +08:00
xiaojunnuo
77b4a1eaf6 站点监控批量导入支持分组和备注 2025-10-21 22:38:02 +08:00
xiaojunnuo
2ed12c429e perf: 站点证书监控增加导出和分组功能 2025-10-21 22:28:02 +08:00
xiaojunnuo
e578c52fdf perf: 证书监控增加批量删除 2025-10-21 00:01:28 +08:00
xiaojunnuo
5ff4e3c4ea chore: 1 2025-10-17 14:48:39 +08:00
xiaojunnuo
1c2e7256c1 doc: 1 2025-10-17 13:43:15 +08:00
xiaojunnuo
7a51ca225a Merge branch 'v2' into v2-dev 2025-10-17 09:34:22 +08:00
xiaojunnuo
8d242d8072 Merge branch 'v2-dev' of https://github.com/certd/certd into v2-dev 2025-10-17 09:33:24 +08:00
xiaojunnuo
543b068efa chore: gitignore 2025-10-17 09:33:14 +08:00
xiaojunnuo
eadbd5e821 doc: plugin doc gen 2025-10-17 09:32:14 +08:00
xiaojunnuo
c771f5a13c Merge branch 'v2' of https://github.com/certd/certd into v2 2025-10-17 09:25:31 +08:00
xiaojunnuo
f13b3111c3 doc: plugin-doc-gen 2025-10-17 09:25:22 +08:00
xiaojunnuo
bb2714ff24 fix: 修复并发情况下证书申请日志混乱的bug 2025-10-15 23:03:59 +08:00
xiaojunnuo
54c42b1fc2 build: release 2025-10-14 23:24:59 +08:00
xiaojunnuo
1f42f933f0 fix: 修复站点证书监控,证书已经更新到最新日期了,仍然发出警告通知的bug 2025-10-14 23:24:47 +08:00
xiaojunnuo
6c533d225b chore: 1 2025-10-14 23:00:30 +08:00
xiaojunnuo
67a89d1289 chore: 1 2025-10-14 22:53:32 +08:00
xiaojunnuo
0b9bef2f38 build: publish 2025-10-14 22:52:22 +08:00
xiaojunnuo
1c4649409d build: trigger build image 2025-10-14 22:52:03 +08:00
xiaojunnuo
e1daaf07ce v1.37.2 2025-10-14 22:50:33 +08:00
xiaojunnuo
cd21f2d1d7 build: prepare to build 2025-10-14 22:48:36 +08:00
xiaojunnuo
836e41064f build: prepare to build 2025-10-14 22:43:55 +08:00
xiaojunnuo
4658e4c739 build: prepare to build 2025-10-14 22:41:32 +08:00
xiaojunnuo
7993a7cdb0 perf: 优化start.sh脚本,去掉删除非ui目录的操作及提示 2025-10-14 22:41:03 +08:00
xiaojunnuo
567cb7d737 perf: start.sh脚本支持根据当前系统判断是否使用sudo 2025-10-14 22:35:24 +08:00
xiaojunnuo
985128b537 chore: 1 2025-10-14 22:25:42 +08:00
xiaojunnuo
cd35568e04 perf: 证书监控支持设置证书即将过期天数 2025-10-14 22:25:04 +08:00
xiaojunnuo
f612509cac perf: 支持新网代理方式 2025-10-14 12:05:31 +08:00
xiaojunnuo
f415190483 perf: dns支持新网互联 2025-10-14 10:55:10 +08:00
xiaojunnuo
e00733a346 fix: aliyunoss 选择证书接入点选择新加坡无法上传的bug 2025-10-13 23:16:03 +08:00
xiaojunnuo
aafafa0e73 chore: 1 2025-10-12 23:57:17 +08:00
xiaojunnuo
c87c9af12e chore: 1 2025-10-12 23:56:14 +08:00
xiaojunnuo
622215715f chore: 删除无用依赖 2025-10-11 19:08:14 +08:00
xiaojunnuo
c87250c028 docs: ipv6地址提示 2025-10-11 18:52:57 +08:00
xiaojunnuo
d6b6d700a5 docs: ipv6地址提示 2025-10-11 18:21:17 +08:00
xiaojunnuo
9d4e2c98a3 Merge remote-tracking branch 'origin/v2-dev' into v2-dev 2025-10-11 17:00:00 +08:00
xiaojunnuo
08094c2660 docs: ipv6地址提示 2025-10-11 16:59:28 +08:00
xiaojunnuo
fda82c82b0 chore: 1 2025-10-07 21:54:50 +08:00
xiaojunnuo
f0eabd4ea0 build: vscode auto compile 2025-10-07 21:45:09 +08:00
xiaojunnuo
5a4d812146 perf: 增加飞牛证书id选择的提示 2025-10-07 21:05:28 +08:00
xiaojunnuo
bf156a13bd fix: 修复飞牛证书部署后无法生效的bug 2025-10-07 21:01:19 +08:00
xiaojunnuo
53d276a8fc chore: 官方email服务支持发送附件 2025-10-05 22:44:59 +08:00
xiaojunnuo
978fa54518 Merge branch 'v2-dev' of https://github.com/certd/certd into v2-dev 2025-10-05 08:05:59 +00:00
xiaojunnuo
31f82e58b5 chore: test优化 2025-10-05 07:59:56 +00:00
xiaojunnuo
5967f66e6d chore: 1 2025-10-05 15:01:35 +08:00
xiaojunnuo
bea81b54ca chore: 1 2025-10-05 14:52:25 +08:00
xiaojunnuo
6fd403bdca Merge branch 'v2-dev' of https://github.com/certd/certd into v2-dev 2025-10-05 14:47:45 +08:00
xiaojunnuo
3d673d9d40 chroe: remote 2025-10-05 14:47:40 +08:00
xiaojunnuo
cac949de56 Merge branch 'v2-dev' of https://github.com/certd/certd into v2-dev 2025-10-05 05:57:03 +00:00
xiaojunnuo
dffa152698 chore: nettest 2025-10-05 13:10:03 +08:00
xiaojunnuo
7796298fca 1 2025-10-01 02:11:03 +08:00
xiaojunnuo
5291bfe8d4 chore: 网络测试 2025-09-30 18:03:16 +00:00
xiaojunnuo
b364313297 chore: linux 网络测试命令验证 2025-09-30 18:01:49 +00:00
xiaojunnuo
2bef608e07 perf: 支持网络测试 2025-09-30 23:27:31 +08:00
xiaojunnuo
aee13ad909 docs 2025-09-29 21:11:43 +08:00
xiaojunnuo
9d82eba599 docs: 2025-09-29 21:00:28 +08:00
xiaojunnuo
4852beb390 1.37.1 2025-09-29 20:48:34 +08:00
xiaojunnuo
522c2f61c0 build: publish 2025-09-29 20:37:20 +08:00
xiaojunnuo
d331396afe build: trigger build image 2025-09-29 20:37:03 +08:00
xiaojunnuo
c725cee044 v1.37.1 2025-09-29 20:35:30 +08:00
xiaojunnuo
367ef4ecb2 build: prepare to build 2025-09-29 20:32:54 +08:00
xiaojunnuo
c3a64facd5 chore 2025-09-29 20:32:31 +08:00
xiaojunnuo
2671781e1b fix: 修复某些情况下cname申请证书报错主域名不一致的bug 2025-09-29 18:58:19 +08:00
xiaojunnuo
9291fa68aa perf: dns解析支持阿里esa 2025-09-28 23:29:56 +08:00
xiaojunnuo
6ebb3659f4 perf: cname主域名校验提示优化,显示不一致的两方便于排查问题 2025-09-28 16:18:39 +08:00
xiaojunnuo
109696e965 fix: 修复版本比较bug 2025-09-28 12:49:53 +08:00
xiaojunnuo
b86bbd370c chore: deploy 1.37.0 2025-09-28 12:44:02 +08:00
xiaojunnuo
1575a4fb1a chore: deploy 1.37.0 2025-09-28 12:42:54 +08:00
xiaojunnuo
e2f500be90 chore: deploy 1.37.0 2025-09-28 12:37:22 +08:00
xiaojunnuo
284b00a826 chore: 2025-09-28 12:21:42 +08:00
xiaojunnuo
66180e19b5 build: publish 2025-09-28 12:18:46 +08:00
xiaojunnuo
1531462d22 build: trigger build image 2025-09-28 12:18:30 +08:00
xiaojunnuo
c4ebbaba74 Merge branch 'v2-dev' into v2-dev-buy
# Conflicts:
#	packages/core/basic/src/utils/util.hash.ts
2025-09-24 01:58:11 +08:00
xiaojunnuo
81e588a896 Merge branch 'refs/heads/v2-dev' into v2-dev-buy
# Conflicts:
#	docs/.vitepress/config.ts
#	packages/ui/certd-client/src/views/certd/pipeline/sub-domain/index.vue
2025-09-22 22:29:59 +08:00
xiaojunnuo
b5d8161bc2 perf: 子域名托管说明 2025-08-31 10:50:07 +08:00
xiaojunnuo
b497eda26e Merge branch 'v2-dev' into v2-dev-buy 2025-08-29 16:54:11 +08:00
xiaojunnuo
fe9dd7d23f Merge branch 'v2-dev' into v2-dev-buy 2025-08-25 23:22:39 +08:00
xiaojunnuo
6f8fbe3f09 chore: 2025-08-25 21:16:33 +08:00
xiaojunnuo
6b7631ed5e fix: 修复新部署的无法保存公共eab配置的bug 2025-08-17 19:07:50 +08:00
xiaojunnuo
1b56c0f191 chore: comm trial 2025-08-15 00:20:38 +08:00
xiaojunnuo
94cbeba495 chore: comm trial 2025-08-15 00:11:48 +08:00
xiaojunnuo
962f8233b0 chore: 2025-08-11 02:02:30 +08:00
xiaojunnuo
31923d511e chore: 修复vip过期时间显示错误的问题 2025-08-11 01:47:39 +08:00
xiaojunnuo
fdbb8300d3 chore: 自动更新vip状态 2025-08-10 23:48:40 +08:00
xiaojunnuo
203d8bca57 chore: 永久专业版特殊颜色 2025-08-10 02:21:32 +08:00
xiaojunnuo
74c331eaf7 chore: 永久专业版特殊颜色 2025-08-10 02:07:48 +08:00
xiaojunnuo
54365528a8 chore: buy page and login 2025-08-09 23:41:59 +08:00
xiaojunnuo
bc174f7054 perf: cname方式hostRecord增加user校验 2025-08-09 23:37:31 +08:00
929 changed files with 38439 additions and 7309 deletions

View File

@@ -3,7 +3,7 @@ on:
push: push:
branches: ['v2-dev'] branches: ['v2-dev']
paths: paths:
- "trigger/build1.trigger" - "trigger/build.trigger"
# schedule: # schedule:
# - # 国际时间 19:17 执行北京时间3:17 ↙↙↙ 改成你想要每天自动执行的时间 # - # 国际时间 19:17 执行北京时间3:17 ↙↙↙ 改成你想要每天自动执行的时间

View File

@@ -1,9 +1,9 @@
name: deploy-demo name: deploy-demo
on: on:
# push: push:
# branches: ['v2-dev'] branches: ['v2-dev']
# paths: paths:
# - "trigger/deploy.trigger" - "trigger/deploy.trigger"
workflow_run: workflow_run:
workflows: [ "build-image" ] workflows: [ "build-image" ]
types: types:
@@ -19,6 +19,7 @@ permissions:
jobs: jobs:
deploy-certd-demo: deploy-certd-demo:
runs-on: ubuntu-latest runs-on: ubuntu-latest
if: ${{ github.event.workflow_run.conclusion == 'success' }}
steps: steps:
- name: Checkout Code - name: Checkout Code
uses: actions/checkout@v4 uses: actions/checkout@v4
@@ -44,7 +45,8 @@ jobs:
- name: deploy-certd-demo - name: deploy-certd-demo
uses: tyrrrz/action-http-request@master uses: tyrrrz/action-http-request@master
with: with:
url: http://flow-openapi.aliyun.com/pipeline/webhook/lzCzlGrLCOHQaTMMt0mG # 通过webhook 触发 certd-demo来部署
url: ${{ secrets.WEBHOOK_CERTD_DEMO }}
method: POST method: POST
headers: | headers: |
Content-Type: application/json Content-Type: application/json
@@ -54,15 +56,3 @@ jobs:
} }
retry-count: 3 retry-count: 3
retry-delay: 5000 retry-delay: 5000
- name: deploy-certd-doc
uses: tyrrrz/action-http-request@master
with:
url: http://flow-openapi.aliyun.com/pipeline/webhook/IiSxLDp9aOhgDUxJPytv
method: POST
body: |
{}
headers: |
Content-Type: application/json
retry-count: 3
retry-delay: 5000

61
.github/workflows/publish-atom.yaml vendored Normal file
View File

@@ -0,0 +1,61 @@
name: publish-atomgit
on:
push:
branches: ['v2-dev']
paths:
- "trigger/publish.trigger"
workflow_run:
workflows: [ "build-image-for-release" ]
types:
- completed
# schedule:
# - # 国际时间 19:17 执行北京时间3:17 ↙↙↙ 改成你想要每天自动执行的时间
# - cron: '17 19 * * *'
permissions:
contents: read
packages: write
jobs:
publish-atomgit:
runs-on: ubuntu-latest
if: ${{ github.event.workflow_run.conclusion == 'success' }}
steps:
- name: Checkout Code
uses: actions/checkout@v4
with:
fetch-depth: 0
lfs: true
- name: get_certd_version
id: get_certd_version
uses: actions/github-script@v6
with:
result-encoding: string
script: |
const fs = require('fs');
const path = require('path');
const pnpmWorkspace = "./pnpm-workspace.yaml";
fs.unlinkSync(pnpmWorkspace)
const jsonFilePath = "./packages/ui/certd-server/package.json";
const jsonContent = fs.readFileSync(jsonFilePath, 'utf-8');
const pkg = JSON.parse(jsonContent)
console.log("certd_version:",pkg.version);
return pkg.version
- run: |
npm install -g pnpm
pnpm install
npm run build
working-directory: ./packages/ui/certd-client
- name: publish_to_atomgit
id: publish_to_atomgit
run: |
rootDir=$(pwd)
rm -rf ./packages/ui/certd-client/dist/**/*.gz
cd ./packages/ui/certd-client/dist && zip -r ../ui.zip .
cd $rootDir
export ATOMGIT_TOKEN=${{ secrets.ATOMGIT_TOKEN }}
pnpm install
npm run publish_to_atomgit
working-directory: ./

39
.github/workflows/publish-gitee.yaml vendored Normal file
View File

@@ -0,0 +1,39 @@
name: publish-gitee
on:
push:
branches: ['v2-dev']
paths:
- "trigger/publish.trigger"
workflow_run:
workflows: [ "build-image-for-release" ]
types:
- completed
# schedule:
# - # 国际时间 19:17 执行北京时间3:17 ↙↙↙ 改成你想要每天自动执行的时间
# - cron: '17 19 * * *'
permissions:
contents: read
packages: write
jobs:
publish-gitee:
runs-on: ubuntu-latest
if: ${{ github.event.workflow_run.conclusion == 'success' }}
steps:
- name: Checkout Code
uses: actions/checkout@v4
with:
fetch-depth: 0
lfs: true
- name: publish_to_gitee
id: publish_to_gitee
run: |
export GITEE_TOKEN=${{ secrets.GITEE_TOKEN }}
rm -rf ./pnpm*.yaml
npm install -g pnpm
pnpm install
npm run publish_to_gitee
working-directory: ./

39
.github/workflows/publish-github.yaml vendored Normal file
View File

@@ -0,0 +1,39 @@
name: publish-github
on:
push:
branches: ['v2-dev']
paths:
- "trigger/publish.trigger"
workflow_run:
workflows: [ "build-image-for-release" ]
types:
- completed
# schedule:
# - # 国际时间 19:17 执行北京时间3:17 ↙↙↙ 改成你想要每天自动执行的时间
# - cron: '17 19 * * *'
permissions:
contents: read
packages: write
jobs:
publish-github:
runs-on: ubuntu-latest
if: ${{ github.event.workflow_run.conclusion == 'success' }}
steps:
- name: Checkout Code
uses: actions/checkout@v4
with:
fetch-depth: 0
lfs: true
- name: publish_to_github
id: publish_to_github
run: |
export GITHUB_TOKEN=${{ secrets.GITHUB_TOKEN }}
rm -rf ./pnpm*.yaml
npm install -g pnpm
pnpm install
npm run publish_to_github
working-directory: ./

View File

@@ -1,11 +1,11 @@
name: build-image-for-release name: build-image-for-release
on: on:
# push: push:
# branches: ['v2-dev'] branches: ['v2-dev']
# paths: paths:
# - "builder/release.trigger" - "trigger/release.trigger"
# workflow_run: # workflow_run:
# workflows: [ "build-image" ] # workflows: [ "deploy-demo" ]
# types: # types:
# - completed # - completed
@@ -117,3 +117,17 @@ jobs:
# registry.cn-shenzhen.aliyuncs.com/handsfree/certd-agent:${{steps.get_certd_version.outputs.result}} # registry.cn-shenzhen.aliyuncs.com/handsfree/certd-agent:${{steps.get_certd_version.outputs.result}}
# greper/certd-agent:latest # greper/certd-agent:latest
# greper/certd-agent:${{steps.get_certd_version.outputs.result}} # greper/certd-agent:${{steps.get_certd_version.outputs.result}}
- name: deploy-certd-doc
uses: tyrrrz/action-http-request@master
with:
url: ${{ secrets.WEBHOOK_CERTD_DOC }}
method: POST
body: |
{
"CERTD_VERSION": "1.0.0"
}
headers: |
Content-Type: application/json
retry-count: 3
retry-delay: 5000

View File

@@ -0,0 +1,34 @@
name: sync-to-atomgit-dev
on:
push:
branches: ['v2-dev']
# schedule:
# - # 国际时间 19:17 执行北京时间3:17 ↙↙↙ 改成你想要每天自动执行的时间
# - cron: '17 19 * * *'
permissions:
contents: read
jobs:
sync:
runs-on: ubuntu-latest
steps:
- name: Checkout work repo # 1. 检出当前仓库(certd-sync-work)
uses: actions/checkout@v4
with:
fetch-depth: 0
lfs: true
- name: Set git user # 2. 给git命令设置用户名和邮箱,↙↙↙ 改成你的name和email
run: |
git config --global user.name "xiaojunnuo"
git config --global user.email "xiaojunnuo@qq.com"
- name: Set git token # 3. 给git命令设置token用于push到目标仓库
uses: de-vri-es/setup-git-credentials@v2
with: # token 格式为: username:password
credentials: https://greper:${{secrets.ATOMGIT_TOKEN}}@atomgit.com
- name: push to atomgit # 4. 执行同步
run: |
git remote add upstream https://atomgit.com/certd/certd
git push --set-upstream upstream v2-dev

34
.github/workflows/sync-to-atomgit.yml vendored Normal file
View File

@@ -0,0 +1,34 @@
name: sync-to-atomgit
on:
push:
branches: ['v2']
# schedule:
# - # 国际时间 19:17 执行北京时间3:17 ↙↙↙ 改成你想要每天自动执行的时间
# - cron: '17 19 * * *'
permissions:
contents: read
jobs:
sync:
runs-on: ubuntu-latest
steps:
- name: Checkout work repo # 1. 检出当前仓库(certd-sync-work)
uses: actions/checkout@v4
with:
fetch-depth: 0
lfs: true
- name: Set git user # 2. 给git命令设置用户名和邮箱,↙↙↙ 改成你的name和email
run: |
git config --global user.name "xiaojunnuo"
git config --global user.email "xiaojunnuo@qq.com"
- name: Set git token # 3. 给git命令设置token用于push到目标仓库
uses: de-vri-es/setup-git-credentials@v2
with: # token 格式为: username:password
credentials: https://greper:${{secrets.ATOMGIT_TOKEN}}@atomgit.com
- name: push to atomgit # 4. 执行同步
run: |
git remote add upstream https://atomgit.com/certd/certd
git push --set-upstream upstream v2

3
.gitignore vendored
View File

@@ -29,4 +29,5 @@ test/**/*.js
/packages/ui/certd-server/data/db.sqlite /packages/ui/certd-server/data/db.sqlite
/packages/ui/certd-server/data/keys.yaml /packages/ui/certd-server/data/keys.yaml
/packages/pro/ /packages/pro/
test.js test.js
.history

4
.npmrc
View File

@@ -1,2 +1,6 @@
link-workspace-packages=deep link-workspace-packages=deep
prefer-workspace-packages=true prefer-workspace-packages=true
better_sqlite3_binary_host=https://registry.npmmirror.com/-/binary/better-sqlite3
better_sqlite3_binary_host_mirror=https://registry.npmmirror.com/-/binary/better-sqlite3
better-sqlite3_binary_host=https://registry.npmmirror.com/-/binary/better-sqlite3
better-sqlite3_binary_host_mirror=https://registry.npmmirror.com/-/binary/better-sqlite3

48
.vscode/launch.json vendored
View File

@@ -10,8 +10,8 @@
"type": "node", "type": "node",
"request": "launch", "request": "launch",
"cwd": "${workspaceFolder}/packages/ui/certd-client", "cwd": "${workspaceFolder}/packages/ui/certd-client",
"runtimeExecutable": "npm", "runtimeExecutable": "pnpm",
"runtimeArgs": ["run", "dev"], "runtimeArgs": ["dev"],
"console": "integratedTerminal", "console": "integratedTerminal",
"internalConsoleOptions": "neverOpen" "internalConsoleOptions": "neverOpen"
}, },
@@ -20,8 +20,48 @@
"type": "node", "type": "node",
"request": "launch", "request": "launch",
"cwd": "${workspaceFolder}/packages/ui/certd-server", "cwd": "${workspaceFolder}/packages/ui/certd-server",
"runtimeExecutable": "npm", "runtimeExecutable": "pnpm",
"runtimeArgs": ["run", "dev"], "runtimeArgs": ["dev"],
"console": "integratedTerminal",
"internalConsoleOptions": "neverOpen"
},
{
"name": "server-mysql",
"type": "node",
"request": "launch",
"cwd": "${workspaceFolder}/packages/ui/certd-server",
"runtimeExecutable": "pnpm",
"runtimeArgs": ["dev-mysql"],
"console": "integratedTerminal",
"internalConsoleOptions": "neverOpen"
},
{
"name": "server-pg",
"type": "node",
"request": "launch",
"cwd": "${workspaceFolder}/packages/ui/certd-server",
"runtimeExecutable": "pnpm",
"runtimeArgs": ["dev-pg"],
"console": "integratedTerminal",
"internalConsoleOptions": "neverOpen"
},
{
"name": "server-pgpl",
"type": "node",
"request": "launch",
"cwd": "${workspaceFolder}/packages/ui/certd-server",
"runtimeExecutable": "pnpm",
"runtimeArgs": ["dev-pgpl"],
"console": "integratedTerminal",
"internalConsoleOptions": "neverOpen"
},
{
"name": "server-common",
"type": "node",
"request": "launch",
"cwd": "${workspaceFolder}/packages/ui/certd-server",
"runtimeExecutable": "pnpm",
"runtimeArgs": ["dev-commpro"],
"console": "integratedTerminal", "console": "integratedTerminal",
"internalConsoleOptions": "neverOpen" "internalConsoleOptions": "neverOpen"
}, },

15
.vscode/settings.json vendored
View File

@@ -1,4 +1,17 @@
{ {
"eslint.debug": false, "eslint.debug": false,
"eslint.format.enable": true "eslint.format.enable": true,
"typescript.tsc.autoDetect": "watch",
"git.scanRepositories": [
"./packages/pro"
],
"editor.defaultFormatter": "dbaeumer.vscode-eslint",
"[typescript]": {
"editor.defaultFormatter": "vscode.typescript-language-features"
},
"editor.tabSize": 2,
"explorer.autoReveal": false,
"[javascript]": {
"editor.defaultFormatter": "vscode.typescript-language-features"
}
} }

View File

@@ -3,6 +3,286 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [1.38.1](https://github.com/certd/certd/compare/v1.38.0...v1.38.1) (2026-01-15)
### Bug Fixes
* 修复自定义插件name丢失author导致找不到插件的bug ([2fbb58e](https://github.com/certd/certd/commit/2fbb58eb2b239eab4864f90aa72b0ef2ada38e8f))
### Performance Improvements
* 优化内存占用 ([4fc8acc](https://github.com/certd/certd/commit/4fc8acce8c1beec38c24b0977b71ff6b18cb52c9))
* 自定义插件支持使用_ctx.import("/@/xxx.js")以绝对路径引用模块 ([9eace86](https://github.com/certd/certd/commit/9eace86aeeb48c23b55102fc5d42088294d9eb97))
# [1.38.0](https://github.com/certd/certd/compare/v1.37.17...v1.38.0) (2026-01-13)
### Bug Fixes
* 修复禁用第三方登录自动注册无效的bug ([7ee39fd](https://github.com/certd/certd/commit/7ee39fd4eddfc847bcef879f0904a4319993d081))
* 修复又拍云upyun密码错误没有报错的bug ([235972f](https://github.com/certd/certd/commit/235972f3dabe0b87879a2d9950367dc45edfebe8))
* 修复重启certd后再启用流水线不会自动执行的bug ([468ccbf](https://github.com/certd/certd/commit/468ccbf2b725fc4b78ce4b950a114e4a4be57698))
* 优化源码部署缺少wget的提示 ([f193341](https://github.com/certd/certd/commit/f193341eaef765b7586a0b6e7c73015470536cc2))
### Features
* 【破坏性更新】插件改为metadata加载模式plugin-cert、plugin-lib包部分代码转移到certd-server中影响自定义插件需要修改相关import引用 ([a3fb249](https://github.com/certd/certd/commit/a3fb24993d7ac8fbb0bb354fa02ef067f609021e))
* 通过metadata加载插件降低内存占用 ([7634f15](https://github.com/certd/certd/commit/7634f153b7004462f207062c0502d8345e318cc7))
### Performance Improvements
* 流水线页面可以查看证书过期时间 ([be03d8e](https://github.com/certd/certd/commit/be03d8e13752c355dbec158da78b9cb4c3b3bb5d))
* 每页记录条数保持 ([14f9987](https://github.com/certd/certd/commit/14f99875fb3f535fa5ffb7bf5db3960b105aa7aa))
* 手机号登录放到前面 ([26ac081](https://github.com/certd/certd/commit/26ac08118219407c5dd3afc35130cdd48b8fab05))
* 新增部署1panel面板证书插件 ([4243622](https://github.com/certd/certd/commit/42436224148d6fffe5da8e5e0185a698e079032b))
* 优化微信支付对接文档 ([64e0d9a](https://github.com/certd/certd/commit/64e0d9a4d54b0d9da028be2c5e0ece7a97b2c250))
* 优化站点监控支持设置忽略主站证书一致性支持开启和关闭自动同步ip ([26f75c7](https://github.com/certd/certd/commit/26f75c71ba8866278dbe117f1bfaf671e7f70781))
* 增加邮件发送证书模版配置 ([cabc4da](https://github.com/certd/certd/commit/cabc4da3ac003a8c699c69f5bffea4c149be185c))
* 站点监控增加是否自动同步IP开关 ([5268904](https://github.com/certd/certd/commit/52689049ae8e004e1252ab1e2872fbf676e0295f))
* 证书流水线可以开启webhook ([840bd52](https://github.com/certd/certd/commit/840bd526714072315244a6900c95395d2d62f647))
* 支持部署到exsiopenwrt ([dae87e2](https://github.com/certd/certd/commit/dae87e26a3266a2bf26afe1ef4c489a3f6bf41e4))
* 支持公告功能 ([a79fe1f](https://github.com/certd/certd/commit/a79fe1f350f2991af9e5b50825f1776029677fc5))
* 支持webhook触发流水线新增触发类型图标显示 ([1a29541](https://github.com/certd/certd/commit/1a2954114063a8b994c257a90e5814e0a3a8d924))
* webhook触发器一个流水线限制只能添加一个 ([6c39d7b](https://github.com/certd/certd/commit/6c39d7b1eecb679cb6506b0e3557e8152e01417d))
* zenlayer证书更新 ([9ba6c83](https://github.com/certd/certd/commit/9ba6c838215d0750cda925778a47002a521f05e9))
## [1.37.17](https://github.com/certd/certd/compare/v1.37.16...v1.37.17) (2025-12-29)
### Bug Fixes
* 发送证书到邮箱插件的邮件模版转为使用邮箱配置中的通用模版 ([c5a3003](https://github.com/certd/certd/commit/c5a3003cf7b640500a90ec2c8961859ffe6fdb18))
* 首页最快到期证书,不包含已禁用的流水线 ([d731956](https://github.com/certd/certd/commit/d731956b066e4dbbe24d4de7b3d3679b355eb97c))
* 修复部署到华为obs 报错的bug ([dd19afc](https://github.com/certd/certd/commit/dd19afce928a7f36312af9df1e7e5ed3eb1e214a))
* 修复从模版创建的流水线不会自动执行的bug ([833808c](https://github.com/certd/certd/commit/833808c5deb716122b241d3d67349d2d6a18bf45))
* 修复流水线列表step数量统计错误的bug ([0e5a4fb](https://github.com/certd/certd/commit/0e5a4fb098d3261b690c551cf2b95198cac487e7))
* 修复用户删除后用相同的oauth授权登录报错用户不存在的问题 ([e505916](https://github.com/certd/certd/commit/e5059165259e4d757abc811c0c14bbc4a3dbaee9))
* 修复站点ip监控报主站与ip证书过期时间不一致的问题 ([62f8525](https://github.com/certd/certd/commit/62f8525dd5da95dc07ed103f602644c6e5f7f8e3))
* 修复serverchan3 没有选择tags报错的bug ([5bbf210](https://github.com/certd/certd/commit/5bbf210394883c4893c365bd16e999490b6e9b41))
* telegram 修复消息内存在横杠无法发出的bug ([5f4469e](https://github.com/certd/certd/commit/5f4469e306187c31d8a74d53b17ea3a213420367))
### Performance Improvements
* 批量修改定时时间支持随机时间 ([d0f653d](https://github.com/certd/certd/commit/d0f653da9a2970920e961e7404ff04080bccd343))
* 批量运行优化,支持普通运行和强制重新运行 ([039c62b](https://github.com/certd/certd/commit/039c62b09b37cdda35d33c6ee9adecad62dee75c))
* 升级lego到4.30.1版本 ([136e8dd](https://github.com/certd/certd/commit/136e8dd7c5ff7199ff4b0bcca95b8a03aa847553))
* 腾讯云EO增加请求参数打印 ([5b5deac](https://github.com/certd/certd/commit/5b5deac7d98684eda5c68384241a4d62c48d803b))
* 优化阿里云esa清理证书时机 ([5359a76](https://github.com/certd/certd/commit/5359a7670fac5a18c4294b37a34227308a0deed6))
* 优化源码方式部署,前端无需编译 ([13ddc97](https://github.com/certd/certd/commit/13ddc979ec7953e3db8db76dd23fd85a3b3c7997))
* 支持部署到goedge ([44bf4b1](https://github.com/certd/certd/commit/44bf4b1cc1aafa2d711c3b8e408009f0ceb413eb))
* 支持从阿里云商用证书订单中获取证书 ([8872466](https://github.com/certd/certd/commit/887246696861c3a0b1f99fd9ad978caea423c650))
* 支持授权给管理员查看和下载用户证书 ([1347355](https://github.com/certd/certd/commit/1347355cb117694abe99da385352a19771a32e84))
* 支持执行队列,避免同一时间触发流水线太多导致被限制 ([888d959](https://github.com/certd/certd/commit/888d9591fe9730b529e1c355d71f41e7ec9b479d))
* 支持aws route53 dns ([cbb8319](https://github.com/certd/certd/commit/cbb8319cfa48673e81ec15894adc3376c173c97e))
* 支持ucloud waf未测试 ([a248367](https://github.com/certd/certd/commit/a248367b154c38661a6797ef64e37ec99d4e2abf))
* 支持ucloud上传到ussl部署到ucdn ([e61daae](https://github.com/certd/certd/commit/e61daaee2d0dec19710cd4ec759219a071f2435e))
* 执行队列数量支持设置 ([cd94488](https://github.com/certd/certd/commit/cd944882c3272adad4a2da94a3889a01fe05fe13))
* aws route53 ([8caab1f](https://github.com/certd/certd/commit/8caab1fd9264df548f467b94202d567107b7a30b))
* ip证书校验方式提示 ([773cada](https://github.com/certd/certd/commit/773cada57a01fb28ea8602062aaeec3d45109ea9))
## [1.37.16](https://github.com/certd/certd/compare/v1.37.15...v1.37.16) (2025-12-15)
### Bug Fixes
* 修复ipv6作为证书域名申请证书校验失败的bug ([e4e16bc](https://github.com/certd/certd/commit/e4e16bc6a65bb082c18ca0590226f0987a47d477))
* 优化西部数据 500 already exists 的问题 ([2bfad9f](https://github.com/certd/certd/commit/2bfad9fc651da208b610abd921fbfb2fbc04203f))
### Performance Improvements
* 批量设置定时,支持清除定时 ([63d8bcf](https://github.com/certd/certd/commit/63d8bcf8823f713365042d3c7aee3cf31d44b044))
* 新增数据库迁移doc说明文档优化datetime字段平滑迁移 ([45fbce0](https://github.com/certd/certd/commit/45fbce0c2af5fb3ead6d3dd12a42f8cc1714262f))
* 支持彩虹聚合登录 ([6f18693](https://github.com/certd/certd/commit/6f186932ccad4becfdc0087c0539f7b2d0069844))
* 支持邮件模版设置 ([a6c0d2c](https://github.com/certd/certd/commit/a6c0d2c6f1fd6b60e6d7af290487c94564fd91ea))
* oidc支持使用第三方昵称或账号作为certd用户的用户名 ([b6fea0c](https://github.com/certd/certd/commit/b6fea0c8562abf912daa7d72958ceb2e93575d31))
## [1.37.15](https://github.com/certd/certd/compare/v1.37.14...v1.37.15) (2025-12-06)
### Bug Fixes
* oidc 支持nonce ([a5ca411](https://github.com/certd/certd/commit/a5ca41131b308b36b17ca359d9709ea8e9b7cee1))
### Performance Improvements
* 第三方登录支持gitee ([5cee7d4](https://github.com/certd/certd/commit/5cee7d44f17bd36972f477bc1f270999da558d05))
* 邮件模版安全优化 ([adca151](https://github.com/certd/certd/commit/adca151e4f07a4c6a2a753bfa48ee0d4d6469fd2))
* 支持部署到中国移动CDN ([4351304](https://github.com/certd/certd/commit/43513049beff407558d2a234415521464165cebc))
* 支持k8s apply ([d55954a](https://github.com/certd/certd/commit/d55954a36391ebe6a9397ff7dcfb710193ac5e34))
## [1.37.14](https://github.com/certd/certd/compare/v1.37.13...v1.37.14) (2025-12-02)
### Bug Fixes
* 修复注销登录时,第三方登录注销请求失败的报错 ([677e110](https://github.com/certd/certd/commit/677e1101e6cf4451abd8a876cc1d0ddd26a10b88))
## [1.37.13](https://github.com/certd/certd/compare/v1.37.12...v1.37.13) (2025-12-02)
### Bug Fixes
* 修复西部数据返回信息乱码问题 ([78b1650](https://github.com/certd/certd/commit/78b1650bdb071c858b3f90d53a700d11ee6de328))
* 修复西部数码使用域名级别的key申请证书失败的问题 ([5edc72d](https://github.com/certd/certd/commit/5edc72d47550b8e3364dabda70a41cce75d87956))
### Performance Improvements
* 第三方登录允许选择logo ([bb3085e](https://github.com/certd/certd/commit/bb3085ef84201ccd2dc632ba8c5097cb00258be4))
* 支持OIDC单点登录 ([fbf12f1](https://github.com/certd/certd/commit/fbf12f16b5eaa7676fd41923587bf6bd2595adba))
## [1.37.12](https://github.com/certd/certd/compare/v1.37.11...v1.37.12) (2025-11-29)
### Bug Fixes
* 修复waf tls版本号小写 ([0adcc6a](https://github.com/certd/certd/commit/0adcc6a8d194469be0c26940ed4837fb34929b68))
### Performance Improvements
* 支持微信扫码登录 ([73325aa](https://github.com/certd/certd/commit/73325aaefb0e750a22aaac40929e7bf3f5864996))
* 支持证书颁发机构 LiteSSL ([6be7591](https://github.com/certd/certd/commit/6be75913324e2828d9016eb307ff2d0abbbb2191))
## [1.37.11](https://github.com/certd/certd/compare/v1.37.10...v1.37.11) (2025-11-28)
### Bug Fixes
* 修复阿里云 waf tlsVersion参数缺失导致部署失败的问题 ([2fabee6](https://github.com/certd/certd/commit/2fabee647acf64afe689f5bea3603028cd0ba4a2))
* 修复备注撑开表格行高的bug ([c7b298c](https://github.com/certd/certd/commit/c7b298c46f0d52b43bd2bb17b374e7970a446446))
* 修复域名管理无法创建tencent-eo dns授权的bug ([3406bb5](https://github.com/certd/certd/commit/3406bb5a4a56bb310cddc1a1f410c70909fd129b))
* openapi 成功后失败都返回msg ([6e735bb](https://github.com/certd/certd/commit/6e735bbd1e29712e939f775a4db974db70e3b4b0))
### Performance Improvements
* ssh支持ppk格式私钥 ([575ae16](https://github.com/certd/certd/commit/575ae164c863d0b1f9fa0890549a2ee7472fb469))
* 优化宝塔网站证书在并发部署时导致nginx配置文件错乱的问题 ([51cc084](https://github.com/certd/certd/commit/51cc08411fd2dbab66d769b495dc1b0bf2f2578c))
* 优化天翼云cdn 等待5秒部署完成 ([53c88ad](https://github.com/certd/certd/commit/53c88ad5afe66a3f7c38b9b759747918913a4edc))
* 支持oidc单点登录 ([ec75afb](https://github.com/certd/certd/commit/ec75afbc44139dbe9da534d8a8c08a5b91f86d3c))
* ssl.com支持ecc ([b5ec047](https://github.com/certd/certd/commit/b5ec04723db48422f71041f4043002e7f5b450b1))
## [1.37.10](https://github.com/certd/certd/compare/v1.37.9...v1.37.10) (2025-11-19)
### Performance Improvements
* 优化dokploy 部署插件配置选择serverId ([c9709f2](https://github.com/certd/certd/commit/c9709f26981c1cc9f71c14babb204329fcae0db5))
* 站点证书监控备注输入框改成textarea ([70b603d](https://github.com/certd/certd/commit/70b603d601c34f39148c2ab70c655c51babf563d))
## [1.37.9](https://github.com/certd/certd/compare/v1.37.8...v1.37.9) (2025-11-19)
### Bug Fixes
* 商用证书上传保存失败的bug ([075b1dc](https://github.com/certd/certd/commit/075b1dc0eb8c39acc277277b1b334d66b6717ab2))
### Performance Improvements
* 优化阿里云clb 过期证书清理报错的问题 ([d465367](https://github.com/certd/certd/commit/d4653678b2e3643460f918992eeae4044d3a1cc7))
## [1.37.8](https://github.com/certd/certd/compare/v1.37.7...v1.37.8) (2025-11-17)
### Bug Fixes
* **plugins/woai-cdn:** 修正默认接口域名与帮助链接中的路径 ([#576](https://github.com/certd/certd/issues/576)) @LjyLab ([d20046c](https://github.com/certd/certd/commit/d20046c86681ea177ece434423b7c81a76b437fb))
### Performance Improvements
* 修复西数解析记录添加失败的bug支持部署证书到西数虚拟主机 ([1102952](https://github.com/certd/certd/commit/1102952b4703e8c0bbc17b0700c0ed3ef6f866d3))
* 支持回车键触发登录 ([eb5c88f](https://github.com/certd/certd/commit/eb5c88fbb2901f1a9669429a7cd8dc76f6806d01))
## [1.37.7](https://github.com/certd/certd/compare/v1.37.6...v1.37.7) (2025-11-12)
### Bug Fixes
* 修复点击立即触发运行报错的bug ([e1eef01](https://github.com/certd/certd/commit/e1eef013a856d26fe80a05d9ec6e505e2e31e5f9))
* 账号绑定页面某些情况下打不开的bug ([44973eb](https://github.com/certd/certd/commit/44973ebd00e89c0fee8f3b91174157757ce0160f))
### Performance Improvements
* 支持使用letencrypt测试环境申请ip证书 ([86ce00a](https://github.com/certd/certd/commit/86ce00adf92ff98fead87a3eaaa6631036708f47))
* 支持腾讯云teo dns解析 ([1d23dd2](https://github.com/certd/certd/commit/1d23dd2426bd1e4c4dfea0a9e561d665e045ba9d))
## [1.37.6](https://github.com/certd/certd/compare/v1.37.5...v1.37.6) (2025-11-10)
### Bug Fixes
* 修复创建流水线报id不能为空的bug ([aac569a](https://github.com/certd/certd/commit/aac569a9259ede43399e0ed5d668e936b984d6dd))
### Performance Improvements
* 增加vip时间同步按钮 ([32e4e91](https://github.com/certd/certd/commit/32e4e91ab81008dda422fb53fd6f4d1711c5d80c))
* 支持letencrypt测试环境支持IP证书 ([1462cdd](https://github.com/certd/certd/commit/1462cddd1eb347b7ff238286b5c977b29a0591ec))
* server 增加 "@peculiar/x509" 依赖 ([acdf091](https://github.com/certd/certd/commit/acdf0912d452029f158279fb78155086e4fbac17))
## [1.37.5](https://github.com/certd/certd/compare/v1.37.4...v1.37.5) (2025-11-08)
### Bug Fixes
* 修复某些情况下编辑流水线没有立即展示变更效果的bug ([65e5309](https://github.com/certd/certd/commit/65e53092e8d677eb34b7d04d68c6f738165f5de2))
* 修复批量修改定时没有立即显示生效的bug ([c166602](https://github.com/certd/certd/commit/c16660254b8d637bd3ca100695934b343875fcbf))
* 修复新部署的无法保存公共eab配置的bug ([6b7631e](https://github.com/certd/certd/commit/6b7631ed5e920582d8e2162ec788b9429238ac29))
* 修复在苹果手机下输入框被放大的问题 ([5ff7e6e](https://github.com/certd/certd/commit/5ff7e6ef0eaa6bc111d0dd3c5713e1658f9113ad))
### Performance Improvements
* 支持记忆字段排序 ([d46b9c5](https://github.com/certd/certd/commit/d46b9c54b14ec5c892f4eed141fb549485941edd))
* 优化任务参数配置界面在手机版下的展示效果 ([0203aa2](https://github.com/certd/certd/commit/0203aa2b6e86e58e5e66a1b9d0278d186aa92554))
* 支持列表展示时固定证书最大天数,有助于列表进度条整齐展示 ([4a94eab](https://github.com/certd/certd/commit/4a94eab3935c89a63892661d9cf0d0891e54aa81))
* 子域名托管说明 ([b5d8161](https://github.com/certd/certd/commit/b5d8161bc2e686e6c8b552de0c29117a5d405313))
* cname方式hostRecord增加user校验 ([bc174f7](https://github.com/certd/certd/commit/bc174f70545e487bd549eff250f8ef69c6d343f3))
* doge云插件支持选择CDN域名以及支持同时部署多个域名 ([041954c](https://github.com/certd/certd/commit/041954c0674fabed54ed2cf5e727fecfb6943d19))
* doge云支持删除过期证书 ([335cf93](https://github.com/certd/certd/commit/335cf9397080a5e09074d5a89d03f59bd051cda5))
## [1.37.4](https://github.com/certd/certd/compare/v1.37.3...v1.37.4) (2025-10-28)
### Bug Fixes
* 修复站点证书监控复制按钮无效的bug ([efa26a0](https://github.com/certd/certd/commit/efa26a067f06402f30befc016d9934cadcd5a563))
* 修复lego模式下 私钥加密类型错误的bug ([f7cf7c1](https://github.com/certd/certd/commit/f7cf7c198d7f77b222099770f81accc637bc6619))
### Performance Improvements
* 优化数据备份效率,流式写入文件 ([c38dbbb](https://github.com/certd/certd/commit/c38dbbb1d72bd00a92fe275b76aea82a791e7199))
## [1.37.3](https://github.com/certd/certd/compare/v1.37.2...v1.37.3) (2025-10-24)
### Bug Fixes
* 修复并发情况下证书申请日志混乱的bug ([bb2714f](https://github.com/certd/certd/commit/bb2714ff241f9db4a71d805b23a1b0f9f2f6413a))
* 修复网络测试telnet的bug ([c03a70f](https://github.com/certd/certd/commit/c03a70fde23c8e840bd0fdb4fcbca8990f6c65eb))
* 修复站点证书监控证书已经更新到最新日期了仍然发出警告通知的bug ([1f42f93](https://github.com/certd/certd/commit/1f42f933f07860b27aa3d016e40916ff2b063eac))
### Performance Improvements
* 注册页面增加手机注册tab页签 ([6b2f1fc](https://github.com/certd/certd/commit/6b2f1fcd3e058061b814c3331cda8ce1b2d80d73))
* 流水线创建时支持添加到证书监控 ([59ba408](https://github.com/certd/certd/commit/59ba4080706548828ef1c0a9cd893c1c9a7d591f))
* 流水线支持有效期设置 ([911e69e](https://github.com/certd/certd/commit/911e69e3bc0cdd48b62953b5d0981d640fc1f8ac))
* 群辉增加请求超时时长设置 ([b381492](https://github.com/certd/certd/commit/b3814920bdcabc911f860a8e19b5b9b3a04709ac))
* 通知支持meow ([c77645e](https://github.com/certd/certd/commit/c77645e1733670214aaca5544cf8759d7e4adda4))
* 站点证书监控增加导出和分组功能 ([2ed12c4](https://github.com/certd/certd/commit/2ed12c429eb58274a4f9dd0ed3b66e160d283ded))
* 证书监控增加批量删除 ([e578c52](https://github.com/certd/certd/commit/e578c52fdf2f838038062aa4209b655fbae461fb))
* esa 自动删除过期证书提示 ([8bf1f82](https://github.com/certd/certd/commit/8bf1f828b9eaa9208f32e8ee7460b86420fed0c7))
* ssh 增加禁止-i参数提示 ([3a8931f](https://github.com/certd/certd/commit/3a8931feeffd7157163ff7d46b693e5e1a434b9c))
## [1.37.2](https://github.com/certd/certd/compare/v1.37.1...v1.37.2) (2025-10-14)
### Bug Fixes
* 修复飞牛证书部署后无法生效的bug ([bf156a1](https://github.com/certd/certd/commit/bf156a13bd443cdadb73c9dff79bbef7231b4401))
* aliyunoss 选择证书接入点选择新加坡无法上传的bug ([e00733a](https://github.com/certd/certd/commit/e00733a34644c23ffe926486b15dc96bf2fa4b57))
### Performance Improvements
* 优化start.sh脚本去掉删除非ui目录的操作及提示 ([7993a7c](https://github.com/certd/certd/commit/7993a7cdb01885535950c63187e3f67d67ba2f75))
* 增加飞牛证书id选择的提示 ([5a4d812](https://github.com/certd/certd/commit/5a4d8121462b1afe921d028465687be8c9679814))
* 证书监控支持设置证书即将过期天数 ([cd35568](https://github.com/certd/certd/commit/cd35568e042e6ab928685efad51cdbed823d2d4f))
* 支持网络测试 ([2bef608](https://github.com/certd/certd/commit/2bef608e07ceb56d52007f290667e0afef401b22))
* 支持新网代理方式 ([f612509](https://github.com/certd/certd/commit/f612509cac87b859e81a7a52fe94b2eaccad22f9))
* dns支持新网互联 ([f415190](https://github.com/certd/certd/commit/f41519048326d971acd9e0a30462231f77a299a6))
* start.sh脚本支持根据当前系统判断是否使用sudo ([567cb7d](https://github.com/certd/certd/commit/567cb7d737023e26ec58403c6f28f109e212d379))
## [1.37.1](https://github.com/certd/certd/compare/v1.37.0...v1.37.1) (2025-09-29)
### Bug Fixes
* 修复版本比较bug ([109696e](https://github.com/certd/certd/commit/109696e965d68c50c8627ffd40203edd1d2daea5))
* 修复某些情况下cname申请证书报错主域名不一致的bug ([2671781](https://github.com/certd/certd/commit/2671781e1bb0838981728d85eacf0e1a25a0fa48))
### Performance Improvements
* cname主域名校验提示优化显示不一致的两方便于排查问题 ([6ebb365](https://github.com/certd/certd/commit/6ebb3659f42155e4e8da600c493fb5227cd08137))
* dns解析支持阿里esa ([9291fa6](https://github.com/certd/certd/commit/9291fa68aa7a88a05c2f888bf3048df36a8fbde3))
# [1.37.0](https://github.com/certd/certd/compare/v1.36.25...v1.37.0) (2025-09-28) # [1.37.0](https://github.com/certd/certd/compare/v1.36.25...v1.37.0) (2025-09-28)
### Features ### Features

View File

@@ -16,21 +16,30 @@ Certd® 是一个免费的全自动证书管理系统,让你的网站证书永
> 流水线数量现已调整为无限制,欢迎大家使用 > 流水线数量现已调整为无限制,欢迎大家使用
|官方开源地址: | |
| ---- | ---- |
| [Github](https://github.com/certd/certd)| ![](https://img.shields.io/github/stars/certd/certd?logo=github) |
| [Gitee](https://gitee.com/certd/certd) | ![](https://gitee.com/certd/certd/badge/star.svg?theme=dark) |
| [AtomGit](https://atomgit.com/certd/certd) |![](https://atomgit.com/certd/certd/star/badge.svg) |
## 一、特性 ## 一、特性
本项目不仅支持证书申请过程自动化,还可以自动化部署更新证书,让你的证书永不过期。 本项目不仅支持证书申请过程自动化,还可以自动化部署更新证书,让你的证书永不过期。
* 全自动申请证书支持所有注册商注册的域名支持DNS-01、HTTP-01、CNAME代理等多种域名验证方式 * **全自动申请证书**: 支持所有注册商注册的域名支持DNS-01、HTTP-01、CNAME代理等多种域名验证方式
* 全自动部署更新证书目前支持部署到主机、阿里云、腾讯云等70+部署插件 * **全自动部署更新证书**: 目前支持部署到主机、阿里云、腾讯云等110+部署插件
* 支持通配符域名/泛域名,支持多个域名打到一个证书上,支持pem、pfx、der、jks等多种证书格式 * **多种证书格式**: 支持pem、pfx、der、jks、p7b
* 邮件通知、webhook通知、企微、钉钉、飞书、anpush等多种通知方式 * **免费通配符域名/泛域名证书**: 支持多个域名打到一个证书上
* 私有化部署数据保存本地安装简单快捷镜像由Github Actions构建过程公开透明 * **多种通知方式**: 邮件通知、webhook通知、企微、钉钉、飞书、anpush等多种通知方式
* 授权加密站点隐藏2FA密码防爆破等多重安全保障 * **私有化部署**: 数据保存本地安装简单快捷镜像由Github Actions构建过程公开透明
* 支持SQLitePostgreSQL、MySQL多种数据库 * **多重安全保障**: 授权加密站点隐藏2FA密码防爆破等多重安全保障
* 开放接口支持 * **多数据库支持**支持SQLite、PostgreSQL、MySQL
* 站点证书监控 * **开放接口支持** 提供RESTful API接口方便集成到其他系统
* 多用户管理 * **站点证书监控** 定时监控网站证书的过期时间
* 多语言支持(中英双语切换) * **多用户管理** 用户可以管理自己的证书流水线
* 各版本向下兼容,一键无忧升级 * **多语言支持** 中英双语切换
* **一键无忧升级** 版本向下兼容
![](./docs/images/intro/intro.svg) ![](./docs/images/intro/intro.svg)
@@ -150,30 +159,33 @@ https://certd.handfree.work/
| 二维码 | <img height="230" src="./docs/guide/contact/images/me.png"> | | 二维码 | <img height="230" src="./docs/guide/contact/images/me.png"> |
## 八、捐赠 ## 八、赞助捐赠
************************
支持开源,为爱发电,我已入驻爱发电
https://afdian.com/a/greper
发电权益: 开源为什么要做专业版收费?
1. 可加入发电专属群,可以获得作者一对一技术支持 1. 纯靠为爱发电不可持续(比如:我的[dev-sidecar项目](https://github.com/docmirror/dev-sidecar)即便是拥有20K+star也差点凉凉幸亏有另外大佬接手用爱发电
2. 您的需求我们将优先实现,并且将作为专业版功能提供 2. 没有赞助的项目,作者会比较任性,不会用心倾听用户的心声,不顾用户体验(比如:下意识拒绝需求、频繁破坏性变更升级、全盘推倒重来之类的)
3. 一年期专业版激活码 3. 没有赞助的项目,交流群的戾气有时候比较重,容易起冲突
赞助权益:
1. 可加入专属VIP群可以获得作者一对一技术支持必要时可以远程协助
2. 您的需求我们将优先实现,并且可能将作为专业版功能提供
3. 获得专业版功能
[50元专业版优惠券限时领取](https://app.handfree.work/subject/#/app/certd/product)
专业版特权对比 专业版特权对比
| 功能 | 免费版 | 专业版 | | 功能 | 免费版 | 专业版 |
|---------|---------------------------------------|--------------------------------| |---------|---------------------------------------|--------------------------------|
| 免费证书申请 | 免费无限制 | 免费无限制 | | 免费证书申请 | 免费无限制 | 免费无限制 |
| 域名数量 | 无限制 | 无限制 | | 证书域名数量 | 无限制 | 无限制 |
| 证书流水线条数 | 无限制 | 无限制 | | 证书流水线条数 | 无限制 | 无限制 |
| 站点证书监控 | 限制1条 | 无限制 | | 自动部署插件 | 阿里云CDN、腾讯云、七牛CDN、主机部署、宝塔、1Panel等大部分插件 | 群晖、威联通、proxmox等 |
| 自动部署插件 | 阿里云CDN、腾讯云、七牛CDN、主机部署、宝塔、1Panel等大部分插件 | 群晖 | | 通知 | 邮件通知、自定义webhook | 邮件免配置、企微、钉钉、飞书、anpush、server酱等 |
| 通知 | 邮件通知、自定义webhook | 邮件免配置、企微、钉钉、飞书、anpush、server酱等 | | 站点监控 | 限制1条 | 无限制 |
| 批量操作 | 无 | 流水线模版,流水线复制,批量运行,批量设置通知、定时等 |
| VIP群 | 无 | 可加,一对一技术支持,必要时可申请远程协助 |
************************
************************
## 九、贡献代码 ## 九、贡献代码

View File

@@ -13,6 +13,15 @@ Certd® is a free, fully automated certificate management system that ensures yo
> The number of pipelines is now unlimited. Welcome to use it. > The number of pipelines is now unlimited. Welcome to use it.
Official Open Source Address:
[Github](https://github.com/certd/certd) ![](https://img.shields.io/github/stars/certd/certd?logo=github)
[Gitee](https://gitee.com/certd/certd) ![](https://gitee.com/certd/certd/badge/star.svg?theme=dark)
[AtomGit](https://atomgit.com/certd/certd) ![](https://atomgit.com/certd/certd/star/badge.svg)
## 1. Features ## 1. Features
This project not only supports automated certificate application but also automated certificate deployment and updates, ensuring your certificates never expire. This project not only supports automated certificate application but also automated certificate deployment and updates, ensuring your certificates never expire.

View File

@@ -9,8 +9,8 @@ services:
restart: unless-stopped # 自动重启 restart: unless-stopped # 自动重启
volumes: volumes:
# ↓↓↓↓↓ -------------------------------------------------------- 数据库以及证书存储路径,默认存在宿主机的/data/certd/目录下,【您需要定时备份此目录,以保障数据容灾】 # ↓↓↓↓↓ -------------------------------------------------------- 数据库以及证书存储路径,默认存在宿主机的/data/certd/目录下,【您需要定时备份此目录,以保障数据容灾】
# 只要修改冒号前面的,冒号后面的/app/data不要动 - /data/certd:/app/data # 只要修改冒号前面的,冒号后面的/app/data切记切记不要动
- /data/certd:/app/data #- /volume1/docker/certd:/app/data:delegated #群晖使用这个配置
# ↓↓↓↓↓ -------------------------------------------------------- 如果走时不准考虑挂载localtime文件 # ↓↓↓↓↓ -------------------------------------------------------- 如果走时不准考虑挂载localtime文件
#- /etc/localtime:/etc/localtime #- /etc/localtime:/etc/localtime
#- /etc/timezone:/etc/timezone #- /etc/timezone:/etc/timezone
@@ -47,6 +47,8 @@ services:
# 配置规则: certd_ + 配置项, 点号用_代替 # 配置规则: certd_ + 配置项, 点号用_代替
# #↓↓↓↓ ----------------------------- 如果忘记管理员密码可以设置为truedocker compose up -d 重建容器之后管理员密码将改成123456然后请及时修改回false # #↓↓↓↓ ----------------------------- 如果忘记管理员密码可以设置为truedocker compose up -d 重建容器之后管理员密码将改成123456然后请及时修改回false
- certd_system_resetAdminPasswd=false - certd_system_resetAdminPasswd=false
# ↓↓↓ 要使用ipv6将此配置修改为::
- certd_koa_hostname=0.0.0.0
# 默认使用sqlite文件数据库如果需要使用其他数据库请设置以下环境变量 # 默认使用sqlite文件数据库如果需要使用其他数据库请设置以下环境变量
# 注意: 选定使用一种数据库之后,不支持更换数据库。 # 注意: 选定使用一种数据库之后,不支持更换数据库。

View File

@@ -81,7 +81,8 @@ export default defineConfig({
] ]
}, },
{text: "演示教程", link: "/guide/tutorial.md"}, {text: "演示教程", link: "/guide/tutorial.md"},
{text: "版本升级", link: "/guide/install/upgrade.md"} {text: "版本升级", link: "/guide/install/upgrade.md"},
{text: "赞助专业版", link: "/guide/donate/"},
] ]
}, },
{ {
@@ -95,10 +96,10 @@ export default defineConfig({
}, },
{ {
text: "插件列表", items: [ text: "插件列表", items: [
{text: "授权提供商", link: "/guide/plugins/access.md"},
{text: "DNS提供商", link: "/guide/plugins/dns-provider.md"}, {text: "DNS提供商", link: "/guide/plugins/dns-provider.md"},
{text: "任务插件", link: "/guide/plugins/deploy.md"}, {text: "任务插件", link: "/guide/plugins/deploy.md"},
{text: "通知插件", link: "/guide/plugins/notification.md"}, {text: "通知插件", link: "/guide/plugins/notification.md"},
{text: "授权提供商", link: "/guide/plugins/access.md"},
] ]
}, },
] ]
@@ -107,12 +108,12 @@ export default defineConfig({
text: "常见问题", text: "常见问题",
items: [ items: [
{text: "QA", link: "/guide/qa/use.md"}, {text: "QA", link: "/guide/qa/use.md"},
{text: "忘记密码/无法登录", link: "/guide/use/forgotpasswd/"},
{text: "群晖证书部署", link: "/guide/use/synology/"}, {text: "群晖证书部署", link: "/guide/use/synology/"},
{text: "腾讯云密钥获取", link: "/guide/use/tencent/"}, {text: "腾讯云密钥获取", link: "/guide/use/tencent/"},
{text: "连接windows主机", link: "/guide/use/host/windows.md"}, {text: "连接windows主机", link: "/guide/use/host/windows.md"},
{text: "Google EAB获取", link: "/guide/use/google/"}, {text: "Google EAB获取", link: "/guide/use/google/"},
{text: "阿里云相关", link: "/guide/use/aliyun/"}, {text: "阿里云相关", link: "/guide/use/aliyun/"},
{text: "忘记密码", link: "/guide/use/forgotpasswd/"},
{text: "数据备份", link: "/guide/use/backup/"}, {text: "数据备份", link: "/guide/use/backup/"},
{text: "Certd本身的证书更新", link: "/guide/use/https/index.md"}, {text: "Certd本身的证书更新", link: "/guide/use/https/index.md"},
{text: "js脚本插件使用", link: "/guide/use/custom-script/index.md"}, {text: "js脚本插件使用", link: "/guide/use/custom-script/index.md"},
@@ -121,6 +122,9 @@ export default defineConfig({
{text: "ESXi", link: "/guide/use/ESXi/index.md"}, {text: "ESXi", link: "/guide/use/ESXi/index.md"},
{text: "宝塔动态IP白名单", link: "/guide/use/baota/white_list.md"}, {text: "宝塔动态IP白名单", link: "/guide/use/baota/white_list.md"},
{text: "子域名托管", link: "/guide/use/cert/subdomain.md"}, {text: "子域名托管", link: "/guide/use/cert/subdomain.md"},
{text: "流水线有效期", link: "/guide/use/pipeline/valid.md"},
{text: "IP证书申请", link: "/guide/use/cert/ip.md"},
{text: "插件开发", link: "/guide/use/dev/plugin.md"},
] ]
}, },
{ {
@@ -137,7 +141,6 @@ export default defineConfig({
{text: "更新日志", link: "/guide/changelogs/CHANGELOG.md"}, {text: "更新日志", link: "/guide/changelogs/CHANGELOG.md"},
{text: "镜像说明", link: "/guide/image.md"}, {text: "镜像说明", link: "/guide/image.md"},
{text: "联系我们", link: "/guide/contact/"}, {text: "联系我们", link: "/guide/contact/"},
{text: "捐赠", link: "/guide/donate/"},
{text: "开源协议", link: "/guide/license/"}, {text: "开源协议", link: "/guide/license/"},
{text: "我的其他开源项目", link: "/guide/link/"}, {text: "我的其他开源项目", link: "/guide/link/"},
] ]

View File

@@ -3,6 +3,293 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [1.38.1](https://github.com/certd/certd/compare/v1.38.0...v1.38.1) (2026-01-15)
### Bug Fixes
* 修复自定义插件name丢失author导致找不到插件的bug ([2fbb58e](https://github.com/certd/certd/commit/2fbb58eb2b239eab4864f90aa72b0ef2ada38e8f))
### Performance Improvements
* 优化内存占用 ([4fc8acc](https://github.com/certd/certd/commit/4fc8acce8c1beec38c24b0977b71ff6b18cb52c9))
* 自定义插件支持使用_ctx.import("/@/xxx.js")以绝对路径引用模块 ([9eace86](https://github.com/certd/certd/commit/9eace86aeeb48c23b55102fc5d42088294d9eb97))
# [1.38.0](https://github.com/certd/certd/compare/v1.37.17...v1.38.0) (2026-01-13)
### Bug Fixes
* 修复禁用第三方登录自动注册无效的bug ([7ee39fd](https://github.com/certd/certd/commit/7ee39fd4eddfc847bcef879f0904a4319993d081))
* 修复又拍云upyun密码错误没有报错的bug ([235972f](https://github.com/certd/certd/commit/235972f3dabe0b87879a2d9950367dc45edfebe8))
* 修复重启certd后再启用流水线不会自动执行的bug ([468ccbf](https://github.com/certd/certd/commit/468ccbf2b725fc4b78ce4b950a114e4a4be57698))
* 优化源码部署缺少wget的提示 ([f193341](https://github.com/certd/certd/commit/f193341eaef765b7586a0b6e7c73015470536cc2))
### Features
* 【破坏性更新】插件改为metadata加载模式plugin-cert、plugin-lib包部分代码转移到certd-server中影响自定义插件需要修改相关import引用 ([a3fb249](https://github.com/certd/certd/commit/a3fb24993d7ac8fbb0bb354fa02ef067f609021e))
* 通过metadata加载插件降低内存占用 ([7634f15](https://github.com/certd/certd/commit/7634f153b7004462f207062c0502d8345e318cc7))
### Performance Improvements
* 流水线页面可以查看证书过期时间 ([be03d8e](https://github.com/certd/certd/commit/be03d8e13752c355dbec158da78b9cb4c3b3bb5d))
* 每页记录条数保持 ([14f9987](https://github.com/certd/certd/commit/14f99875fb3f535fa5ffb7bf5db3960b105aa7aa))
* 手机号登录放到前面 ([26ac081](https://github.com/certd/certd/commit/26ac08118219407c5dd3afc35130cdd48b8fab05))
* 新增部署1panel面板证书插件 ([4243622](https://github.com/certd/certd/commit/42436224148d6fffe5da8e5e0185a698e079032b))
* 优化微信支付对接文档 ([64e0d9a](https://github.com/certd/certd/commit/64e0d9a4d54b0d9da028be2c5e0ece7a97b2c250))
* 优化站点监控支持设置忽略主站证书一致性支持开启和关闭自动同步ip ([26f75c7](https://github.com/certd/certd/commit/26f75c71ba8866278dbe117f1bfaf671e7f70781))
* 增加邮件发送证书模版配置 ([cabc4da](https://github.com/certd/certd/commit/cabc4da3ac003a8c699c69f5bffea4c149be185c))
* 站点监控增加是否自动同步IP开关 ([5268904](https://github.com/certd/certd/commit/52689049ae8e004e1252ab1e2872fbf676e0295f))
* 证书流水线可以开启webhook ([840bd52](https://github.com/certd/certd/commit/840bd526714072315244a6900c95395d2d62f647))
* 支持部署到exsiopenwrt ([dae87e2](https://github.com/certd/certd/commit/dae87e26a3266a2bf26afe1ef4c489a3f6bf41e4))
* 支持公告功能 ([a79fe1f](https://github.com/certd/certd/commit/a79fe1f350f2991af9e5b50825f1776029677fc5))
* 支持webhook触发流水线新增触发类型图标显示 ([1a29541](https://github.com/certd/certd/commit/1a2954114063a8b994c257a90e5814e0a3a8d924))
* webhook触发器一个流水线限制只能添加一个 ([6c39d7b](https://github.com/certd/certd/commit/6c39d7b1eecb679cb6506b0e3557e8152e01417d))
* zenlayer证书更新 ([9ba6c83](https://github.com/certd/certd/commit/9ba6c838215d0750cda925778a47002a521f05e9))
## [1.37.17](https://github.com/certd/certd/compare/v1.37.16...v1.37.17) (2025-12-29)
### Bug Fixes
* 发送证书到邮箱插件的邮件模版转为使用邮箱配置中的通用模版 ([c5a3003](https://github.com/certd/certd/commit/c5a3003cf7b640500a90ec2c8961859ffe6fdb18))
* 首页最快到期证书,不包含已禁用的流水线 ([d731956](https://github.com/certd/certd/commit/d731956b066e4dbbe24d4de7b3d3679b355eb97c))
* 修复部署到华为obs 报错的bug ([dd19afc](https://github.com/certd/certd/commit/dd19afce928a7f36312af9df1e7e5ed3eb1e214a))
* 修复从模版创建的流水线不会自动执行的bug ([833808c](https://github.com/certd/certd/commit/833808c5deb716122b241d3d67349d2d6a18bf45))
* 修复流水线列表step数量统计错误的bug ([0e5a4fb](https://github.com/certd/certd/commit/0e5a4fb098d3261b690c551cf2b95198cac487e7))
* 修复用户删除后用相同的oauth授权登录报错用户不存在的问题 ([e505916](https://github.com/certd/certd/commit/e5059165259e4d757abc811c0c14bbc4a3dbaee9))
* 修复站点ip监控报主站与ip证书过期时间不一致的问题 ([62f8525](https://github.com/certd/certd/commit/62f8525dd5da95dc07ed103f602644c6e5f7f8e3))
* 修复serverchan3 没有选择tags报错的bug ([5bbf210](https://github.com/certd/certd/commit/5bbf210394883c4893c365bd16e999490b6e9b41))
* telegram 修复消息内存在横杠无法发出的bug ([5f4469e](https://github.com/certd/certd/commit/5f4469e306187c31d8a74d53b17ea3a213420367))
### Performance Improvements
* 批量修改定时时间支持随机时间 ([d0f653d](https://github.com/certd/certd/commit/d0f653da9a2970920e961e7404ff04080bccd343))
* 批量运行优化,支持普通运行和强制重新运行 ([039c62b](https://github.com/certd/certd/commit/039c62b09b37cdda35d33c6ee9adecad62dee75c))
* 升级lego到4.30.1版本 ([136e8dd](https://github.com/certd/certd/commit/136e8dd7c5ff7199ff4b0bcca95b8a03aa847553))
* 腾讯云EO增加请求参数打印 ([5b5deac](https://github.com/certd/certd/commit/5b5deac7d98684eda5c68384241a4d62c48d803b))
* 优化阿里云esa清理证书时机 ([5359a76](https://github.com/certd/certd/commit/5359a7670fac5a18c4294b37a34227308a0deed6))
* 优化源码方式部署,前端无需编译 ([13ddc97](https://github.com/certd/certd/commit/13ddc979ec7953e3db8db76dd23fd85a3b3c7997))
* 支持部署到goedge ([44bf4b1](https://github.com/certd/certd/commit/44bf4b1cc1aafa2d711c3b8e408009f0ceb413eb))
* 支持从阿里云商用证书订单中获取证书 ([8872466](https://github.com/certd/certd/commit/887246696861c3a0b1f99fd9ad978caea423c650))
* 支持授权给管理员查看和下载用户证书 ([1347355](https://github.com/certd/certd/commit/1347355cb117694abe99da385352a19771a32e84))
* 支持执行队列,避免同一时间触发流水线太多导致被限制 ([888d959](https://github.com/certd/certd/commit/888d9591fe9730b529e1c355d71f41e7ec9b479d))
* 支持aws route53 dns ([cbb8319](https://github.com/certd/certd/commit/cbb8319cfa48673e81ec15894adc3376c173c97e))
* 支持ucloud waf未测试 ([a248367](https://github.com/certd/certd/commit/a248367b154c38661a6797ef64e37ec99d4e2abf))
* 支持ucloud上传到ussl部署到ucdn ([e61daae](https://github.com/certd/certd/commit/e61daaee2d0dec19710cd4ec759219a071f2435e))
* 执行队列数量支持设置 ([cd94488](https://github.com/certd/certd/commit/cd944882c3272adad4a2da94a3889a01fe05fe13))
* aws route53 ([8caab1f](https://github.com/certd/certd/commit/8caab1fd9264df548f467b94202d567107b7a30b))
* ip证书校验方式提示 ([773cada](https://github.com/certd/certd/commit/773cada57a01fb28ea8602062aaeec3d45109ea9))
## [1.37.16](https://github.com/certd/certd/compare/v1.37.15...v1.37.16) (2025-12-15)
### Bug Fixes
* 修复ipv6作为证书域名申请证书校验失败的bug ([e4e16bc](https://github.com/certd/certd/commit/e4e16bc6a65bb082c18ca0590226f0987a47d477))
* 优化西部数据 500 already exists 的问题 ([2bfad9f](https://github.com/certd/certd/commit/2bfad9fc651da208b610abd921fbfb2fbc04203f))
### Performance Improvements
* 批量设置定时,支持清除定时 ([63d8bcf](https://github.com/certd/certd/commit/63d8bcf8823f713365042d3c7aee3cf31d44b044))
* 新增数据库迁移doc说明文档优化datetime字段平滑迁移 ([45fbce0](https://github.com/certd/certd/commit/45fbce0c2af5fb3ead6d3dd12a42f8cc1714262f))
* 支持彩虹聚合登录 ([6f18693](https://github.com/certd/certd/commit/6f186932ccad4becfdc0087c0539f7b2d0069844))
* 支持邮件模版设置 ([a6c0d2c](https://github.com/certd/certd/commit/a6c0d2c6f1fd6b60e6d7af290487c94564fd91ea))
* oidc支持使用第三方昵称或账号作为certd用户的用户名 ([b6fea0c](https://github.com/certd/certd/commit/b6fea0c8562abf912daa7d72958ceb2e93575d31))
## [1.37.15](https://github.com/certd/certd/compare/v1.37.14...v1.37.15) (2025-12-06)
### Bug Fixes
* oidc 支持nonce ([a5ca411](https://github.com/certd/certd/commit/a5ca41131b308b36b17ca359d9709ea8e9b7cee1))
### Performance Improvements
* 第三方登录支持gitee ([5cee7d4](https://github.com/certd/certd/commit/5cee7d44f17bd36972f477bc1f270999da558d05))
* 邮件模版安全优化 ([adca151](https://github.com/certd/certd/commit/adca151e4f07a4c6a2a753bfa48ee0d4d6469fd2))
* 支持部署到中国移动CDN ([4351304](https://github.com/certd/certd/commit/43513049beff407558d2a234415521464165cebc))
* 支持k8s apply ([d55954a](https://github.com/certd/certd/commit/d55954a36391ebe6a9397ff7dcfb710193ac5e34))
## [1.37.14](https://github.com/certd/certd/compare/v1.37.13...v1.37.14) (2025-12-02)
### Bug Fixes
* 修复注销登录时,第三方登录注销请求失败的报错 ([677e110](https://github.com/certd/certd/commit/677e1101e6cf4451abd8a876cc1d0ddd26a10b88))
## [1.37.13](https://github.com/certd/certd/compare/v1.37.12...v1.37.13) (2025-12-02)
### Bug Fixes
* 修复西部数据返回信息乱码问题 ([78b1650](https://github.com/certd/certd/commit/78b1650bdb071c858b3f90d53a700d11ee6de328))
* 修复西部数码使用域名级别的key申请证书失败的问题 ([5edc72d](https://github.com/certd/certd/commit/5edc72d47550b8e3364dabda70a41cce75d87956))
### Performance Improvements
* 第三方登录允许选择logo ([bb3085e](https://github.com/certd/certd/commit/bb3085ef84201ccd2dc632ba8c5097cb00258be4))
* 支持OIDC单点登录 ([fbf12f1](https://github.com/certd/certd/commit/fbf12f16b5eaa7676fd41923587bf6bd2595adba))
## [1.37.12](https://github.com/certd/certd/compare/v1.37.11...v1.37.12) (2025-11-29)
### Bug Fixes
* 修复waf tls版本号小写 ([0adcc6a](https://github.com/certd/certd/commit/0adcc6a8d194469be0c26940ed4837fb34929b68))
### Performance Improvements
* 支持微信扫码登录 ([73325aa](https://github.com/certd/certd/commit/73325aaefb0e750a22aaac40929e7bf3f5864996))
* 支持证书颁发机构 LiteSSL ([6be7591](https://github.com/certd/certd/commit/6be75913324e2828d9016eb307ff2d0abbbb2191))
## [1.37.11](https://github.com/certd/certd/compare/v1.37.10...v1.37.11) (2025-11-28)
### Bug Fixes
* 修复阿里云 waf tlsVersion参数缺失导致部署失败的问题 ([2fabee6](https://github.com/certd/certd/commit/2fabee647acf64afe689f5bea3603028cd0ba4a2))
* 修复备注撑开表格行高的bug ([c7b298c](https://github.com/certd/certd/commit/c7b298c46f0d52b43bd2bb17b374e7970a446446))
* 修复域名管理无法创建tencent-eo dns授权的bug ([3406bb5](https://github.com/certd/certd/commit/3406bb5a4a56bb310cddc1a1f410c70909fd129b))
* openapi 成功后失败都返回msg ([6e735bb](https://github.com/certd/certd/commit/6e735bbd1e29712e939f775a4db974db70e3b4b0))
### Performance Improvements
* ssh支持ppk格式私钥 ([575ae16](https://github.com/certd/certd/commit/575ae164c863d0b1f9fa0890549a2ee7472fb469))
* 优化宝塔网站证书在并发部署时导致nginx配置文件错乱的问题 ([51cc084](https://github.com/certd/certd/commit/51cc08411fd2dbab66d769b495dc1b0bf2f2578c))
* 优化天翼云cdn 等待5秒部署完成 ([53c88ad](https://github.com/certd/certd/commit/53c88ad5afe66a3f7c38b9b759747918913a4edc))
* 支持oidc单点登录 ([ec75afb](https://github.com/certd/certd/commit/ec75afbc44139dbe9da534d8a8c08a5b91f86d3c))
* ssl.com支持ecc ([b5ec047](https://github.com/certd/certd/commit/b5ec04723db48422f71041f4043002e7f5b450b1))
## [1.37.10](https://github.com/certd/certd/compare/v1.37.9...v1.37.10) (2025-11-19)
### Performance Improvements
* 优化dokploy 部署插件配置选择serverId ([c9709f2](https://github.com/certd/certd/commit/c9709f26981c1cc9f71c14babb204329fcae0db5))
* 站点证书监控备注输入框改成textarea ([70b603d](https://github.com/certd/certd/commit/70b603d601c34f39148c2ab70c655c51babf563d))
## [1.37.9](https://github.com/certd/certd/compare/v1.37.8...v1.37.9) (2025-11-19)
### Bug Fixes
* 商用证书上传保存失败的bug ([075b1dc](https://github.com/certd/certd/commit/075b1dc0eb8c39acc277277b1b334d66b6717ab2))
### Performance Improvements
* 优化阿里云clb 过期证书清理报错的问题 ([d465367](https://github.com/certd/certd/commit/d4653678b2e3643460f918992eeae4044d3a1cc7))
## [1.37.8](https://github.com/certd/certd/compare/v1.37.7...v1.37.8) (2025-11-17)
### Bug Fixes
* **plugins/woai-cdn:** 修正默认接口域名与帮助链接中的路径 ([#576](https://github.com/certd/certd/issues/576)) @LjyLab ([d20046c](https://github.com/certd/certd/commit/d20046c86681ea177ece434423b7c81a76b437fb))
### Performance Improvements
* 修复西数解析记录添加失败的bug支持部署证书到西数虚拟主机 ([1102952](https://github.com/certd/certd/commit/1102952b4703e8c0bbc17b0700c0ed3ef6f866d3))
* 支持回车键触发登录 ([eb5c88f](https://github.com/certd/certd/commit/eb5c88fbb2901f1a9669429a7cd8dc76f6806d01))
## [1.37.7](https://github.com/certd/certd/compare/v1.37.6...v1.37.7) (2025-11-12)
### Bug Fixes
* 修复点击立即触发运行报错的bug ([e1eef01](https://github.com/certd/certd/commit/e1eef013a856d26fe80a05d9ec6e505e2e31e5f9))
* 账号绑定页面某些情况下打不开的bug ([44973eb](https://github.com/certd/certd/commit/44973ebd00e89c0fee8f3b91174157757ce0160f))
### Performance Improvements
* 支持使用letencrypt测试环境申请ip证书 ([86ce00a](https://github.com/certd/certd/commit/86ce00adf92ff98fead87a3eaaa6631036708f47))
* 支持腾讯云teo dns解析 ([1d23dd2](https://github.com/certd/certd/commit/1d23dd2426bd1e4c4dfea0a9e561d665e045ba9d))
## [1.37.6](https://github.com/certd/certd/compare/v1.37.5...v1.37.6) (2025-11-10)
### Bug Fixes
* 修复创建流水线报id不能为空的bug ([aac569a](https://github.com/certd/certd/commit/aac569a9259ede43399e0ed5d668e936b984d6dd))
### Performance Improvements
* 增加vip时间同步按钮 ([32e4e91](https://github.com/certd/certd/commit/32e4e91ab81008dda422fb53fd6f4d1711c5d80c))
* 支持letencrypt测试环境支持IP证书 ([1462cdd](https://github.com/certd/certd/commit/1462cddd1eb347b7ff238286b5c977b29a0591ec))
* server 增加 "@peculiar/x509" 依赖 ([acdf091](https://github.com/certd/certd/commit/acdf0912d452029f158279fb78155086e4fbac17))
## [1.37.5](https://github.com/certd/certd/compare/v1.37.4...v1.37.5) (2025-11-08)
### Bug Fixes
* 修复某些情况下编辑流水线没有立即展示变更效果的bug ([65e5309](https://github.com/certd/certd/commit/65e53092e8d677eb34b7d04d68c6f738165f5de2))
* 修复批量修改定时没有立即显示生效的bug ([c166602](https://github.com/certd/certd/commit/c16660254b8d637bd3ca100695934b343875fcbf))
* 修复新部署的无法保存公共eab配置的bug ([6b7631e](https://github.com/certd/certd/commit/6b7631ed5e920582d8e2162ec788b9429238ac29))
* 修复在苹果手机下输入框被放大的问题 ([5ff7e6e](https://github.com/certd/certd/commit/5ff7e6ef0eaa6bc111d0dd3c5713e1658f9113ad))
### Performance Improvements
* 支持记忆字段排序 ([d46b9c5](https://github.com/certd/certd/commit/d46b9c54b14ec5c892f4eed141fb549485941edd))
* 优化任务参数配置界面在手机版下的展示效果 ([0203aa2](https://github.com/certd/certd/commit/0203aa2b6e86e58e5e66a1b9d0278d186aa92554))
* 支持列表展示时固定证书最大天数,有助于列表进度条整齐展示 ([4a94eab](https://github.com/certd/certd/commit/4a94eab3935c89a63892661d9cf0d0891e54aa81))
* 子域名托管说明 ([b5d8161](https://github.com/certd/certd/commit/b5d8161bc2e686e6c8b552de0c29117a5d405313))
* cname方式hostRecord增加user校验 ([bc174f7](https://github.com/certd/certd/commit/bc174f70545e487bd549eff250f8ef69c6d343f3))
* doge云插件支持选择CDN域名以及支持同时部署多个域名 ([041954c](https://github.com/certd/certd/commit/041954c0674fabed54ed2cf5e727fecfb6943d19))
* doge云支持删除过期证书 ([335cf93](https://github.com/certd/certd/commit/335cf9397080a5e09074d5a89d03f59bd051cda5))
## [1.37.4](https://github.com/certd/certd/compare/v1.37.3...v1.37.4) (2025-10-28)
### Bug Fixes
* 修复站点证书监控复制按钮无效的bug ([efa26a0](https://github.com/certd/certd/commit/efa26a067f06402f30befc016d9934cadcd5a563))
* 修复lego模式下 私钥加密类型错误的bug ([f7cf7c1](https://github.com/certd/certd/commit/f7cf7c198d7f77b222099770f81accc637bc6619))
### Performance Improvements
* 优化数据备份效率,流式写入文件 ([c38dbbb](https://github.com/certd/certd/commit/c38dbbb1d72bd00a92fe275b76aea82a791e7199))
## [1.37.3](https://github.com/certd/certd/compare/v1.37.2...v1.37.3) (2025-10-24)
### Bug Fixes
* 修复并发情况下证书申请日志混乱的bug ([bb2714f](https://github.com/certd/certd/commit/bb2714ff241f9db4a71d805b23a1b0f9f2f6413a))
* 修复网络测试telnet的bug ([c03a70f](https://github.com/certd/certd/commit/c03a70fde23c8e840bd0fdb4fcbca8990f6c65eb))
* 修复站点证书监控证书已经更新到最新日期了仍然发出警告通知的bug ([1f42f93](https://github.com/certd/certd/commit/1f42f933f07860b27aa3d016e40916ff2b063eac))
### Performance Improvements
* 注册页面增加手机注册tab页签 ([6b2f1fc](https://github.com/certd/certd/commit/6b2f1fcd3e058061b814c3331cda8ce1b2d80d73))
* 流水线创建时支持添加到证书监控 ([59ba408](https://github.com/certd/certd/commit/59ba4080706548828ef1c0a9cd893c1c9a7d591f))
* 流水线支持有效期设置 ([911e69e](https://github.com/certd/certd/commit/911e69e3bc0cdd48b62953b5d0981d640fc1f8ac))
* 群辉增加请求超时时长设置 ([b381492](https://github.com/certd/certd/commit/b3814920bdcabc911f860a8e19b5b9b3a04709ac))
* 通知支持meow ([c77645e](https://github.com/certd/certd/commit/c77645e1733670214aaca5544cf8759d7e4adda4))
* 站点证书监控增加导出和分组功能 ([2ed12c4](https://github.com/certd/certd/commit/2ed12c429eb58274a4f9dd0ed3b66e160d283ded))
* 证书监控增加批量删除 ([e578c52](https://github.com/certd/certd/commit/e578c52fdf2f838038062aa4209b655fbae461fb))
* esa 自动删除过期证书提示 ([8bf1f82](https://github.com/certd/certd/commit/8bf1f828b9eaa9208f32e8ee7460b86420fed0c7))
* ssh 增加禁止-i参数提示 ([3a8931f](https://github.com/certd/certd/commit/3a8931feeffd7157163ff7d46b693e5e1a434b9c))
## [1.37.2](https://github.com/certd/certd/compare/v1.37.1...v1.37.2) (2025-10-14)
### Bug Fixes
* 修复飞牛证书部署后无法生效的bug ([bf156a1](https://github.com/certd/certd/commit/bf156a13bd443cdadb73c9dff79bbef7231b4401))
* aliyunoss 选择证书接入点选择新加坡无法上传的bug ([e00733a](https://github.com/certd/certd/commit/e00733a34644c23ffe926486b15dc96bf2fa4b57))
### Performance Improvements
* 优化start.sh脚本去掉删除非ui目录的操作及提示 ([7993a7c](https://github.com/certd/certd/commit/7993a7cdb01885535950c63187e3f67d67ba2f75))
* 增加飞牛证书id选择的提示 ([5a4d812](https://github.com/certd/certd/commit/5a4d8121462b1afe921d028465687be8c9679814))
* 证书监控支持设置证书即将过期天数 ([cd35568](https://github.com/certd/certd/commit/cd35568e042e6ab928685efad51cdbed823d2d4f))
* 支持网络测试 ([2bef608](https://github.com/certd/certd/commit/2bef608e07ceb56d52007f290667e0afef401b22))
* 支持新网代理方式 ([f612509](https://github.com/certd/certd/commit/f612509cac87b859e81a7a52fe94b2eaccad22f9))
* dns支持新网互联 ([f415190](https://github.com/certd/certd/commit/f41519048326d971acd9e0a30462231f77a299a6))
* start.sh脚本支持根据当前系统判断是否使用sudo ([567cb7d](https://github.com/certd/certd/commit/567cb7d737023e26ec58403c6f28f109e212d379))
## [1.37.1](https://github.com/certd/certd/compare/v1.37.0...v1.37.1) (2025-09-29)
### Bug Fixes
* 修复版本比较bug ([109696e](https://github.com/certd/certd/commit/109696e965d68c50c8627ffd40203edd1d2daea5))
* 修复某些情况下cname申请证书报错主域名不一致的bug ([2671781](https://github.com/certd/certd/commit/2671781e1bb0838981728d85eacf0e1a25a0fa48))
### Performance Improvements
* cname主域名校验提示优化显示不一致的两方便于排查问题 ([6ebb365](https://github.com/certd/certd/commit/6ebb3659f42155e4e8da600c493fb5227cd08137))
* dns解析支持阿里esa ([9291fa6](https://github.com/certd/certd/commit/9291fa68aa7a88a05c2f888bf3048df36a8fbde3))
# [1.37.0](https://github.com/certd/certd/compare/v1.36.25...v1.37.0) (2025-09-28)
### Features
* @certd/ui-server module import报错的问题 ([0c61d4c](https://github.com/certd/certd/commit/0c61d4c9788677c83c567db5381b9e257ec90bba))
* dist打包前检查 ([8f6e5bd](https://github.com/certd/certd/commit/8f6e5bd24b3b65fbfcba36c08f532a3abad2d606))
## [1.36.25](https://github.com/certd/certd/compare/v1.36.24...v1.36.25) (2025-09-27) ## [1.36.25](https://github.com/certd/certd/compare/v1.36.24...v1.36.25) (2025-09-27)
### Bug Fixes ### Bug Fixes

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 130 KiB

After

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 305 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 KiB

View File

@@ -1,28 +1,65 @@
# 捐赠 # 专业版赞助
************************
支持开源,为爱发电,我已入驻爱发电
https://afdian.com/a/greper
## 发电权益: ## 开源为什么要做专业版收费?
1. 可加入发电专属群,可以获得作者一对一技术支持 1. 纯靠为爱发电不可持续容易烂尾比如我的dev-sidecar项目即便是拥有20K+star也差点凉凉幸亏有另外大佬接手用爱发电
2. 没有赞助的项目,作者会比较任性,不会用心倾听用户的心声,不顾用户体验(比如:下意识拒绝需求、频繁破坏性变更升级、全盘推倒重来之类的)
3. 没有赞助的项目,交流群的戾气有时候比较重,容易起冲突
## 赞助权益:
1. 可加入专属VIP群可以获得作者一对一技术支持必要时可以远程协助
# 专业版赞助
## 开源为什么要做专业版收费?
1. 纯靠为爱发电不可持续,容易烂尾(比如:我的[dev-sidecar项目](https://github.com/docmirror/dev-sidecar)即便是拥有20K+star也差点凉凉幸亏有另外大佬接手用爱发电
2. 没有赞助的项目,作者会比较任性,不会用心倾听用户的心声,不顾用户体验(比如:下意识拒绝需求、频繁破坏性变更升级、全盘推倒重来之类的)
3. 没有赞助的项目,交流群的戾气有时候比较重,容易起冲突
## 赞助权益:
1. 可加入专属VIP群可以获得作者一对一技术支持必要时可以远程协助
2. 您的需求我们将优先实现,并且将作为专业版功能提供 2. 您的需求我们将优先实现,并且将作为专业版功能提供
3. 一年期专业版激活码 3. 获得专业版功能
****------------------****
> [限时¥50永久专业版优惠券点我立刻领取](https://app.handfree.work/subject/#/app/certd/product)
****------------------****
## 专业版特权对比 ## 专业版特权对比
| 功能 | 免费版 | 专业版 | | 功能&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | 免费版 | 专业版 |
|---------|------------------------|-----------------------------| |---------|---------------------------------------|--------------------------------|
| 免费证书申请 | 免费无限制 | 免费无限制 | | 证书申请 | 无限制 | 无限制 |
| 自动部署插件 | 阿里云CDN、腾讯云、七牛CDN、主机部署等 | 支持群晖、宝塔、1Panel等持续开发中 | | 证书域名数量 | 无限制 | 无限制 |
| 证书流水线条数 | 无限制 | 无限制 | | 证书流水线条数 | 无限制 | 无限制 |
| 站点证书监控 | 限制1条 | 无限制 | | 自动部署插件 | 阿里云CDN、腾讯云、七牛CDN、主机部署、宝塔、1Panel等大部分插件 | 群晖、威联通、proxmox等 |
| 通知 | 邮件通知、自定义webhook | 邮件免配置、企微、飞书、anpush、server酱等 | | 通知 | 邮件通知、自定义webhook | 邮件免配置、企微、钉钉、飞书、anpush、server酱等 |
| 站点监控 | 限制1条 | 无限制 |
| 批量操作 | 无 | 流水线模版,流水线复制,批量运行,批量设置通知、定时等 |
| VIP群 | 无 | 可加,一对一技术支持,必要时可申请远程协助 |
## 专业版激活方式 ## 专业版激活方式
![](./images/plus.png) ![](./images/plus.png)
发电后,在私信中获取激活码
************************ ## 相关问题
### 1. 购买后VIP状态或时长未更新
系统管理-->账号绑定页面打开一下即可自动更新VIP最新状态如果未登录袖手账号需要先登录
![](./images/update.png)
### 2. 开发票
联系我们(微信xiaojunnuo),并提供支付金额
### 3. VIP是否可以迁移换绑服务器
可以的。
* 方式1. 直接将备份数据在新服务器上还原即可首次访问会提示您是否绑定新url点击是即可
* 方式2. 如果旧站点数据丢失,您也可以部署一个新站点,然后在系统管理-->账号绑定页面转移VIP即可
![](./images/transfer.png)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

View File

@@ -5,6 +5,16 @@ Certd 是一款开源、免费、全自动申请和部署更新SSL证书的工
关键字:证书自动申请、证书自动更新、证书自动续期、证书自动续签、证书管理工具 关键字:证书自动申请、证书自动更新、证书自动续期、证书自动续签、证书管理工具
| 官方开源地址: | |
| ---- | ---- |
| [Github](https://github.com/certd/certd)| ![](https://img.shields.io/github/stars/certd/certd?logo=github) |
| [Gitee](https://gitee.com/certd/certd) | ![](https://gitee.com/certd/certd/badge/star.svg?theme=dark) |
| [AtomGit](https://atomgit.com/certd/certd) |![](https://atomgit.com/certd/certd/star/badge.svg) |
![首页](../images/start/home.png)
## 1、关于证书续期 ## 1、关于证书续期
>* 实际上没有办法不改变证书文件本身情况下直接续期或者续签。 >* 实际上没有办法不改变证书文件本身情况下直接续期或者续签。
>* 我们所说的续期,其实就是按照全套流程重新申请一份新证书,然后重新部署上去。 >* 我们所说的续期,其实就是按照全套流程重新申请一份新证书,然后重新部署上去。
@@ -15,7 +25,7 @@ Certd 是一款开源、免费、全自动申请和部署更新SSL证书的工
本项目不仅支持证书申请过程自动化,还可以自动化部署更新证书,让你的证书永不过期。 本项目不仅支持证书申请过程自动化,还可以自动化部署更新证书,让你的证书永不过期。
* 全自动申请证书支持所有注册商注册的域名支持DNS-01、HTTP-01、CNAME代理等多种域名验证方式 * 全自动申请证书支持所有注册商注册的域名支持DNS-01、HTTP-01、CNAME代理等多种域名验证方式
* 全自动部署更新证书(目前支持部署到主机、阿里云、腾讯云等70+部署插件) * 全自动部署更新证书(目前支持部署到主机、阿里云、腾讯云等100+部署插件)
* 支持通配符域名/泛域名支持多个域名打到一个证书上支持pem、pfx、der、jks等多种证书格式 * 支持通配符域名/泛域名支持多个域名打到一个证书上支持pem、pfx、der、jks等多种证书格式
* 邮件通知、webhook通知、企微、钉钉、飞书、anpush等多种通知方式 * 邮件通知、webhook通知、企微、钉钉、飞书、anpush等多种通知方式
* 私有化部署,数据保存本地,安装升级非常简单快捷 * 私有化部署,数据保存本地,安装升级非常简单快捷

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

View File

@@ -7,7 +7,36 @@ https://1panel.cn/docs/installation/online_installation/
## 二、部署certd ## 二、部署certd
有两种安装方式
### 1. 应用商店方式安装【推荐】
#### 1.1 安装
打开`1Panel->应用商店`,更新远程应用,搜索`certd`,点击安装
![](./images/store-1.png)
![](./images/store-2.png)
#### 1.2 访问测试:
http://ip:7001
https://ip:7002
默认账号密码
admin/123456
登录后请及时修改密码
#### 1.3 备份
![](./images/store-3.png)
#### 1.4 恢复
安装新Certd后点击导入备份按钮选择上面备份的文件即可
### 2. docker-compose方式安装
#### 2.1 安装
1. 打开`docker-compose.yaml`,整个内容复制下来 1. 打开`docker-compose.yaml`,整个内容复制下来
https://gitee.com/certd/certd/raw/v2/docker/run/docker-compose.yaml https://gitee.com/certd/certd/raw/v2/docker/run/docker-compose.yaml
@@ -22,7 +51,7 @@ https://1panel.cn/docs/installation/online_installation/
> 默认使用sqlite数据库数据保存在`/data/certd`目录下,您可以手动备份该目录 > 默认使用sqlite数据库数据保存在`/data/certd`目录下,您可以手动备份该目录
> certd还支持`mysql`和`postgresql`数据库,[点我了解如何切换其他数据库](../database) > certd还支持`mysql`和`postgresql`数据库,[点我了解如何切换其他数据库](../database)
3. 访问测试 #### 2.2 访问测试
http://ip:7001 http://ip:7001
https://ip:7002 https://ip:7002
@@ -30,7 +59,7 @@ https://ip:7002
admin/123456 admin/123456
登录后请及时修改密码 登录后请及时修改密码
## 三、升级 #### 2.3 升级
1. 找到容器,点击更多->升级 1. 找到容器,点击更多->升级
![](./images/upgrade-1.png) ![](./images/upgrade-1.png)
@@ -39,11 +68,11 @@ admin/123456
![img.png](./images/upgrade-2.png) ![img.png](./images/upgrade-2.png)
## 四、数据备份 #### 2.4 备份
> 默认数据保存在`/data/certd`目录下,可以手动备份 > 默认数据保存在`/data/certd`目录下,可以手动备份
> 建议配置一条 [数据库备份流水线](../../use/backup/),自动备份 > 建议配置一条 [数据库备份流水线](../../use/backup/),自动备份
## 五、备份恢复 #### 2.5 恢复
将备份的`db.sqlite`及同目录下的其他文件一起覆盖到原来的位置重启certd即可 将备份的`db.sqlite`及同目录下的其他文件一起覆盖到原来的位置重启certd即可

View File

@@ -65,9 +65,54 @@ docker-compose up -d
## 二、从旧版的sqlite切换数据库 ## 二、从旧版的sqlite切换数据库
1. 先将`旧certd`升级到最新版 `建议备份sqlite数据库` 从旧版`sqlite`迁移到`mysql``postgresql`数据库
2. 按照上面全新安装方式部署一套`新的certd` `注意新旧版本的certd要一致`
3. 使用数据库工具将数据从sqlite导入到mysql或postgresql `注意flyway_history数据表不要导入`
4. 重启新certd
5. 确认没有问题之后删除旧版certd
下面以 `SQLite``MySQL` 为例进行演示
![db-0.png](images/db-0.png)
#### 0.前提条件:
1. SQLite版Certd站点已经`升级到最新版` `建议备份sqlite数据库`
2. `全新安装`MySQL版本Certd`确保是全新的,因为里面的数据会被清空覆盖`
3. 两套Certd站点版本一致
#### 1. 安装DBeaver工具
[https://dbeaver.io/download/](https://dbeaver.io/download/)
![db-1.png](images/db-1.png)
#### 2. 连接到sqlite数据库
![db-2.png](images/db-sqlite-1.png)
![db-3.png](images/db-sqlite-2.png)
#### 3. 连接到mysql或postgresql数据库
![db-4.png](images/db-mysql-1.png)
![db-5.png](images/db-mysql-2.png)
#### 4. 开始同步数据
选择mysql数据库选择所有的表`flyway_history除外`),右键导入数据
> 切记flyway_history数据表不要导入
![db-6.png](images/db-sync-1.jpg)
![db-7.png](images/db-sync-2.png)
![db-8.png](images/db-sync-3.png)
下一步、下一步,直到数据加载设置,勾选`在加载前截断目标表`此选项很重要并且会清空mysql certd数据库中的数据
![db-7.png](images/db-sync-4.png)
#### 5. 导入完成
![db-9.png](images/db-success.png)
#### 6. 重启MySQL版本Certd
访问MySQL版本测试数据已成功迁移
确认没有问题之后删除旧版certd

View File

@@ -57,6 +57,10 @@ https://your_server_ip:7002
::: warning ::: warning
如果您是第一次升级certd版本切记切记先备份一下数据 如果您是第一次升级certd版本切记切记先备份一下数据
```
# docker-compose.yaml配置
- /data/certd:/app/data # 请务必确保 /app/data 这个路径没有改动,固定写死
```
::: :::

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 134 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 145 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 194 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 120 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 157 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 187 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 105 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 145 KiB

View File

@@ -11,9 +11,12 @@
git clone https://github.com/certd/certd --depth=1 git clone https://github.com/certd/certd --depth=1
# git checkout v1.x.x # 当v2主干分支代码无法正常启动时可以尝试此命令1.x.x换成最新版本号 # git checkout v1.x.x # 当v2主干分支代码无法正常启动时可以尝试此命令1.x.x换成最新版本号
cd certd cd certd
# 启动服务 # 启动服务
./start.sh ./start.sh
``` ```
>如果是windows请先安装`git for windows` ,然后右键,选择`open git bash here`打开终端,再执行`./start.sh`命令 >如果是windows请先安装`git for windows` ,然后右键,选择`open git bash here`打开终端,再执行`./start.sh`命令

View File

@@ -10,6 +10,12 @@
::: warning ::: warning
如果您是第一次升级certd版本切记切记先备份一下数据 如果您是第一次升级certd版本切记切记先备份一下数据
很多人docker不太会配置数据目录没有映射出来升级导致数据丢失
```
# docker-compose.yaml配置
- /data/certd:/app/data # 请务必确保 /app/data 这个路径没有改动,固定写死
```
具体备份方法可以参考上面每种部署方式升级方法后面的备份章节
::: :::
## 升级日志 ## 升级日志

View File

@@ -9,6 +9,7 @@
https://apifox.com/apidoc/shared-2e76f8c4-7c58-413b-a32d-a1316529af44/254949529e0 https://apifox.com/apidoc/shared-2e76f8c4-7c58-413b-a32d-a1316529af44/254949529e0
## Token生成方法 ## Token生成方法
header中传入x-certd-token即可调用开放接口 header中传入x-certd-token即可调用开放接口
@@ -17,6 +18,18 @@ header中传入x-certd-token即可调用开放接口
3、将content加上keySecret进行签名 sign = md5(content + keySecret) 3、将content加上keySecret进行签名 sign = md5(content + keySecret)
4、然后将content和sign分别base64后用.号连接: x-certd-token = base64(content) +"."+base64(sign) 4、然后将content和sign分别base64后用.号连接: x-certd-token = base64(content) +"."+base64(sign)
## 参数
支持证书id和域名两种方式获取证书。
## 创建新的证书申请
参数autoApply=true将在没有证书时自动触发申请证书检查逻辑如下
1. 如果证书仓库里面有,且没有过期,就直接返回证书
2. 如果没有或者已过期,就会去找流水线,有就触发流水线执行
3. 如果没有流水线,就创建一个流水线,触发运行(`注意:需要提前在域名管理中配置好域名校验方式,否则会申请失败`
4. 再次采用相同参数请求接口,如果在申请过程中,就会提示`正在申请中`,可轮循获取状态,直到证书申请成功。
## SDK ## SDK
待开发 待开发

View File

@@ -2,50 +2,74 @@
| 序号 | 名称 | 说明 | | 序号 | 名称 | 说明 |
|-----|-----|-----| |-----|-----|-----|
| 1.| **阿里云授权** | | | 1.| **主机登录授权** | |
| 2.| **EAB授权** | ZeroSSL证书申请需要EAB授权 | | 2.| **阿里云授权** | |
| 3.| **google cloud** | 谷歌云授权 | | 3.| **阿里云ESA授权** | |
| 4.| **主机登录授权** | | | 4.| **华为云授权** | |
| 5.| **SFTP授权** | | | 5.| **腾讯云** | |
| 6.| **阿里云OSS授权** | 包含地域和Bucket | | 6.| **京东云** | |
| 7.| **FTP授权** | | | 7.| **火山引擎** | |
| 8.| **腾讯云** | | | 8.| **七牛云授权** | |
| 9.| **腾讯云COS授权** | 腾讯云对象存储授权,包含地域和存储桶 | | 9.| **百度云授权** | |
| 10.| **七牛云授权** | | | 10.| **baota授权** | |
| 11.| **七牛OSS授权** | | | 11.| **天翼云授权** | |
| 12.| **天翼云授权** | | | 12.| **51dns授权** | |
| 13.| **s3/minio授权** | S3/minio oss授权 | | 13.| **SFTP授权** | |
| 14.| **baota授权** | | | 14.| **阿里云OSS授权** | 包含地域和Bucket |
| 15.| **易盾DCDN授权** | https://user.yiduncdn.com | | 15.| **APISIX授权** | |
| 16.| **易盾rcdn授权** | 易盾CDN每月免费30G[注册即领](https://rhcdn.yiduncdn.com/register?code=8mn536rrzfbf8) | | 16.| **亚马逊云aws授权** | |
| 17.| **易发云短信** | sms.yfyidc.cn/ | | 17.| **亚马逊云科技(国区)授权** | |
| 18.| **cdnfly授权** | | | 18.| **CacheFly** | CacheFly |
| 19.| **群晖登录授权** | | | 19.| **EAB授权** | ZeroSSL证书申请需要EAB授权 |
| 20.| **k8s授权** | | | 20.| **google cloud** | 谷歌云授权 |
| 21.| **1panel授权** | 账号和密码 | | 21.| **cloudflare授权** | |
| 22.| **百度云授权** | | | 22.| **中国移动CND授权** | |
| 23.| **LeCDN授权** | | | 23.| **授权插件示例** | |
| 24.| **白山云授权** | | | 24.| **dns.la授权** | |
| 25.| **plesk授权** | | | 25.| **多吉云** | |
| 26.| **易支付** | | | 26.| **Dokploy授权** | |
| 27.| **支付宝** | | | 27.| **farcdn授权** | |
| 28.| **微信支付** | | | 28.| **FlexCDN授权** | |
| 29.| **长亭雷池授权** | | | 29.| **Gcore** | Gcore |
| 30.| **lucky** | | | 30.| **Github授权** | |
| 31.| **括彩云cdn授权** | 括彩云CDN每月免费30G[注册即领](https://kuocaicdn.com/register?code=8mn536rrzfbf8) | | 31.| **godaddy授权** | |
| 32.| **uniCloud** | unicloud授权 | | 32.| **金山云授权** | |
| 33.| **华为云授权** | | | 33.| **FTP授权** | |
| 34.| **西部数码授权** | | | 34.| **七牛OSS授权** | |
| 35.| **多吉云** | | | 35.| **腾讯云COS授权** | 腾讯云对象存储授权,包含地域和存储桶 |
| 36.| **我爱云授权** | 我爱云CDN | | 36.| **s3/minio授权** | S3/minio oss授权 |
| 37.| **CacheFly** | CacheFly | | 37.| **namesilo授权** | |
| 38.| **Gcore** | Gcore | | 38.| **1panel授权** | 账号和密码 |
| 39.| **亚马逊云aws授权** | | | 39.| **支付宝** | |
| 40.| **dns.la授权** | | | 40.| **白山云授权** | |
| 41.| **又拍云** | | | 41.| **宝塔云WAF授权** | 用于连接和管理宝塔云WAF服务的授权配置 |
| 42.| **火山引擎** | | | 42.| **cdnfly授权** | |
| 43.| **京东云** | | | 43.| **k8s授权** | |
| 44.| **51dns授权** | | | 44.| **括彩云cdn授权** | 括彩云CDN每月免费30G[注册即领](https://kuocaicdn.com/register?code=8mn536rrzfbf8) |
| 45.| **LeCDN授权** | |
| 46.| **lucky** | |
| 47.| **猫云授权** | |
| 48.| **plesk授权** | |
| 49.| **长亭雷池授权** | |
| 50.| **群晖登录授权** | |
| 51.| **uniCloud** | unicloud授权 |
| 52.| **微信支付** | |
| 53.| **易盾rcdn授权** | 易盾CDN每月免费30G[注册即领](https://rhcdn.yiduncdn.com/register?code=8mn536rrzfbf8) |
| 54.| **易发云短信** | sms.yfyidc.cn/ |
| 55.| **易盾DCDN授权** | https://user.yiduncdn.com |
| 56.| **易支付** | |
| 57.| **proxmox** | |
| 58.| **UCloud授权** | 优刻得授权 |
| 59.| **又拍云** | |
| 60.| **网宿授权** | |
| 61.| **西部数码授权** | |
| 62.| **我爱云授权** | 我爱云CDN |
| 63.| **新网授权(代理方式)** | |
| 64.| **新网授权** | |
| 65.| **新网互联授权** | 仅支持代理账号ip需要加入白名单 |
| 66.| **Zenlayer授权** | Zenlayer授权 |
| 67.| **GoEdge授权** | |
| 68.| **雨云授权** | https://app.rainyun.com/ |
<style module> <style module>
table th:first-of-type { table th:first-of-type {

View File

@@ -1,96 +1,131 @@
# 任务插件 # 任务插件
`70` 款任务插件 `116` 款任务插件
## 1. 证书申请 ## 1. 证书申请
| 序号 | 名称 | 说明 | | 序号 | 名称 | 说明 |
|-----|-----|-----| |-----|-----|-----|
| 1.| **证书申请JS版** | 免费通配符域名证书申请,支持多个域名打到同一个证书上 | | 1.| **证书申请JS版** | 免费通配符域名证书申请,支持多个域名打到同一个证书上 |
| 2.| **证书申请Lego** | 支持海量DNS解析提供商推荐使用一样的免费通配符域名证书申请支持多个域名打到同一个证书上 | | 2.| **商用证书托管** | 手动上传自定义证书后,自动部署(每次证书有更新,都需要手动上传一次) |
| 3.| **商用证书托管** | 手动上传自定义证书后,自动部署(每次证书有更新,都需要手动上传一次) | | 3.| **获取阿里云订阅证书** | 从阿里云拉取订阅模式的商用证书 |
| 4.| **证书申请Lego** | 支持海量DNS解析提供商推荐使用一样的免费通配符域名证书申请支持多个域名打到同一个证书上 |
## 2. 主机 ## 2. 主机
| 序号 | 名称 | 说明 | | 序号 | 名称 | 说明 |
|-----|-----|-----| |-----|-----|-----|
| 1.| **FTP-上传证书到FTP** | 将证书上传到FTP服务器 | | 1.| **主机-复制到本机** | 【仅管理员使用】实际上是复制证书到docker容器内的某个路径需要做目录映射到宿主机 |
| 2.| **IIS-部署到IIS站点** | | | 2.| **主机-执行远程主机脚本命令** | 可以执行重启nginx等操作让证书生效 |
| 3.| **主机-执行远程主机脚本命令** | 可以执行重启nginx等操作让证书生效 | | 3.| **IIS-部署到IIS站点** | |
| 4.| **主机-部署证书到SSH主机** | SFTP上传证书到主机然后SSH执行部署脚本命令 | | 4.| **上传证书到对象存储OSS** | 支持阿里云OSS、腾讯云COS、七牛云KODO、S3、MinIO、FTP、SFTP |
| 5.| **主机-部署证书到SSH主机** | 上传证书到主机覆盖原来的证书文件,然后自动执行部署脚本命令使证书生效 |
| 6.| **Exsi-部署证书到Exsi** | |
| 7.| **FTP-上传证书到FTP** | 将证书上传到FTP服务器 |
| 8.| **Openwrt-部署证书到Openwrt** | |
## 3. CDN ## 3. CDN
| 序号 | 名称 | 说明 | | 序号 | 名称 | 说明 |
|-----|-----|-----| |-----|-----|-----|
| 1.| **易盾-部署到易盾DCDN** | 主要是防御http://user.yiduncdn.com/ | | 1.| **APISIX-更新证书** | 自动更新APISIX证书 |
| 2.| **易盾-部署到易盾RCDN** | 易盾CDN每月免费30G[注册即领](https://rhcdn.yiduncdn.com/register?code=8mn536rrzfbf8) | | 2.| **CacheFly-部署证书到CacheFly** | 部署证书到 CacheFly |
| 3.| **cdnfly-部署证书到cdnfly** | cdnfly | | 3.| **中国移动-部署证书到CDN** | 中国移动自动部署证书到CDN |
| 4.| **百度云-部署证书到CDN** | 部署到百度云CDN | | 4.| **多吉云-部署到多吉云CDN** | |
| 5.| **LeCDN-更新证书** | | | 5.| **farcdn-更新证书** | www.farcdn.net |
| 6.| **LeCDN-更新证书V2** | 支持新版本LeCDN | | 6.| **FlexCDN-更新证书** | |
| 7.| **白山云-更新证书** | | | 7.| **Gcore-刷新Gcore证书** | 刷新现有的证书 |
| 8.| **天翼云-部署证书到CDN** | 部署证书到天翼云CDN和全站加速 | | 8.| **Gcore-部署证书到Gcore** | 仅上传 并不会部署到cdn |
| 9.| **括彩云-部署到括彩云CDN** | 括彩云CDN每月免费30G[注册即领](https://kuocaicdn.com/register?code=8mn536rrzfbf8) | | 9.| **GoEdge-更新证书** | GoEdge |
| 10.| **多吉云-部署到多吉云CDN** | | | 10.| **金山云-更新CDN证书** | 金山云自动更新CDN证书 |
| 11.| **我爱云-部署证书到我爱云CDN** | 部署证书到我爱云CDN | | 11.| **白山云-更新证书** | |
| 12.| **CacheFly-部署证书到CacheFly** | 部署证书到 CacheFly | | 12.| **cdnfly-部署证书到cdnfly** | cdnfly |
| 13.| **Gcore-部署证书到Gcore** | 仅上传 并不会部署到cdn | | 13.| **天翼云-部署证书到CDN** | 部署证书到天翼云CDN和全站加速 |
| 14.| **Gcore-刷新Gcore证书** | 刷新现有的证书 | | 14.| **括彩云-部署到括彩云CDN** | 括彩云CDN每月免费30G[注册即领](https://kuocaicdn.com/register?code=8mn536rrzfbf8) |
| 15.| **又拍云-部署证书到CDN/USS** | 支持又拍云CDN又拍云云存储USS | | 15.| **LeCDN-更新证书V2** | 支持新版本LeCDN |
| 16.| **LeCDN-更新证书** | |
| 17.| **Maoyun-更新猫云CDN证书** | |
| 18.| **易盾-部署到易盾DCDN** | 主要是防御http://user.yiduncdn.com/ |
| 19.| **易盾-部署到易盾RCDN** | 易盾CDN每月免费30G[注册即领](https://rhcdn.yiduncdn.com/register?code=8mn536rrzfbf8) |
| 20.| **雨云-更新证书** | app.rainyun.com |
| 21.| **又拍云-部署证书到CDN/USS** | 支持又拍云CDN又拍云云存储USS |
| 22.| **网宿-更新证书** | 网宿证书自动更新 |
| 23.| **西数-部署到虚拟主机** | 西部数码部署证书到虚拟主机 |
| 24.| **我爱云-部署证书到我爱云CDN** | 部署证书到我爱云CDN |
| 25.| **Zenlayer-刷新证书** | 刷新Zenlayer CDN证书 |
## 4. 面板 ## 4. 面板
| 序号 | 名称 | 说明 | | 序号 | 名称 | 说明 |
|-----|-----|-----| |-----|-----|-----|
| 1.| **宝塔-面板证书部署** | 部署宝塔面板本身的ssl证书 | | 1.| **Dokploy-部署server证书** | 自动更新Dokploy server证书 |
| 2.| **宝塔-网站证书部署** | 部署宝塔管理的站点的ssl证书目前支持网站站点、docker站点等 | | 2.| **飞牛NAS-部署证书** | |
| 3.| **群晖-部署证书到群晖面板** | Synology支持6.x以上版本 | | 3.| **1Panel-部署面板证书** | 更新1Panel的面板证书 |
| 4.| **K8S-部署证书到Secret** | 部署证书到k8s的secret | | 4.| **1Panel-更新证书** | 更新1Panel的证书包括面板证书和站点证书 |
| 5.| **K8S-Ingress 证书部署** | 部署证书到k8s的Ingress | | 5.| **宝塔-删除过期证书** | 删除证书夹中过期证书 |
| 6.| **1Panel-部署证书到1Panel** | 更新1Panel的证书 | | 6.| **宝塔-WAF证书部署** | 部署宝塔云WAF/aaWAF |
| 7.| **Plesk-部署Plesk网站证书** | | | 7.| **宝塔-面板证书部署** | 部署宝塔面板本身的ssl证书 |
| 8.| **雷池-更新证书** | 更新长亭雷池WAF的证书 | | 8.| **宝塔win-网站证书部署** | 部署到Windows版宝塔管理的站点的ssl证书 |
| 9.| **lucky-更新Lucky证书** | | | 9.| **宝塔-网站证书部署** | 部署宝塔管理的站点的ssl证书目前支持宝塔网站站点、docker站点等。本插件也支持aaPanel。 |
| 10.| **uniCloud-部署到服务空间** | 部署到服务空间 | | 10.| **K8S-Apply自定义yaml** | apply自定义yaml到k8s |
| 11.| **威联通-部署证书到威联通** | 部署证书到qnap | | 11.| **K8S-Ingress 证书部署** | 部署证书到k8s的Ingress |
| 12.| **K8S-部署证书到Secret** | 部署证书到k8s的secret |
| 13.| **lucky-更新Lucky证书** | |
| 14.| **Plesk-部署Plesk网站证书** | |
| 15.| **Plesk-更新证书** | 不会创建新证书记录,直接更新旧的证书 |
| 16.| **雷池-更新证书** | 更新长亭雷池WAF的证书 |
| 17.| **群晖-部署证书到群晖面板** | Synology支持6.x以上版本 |
| 18.| **uniCloud-部署到服务空间** | 部署到服务空间 |
| 19.| **Proxmox-上传证书到Proxmox** | |
| 20.| **威联通-部署证书到威联通** | 部署证书到qnap |
## 5. 阿里云 ## 5. 阿里云
| 序号 | 名称 | 说明 | | 序号 | 名称 | 说明 |
|-----|-----|-----| |-----|-----|-----|
| 1.| **阿里云-部署到Ack** | 部署到阿里云Ack集群Ingress等通过Secret管理证书的应用 | | 1.| **阿里云-部署到Ack** | 部署到阿里云Ack集群Ingress等通过Secret管理证书的应用 |
| 2.| **阿里云-部署至任意云资源** | 【不建议使用】需要消耗阿里云自动部署次数支持SLB、LIVE、webHosting、VOD、CR、DCDN、DDoS、CDN、ALB、APIGateway、FC、GA、MSE、NLB、OSS、SAE、WAF等云产品 | | 2.| **阿里云-部署至ALB应用负载均衡** | ALB,更新监听器的默认证书 |
| 3.| **阿里云-部署证书至CDN** | 自动部署域名证书至阿里云CDN | | 3.| **阿里云-部署至任意云资源** | 【不建议使用】需要消耗阿里云自动部署次数支持SLB、LIVE、webHosting、VOD、CR、DCDN、DDoS、CDN、ALB、APIGateway、FC、GA、MSE、NLB、OSS、SAE、WAF等云产品 |
| 4.| **阿里云-部署证书至DCDN** | 依赖证书申请前置任务自动部署域名证书至阿里云DCDN | | 4.| **阿里云-部署至云原生API网关/AI网关** | 自动部署域名证书至云原生API网关、AI网关 |
| 5.| **阿里云-部署证书至OSS** | 自动部署域名证书至阿里云OSS | | 5.| **阿里云-部署证书至API网关** | 自动部署域名证书至阿里云API网关APIGateway |
| 6.| **阿里云-上传证书到阿里云** | 如果不想在阿里云上同一份证书上传多次,可以把此任务作为前置任务,其他阿里云任务证书那一项选择此任务的输出 | | 6.| **阿里云-部署证书至CDN** | 自动部署域名证书至阿里云CDN |
| 7.| **阿里云-部署至阿里云WAF** | 部署证书阿里云WAF | | 7.| **阿里云-部署证书至DCDN** | 依赖证书申请前置任务,自动部署域名证书阿里云DCDN |
| 8.| **阿里云-部署至ALB应用负载均衡** | ALB,更新监听器的默认证书 | | 8.| **阿里云-部署至ESA** | 部署证书到阿里云ESA(边缘安全加速),自动删除过期证书 |
| 9.| **阿里云-部署至NLB网络负载均衡** | NLB,网络负载均衡,更新监听器的默认证书 | | 9.| **阿里云-部署至阿里云FC(3.0)** | 部署证书到阿里云函数计算FC3.0 |
| 10.| **阿里云-部署至SLB(传统负载均衡)** | 部署证书到阿里云SLB(传统负载均衡) | | 10.| **阿里云-部署至NLB(网络负载均衡** | NLB,网络负载均衡,更新监听器的默认证书 |
| 11.| **阿里云-部署至阿里云FC(3.0)** | 部署证书到阿里云函数计算FC3.0,【注意】证书的加密算法必须选择【pkcs1旧版】 | | 11.| **阿里云-部署证书至OSS** | 部署域名证书至阿里云OSS自定义域名不是上传到阿里云oss |
| 12.| **阿里云-部署至CLB(传统负载均衡)** | 部署证书到阿里云CLB(传统负载均衡) |
| 13.| **阿里云-部署至VOD** | 部署证书到阿里云视频点播vod |
| 14.| **阿里云-部署至阿里云WAF** | 部署证书到阿里云WAF |
| 15.| **阿里云-上传证书到CAS** | 上传证书到阿里云证书管理服务CAS如果不想在阿里云上同一份证书上传多次可以把此任务作为前置任务其他阿里云任务证书那一项选择此任务的输出 |
## 6. 华为云 ## 6. 华为云
| 序号 | 名称 | 说明 | | 序号 | 名称 | 说明 |
|-----|-----|-----| |-----|-----|-----|
| 1.| **华为云-部署证书至CDN** | | | 1.| **华为云-部署证书至CDN** | |
| 2.| **华为云-部署证书至OBS** | |
| 3.| **华为云-上传证书至CCM** | 上传证书到华为云云证书管理CCM |
## 7. 腾讯云 ## 7. 腾讯云
| 序号 | 名称 | 说明 | | 序号 | 名称 | 说明 |
|-----|-----|-----| |-----|-----|-----|
| 1.| **腾讯云-部署证书到任意云资源** | 支持负载均衡、CDN、DDoS、直播、点播、Web应用防火墙、API网关、TEO、容器服务、对象存储、轻应用服务器、云原生微服务、云开发 | | 1.| **腾讯云-删除即将过期证书** | 仅删除未使用的证书 |
| 2.| **腾讯云-部署到CLB** | 暂时只支持单向认证证书,暂时只支持通用负载均衡 | | 2.| **腾讯云-部署证书到任意云资源** | 支持负载均衡、CDN、DDoS、直播、点播、Web应用防火墙、API网关、TEO、容器服务、对象存储、轻应用服务器、云原生微服务、云开发 |
| 3.| **腾讯云-部署到CDN废弃** | 已废弃请使用v2版 | | 3.| **腾讯云-部署到CDN废弃** | 已废弃请使用v2版 |
| 4.| **腾讯云-部署到CDN-v2** | 推荐使用 | | 4.| **腾讯云-部署到CDN-v2** | 推荐使用 |
| 5.| **腾讯云-上传证书到腾讯云** | 上传成功后输出tencentCertId | | 5.| **腾讯云-部署到CLB** | 暂时只支持单向认证证书,暂时只支持通用负载均衡 |
| 6.| **腾讯云-部署证书到COS** | 部署到腾讯云COS源站域名证书【注意很不稳定需要重试很多次偶尔才能成功一次】 | | 6.| **腾讯云-部署证书到COS** | 部署到腾讯云COS源站域名证书【注意很不稳定需要重试很多次偶尔才能成功一次】 |
| 7.| **腾讯云-部署到腾讯云EO** | 腾讯云边缘安全加速平台EO必须配置上传证书到腾讯云任务 | | 7.| **腾讯云-部署到腾讯云EO** | 腾讯云边缘安全加速平台EdgeOne(EO) |
| 8.| **腾讯云-删除即将过期证书** | 仅删除未使用的证书 | | 8.| **腾讯云-部署到腾讯云直播** | https://console.cloud.tencent.com/live/ |
| 9.| **腾讯云-部署到TKE-ingress** | serverless集群请使用K8S部署插件Qcloud类型需要【上传到腾讯云】作为前置任务ApiServer未开启外网访问则需要做域名的内网IP映射 | | 9.| **腾讯云-部署到TKE** | 修改TKE集群密钥配置支持Opaque和TLS证书类型。注意 1. serverless集群请使用K8S部署插件 2. Opaque类型需要【上传到腾讯云】作为前置任务; 3. ApiServer需要开通公网访问或者certd可访问实际上底层仍然是通过KubeClient进行部署 |
| 10.| **腾讯云-更新证书(Id不变)** | 根据证书id一键更新腾讯云证书并自动部署Id不变注意当前仅支持CLB其他需要等腾讯接口完善 |
| 11.| **腾讯云-实例开关机** | 腾讯云实例开关机 |
| 12.| **腾讯云-上传证书到腾讯云** | 上传成功后输出tencentCertId |
## 8. 火山引擎 ## 8. 火山引擎
| 序号 | 名称 | 说明 | | 序号 | 名称 | 说明 |
|-----|-----|-----| |-----|-----|-----|
| 1.| **火山引擎-部署证书至CDN** | 支持网页,文件下载,音视频点播 | | 1.| **火山引擎-部署证书至ALB** | 部署至火山引擎应用负载均衡 |
| 2.| **火山引擎-部署证书至CLB** | 部署至火山引擎负载均衡 | | 2.| **火山引擎-部署证书至CDN** | 支持网页,文件下载,音视频点播 |
| 3.| **火山引擎-上传证书至证书中心** | 上传证书至火山引擎证书中心 | | 3.| **火山引擎-部署证书至CLB** | 部署至火山引擎负载均衡 |
| 4.| **火山引擎-部署证书至ALB** | 部署至火山引擎应用负载均衡 | | 4.| **火山引擎-部署证书至DCDN** | 部署至火山引擎全站加速 |
| 5.| **火山引擎-部署证书至Live** | 部署至火山引擎视频直播 | | 5.| **火山引擎-部署证书至Live** | 部署至火山引擎视频直播 |
| 6.| **火山引擎-部署证书至VOD** | 部署至火山引擎视频点播(暂不可用) |
| 7.| **火山引擎-上传证书至证书中心** | 上传证书至火山引擎证书中心 |
## 9. 京东云 ## 9. 京东云
| 序号 | 名称 | 说明 | | 序号 | 名称 | 说明 |
@@ -98,26 +133,50 @@
| 1.| **京东云-部署证书至CDN** | 京东云内容分发网络 | | 1.| **京东云-部署证书至CDN** | 京东云内容分发网络 |
| 2.| **京东云-更新已有证书** | 更新SSL数字证书中的证书 | | 2.| **京东云-更新已有证书** | 更新SSL数字证书中的证书 |
| 3.| **京东云-上传新证书** | 上传证书到SSL数字证书中心 | | 3.| **京东云-上传新证书** | 上传证书到SSL数字证书中心 |
## 10. 七牛云 ## 10. UCloud
| 序号 | 名称 | 说明 | | 序号 | 名称 | 说明 |
|-----|-----|-----| |-----|-----|-----|
| 1.| **七牛云-部署证书至OSS** | 自动部署域名证书至七牛云KODO注意是自定义源站域名不是CDN域名 | | 1.| **UCloud-部署到CDN** | 将证书部署到UCloud CDN |
| 2.| **七牛云-部署证书至CDN** | 自动部署域名证书至七牛云CDN | | 2.| **UCloud-部署到WAF** | 将证书部署到UCloud WAF |
## 11. 亚马逊云 | 3.| **UCloud-上传到USSL** | 将证书上传到UCloud USSL |
## 11. 百度云
| 序号 | 名称 | 说明 |
|-----|-----|-----|
| 1.| **百度云-部署证书到负载均衡** | 部署到百度云负载均衡包括BLB、APPBLB |
| 2.| **百度云-部署证书到CDN** | 部署到百度云CDN |
| 3.| **百度云-上传到证书托管** | 上传证书到百度云证书托管中心 |
## 12. 七牛云
| 序号 | 名称 | 说明 |
|-----|-----|-----|
| 1.| **七牛云-部署证书至CDN/DCDN** | 自动部署域名证书至七牛云CDN、DCDN |
| 2.| **七牛云-部署证书至OSS** | 自动部署域名证书至七牛云KODO注意是自定义源站域名不是CDN域名 |
| 3.| **七牛云-上传证书到七牛云** | 上传到七牛云 |
## 13. 亚马逊云
| 序号 | 名称 | 说明 | | 序号 | 名称 | 说明 |
|-----|-----|-----| |-----|-----|-----|
| 1.| **AWS-部署证书到CloudFront** | 部署证书到 AWS CloudFront | | 1.| **AWS-部署证书到CloudFront** | 部署证书到 AWS CloudFront |
## 12. 其他 | 2.| **AWS-上传证书到ACM** | 上传证书 AWS ACM |
| 3.| **AWS(国区)-部署证书到CloudFront** | 部署证书到 AWS CloudFront |
## 14. 其他
| 序号 | 名称 | 说明 | | 序号 | 名称 | 说明 |
|-----|-----|-----| |-----|-----|-----|
| 1.| **Demo-测试插件** | | | 1.| **Demo-测试插件** | |
| 2.| **Github-检查Release版本** | 检查最新Release版本并推送消息 |
| 3.| **邮件发送证书** | 通过邮件发送证书 |
| 4.| **等待** | 等待一段时间 |
| 5.| **webhook方式部署证书** | 调用webhook部署证书 |
## 15. 管理
| 序号 | 名称 | 说明 |
|-----|-----|-----|
| 1.| **数据库备份** | 【仅管理员可用】仅支持备份SQLite数据库 |
| 2.| **重启 Certd** | 【仅管理员可用】 重启 certd的https服务用于更新 Certd 的 ssl 证书 | | 2.| **重启 Certd** | 【仅管理员可用】 重启 certd的https服务用于更新 Certd 的 ssl 证书 |
| 3.| **自定义js脚本** | 【仅管理员】运行自定义js脚本执行 | | 3.| **自定义js脚本** | 【仅管理员】运行自定义js脚本执行 |
| 4.| **等待** | 等待一段时间 |
| 5.| **数据库备份** | 仅支持备份SQLite数据库 |
<style module> <style module>
table th:first-of-type { table th:first-of-type {

View File

@@ -2,14 +2,25 @@
| 序号 | 名称 | 说明 | | 序号 | 名称 | 说明 |
|-----|-----|-----| |-----|-----|-----|
| 1.| **阿里** | 阿里DNS解析提供商 | | 1.| **阿里ESA** | 阿里ESA DNS解析 |
| 2.| **腾讯** | 腾讯云域名DNS解析提供 | | 2.| **阿里** | 阿里云DNS解析提供 |
| 3.| **华为云** | 华为云DNS解析提供商 | | 3.| **AWS Route53** | AWS Route53 DNS解析提供商 |
| 4.| **西部数码** | west dns provider | | 4.| **火山引擎** | 火山引擎DNS解析提供商 |
| 5.| **dns.la** | dns.la | | 5.| **京东云** | 京东云DNS解析提供商 |
| 6.| **火山引擎** | 火山引擎DNS解析提供商 | | 6.| **新网(代理方式)** | 新网域名解析(代理方式) |
| 7.| **京东云** | 京东云DNS解析提供商 | | 7.| **新网** | 新网域名解析 |
| 8.| **51dns** | 51DNS | | 8.| **cloudflare** | cloudflare dns provider |
| 9.| **dns.la** | dns.la |
| 10.| **godaddy** | GoDaddy |
| 11.| **华为云** | 华为云DNS解析提供商 |
| 12.| **namesilo** | namesilo dns provider |
| 13.| **雨云** | 雨云DNS解析提供商 |
| 14.| **腾讯云** | 腾讯云域名DNS解析提供者 |
| 15.| **腾讯云EO DNS** | 腾讯云EO DNS解析提供者 |
| 16.| **西部数码** | west dns provider |
| 17.| **Dns提供商Demo** | dns provider示例 |
| 18.| **51dns** | 51DNS |
| 19.| **新网互联** | 新网互联 |
<style module> <style module>
table th:first-of-type { table th:first-of-type {

View File

@@ -2,18 +2,22 @@
| 序号 | 名称 | 说明 | | 序号 | 名称 | 说明 |
|-----|-----|-----| |-----|-----|-----|
| 1.| **企业微信通知** | 企业微信群聊机器人通知 | | 1.| **电子邮件** | 电子邮件通知 |
| 2.| **电子邮件** | 电子邮件通知 | | 2.| **自定义webhook** | 根据模版自定义http请求 |
| 3.| **爱语飞飞微信通知(iyuu)** | https://iyuu.cn/ | | 3.| **AnPush** | https://anpush.com |
| 4.| **自定义webhook** | 根据模版自定义http请求 | | 4.| **Bark 通知** | Bark 推送通知插件 |
| 5.| **Server酱ᵀ** | https://sct.ftqq.com/ | | 5.| **钉钉通知** | 钉钉群聊通知 |
| 6.| **Server酱³** | https://doc.sc3.ft07.com/serverchan3 | | 6.| **Discord 通知** | Discord 机器人通知 |
| 7.| **AnPush** | https://anpush.com | | 7.| **飞书通知** | 飞书群聊webhook通知 |
| 8.| **Telegram通知** | Telegram Bot推送通知 | | 8.| **爱语飞飞微信通知(iyuu)** | https://iyuu.cn/ |
| 9.| **Discord 通知** | Discord 机器人通知 | | 9.| **MeoW通知** | https://api.chuckfang.com/ |
| 10.| **Slack通知** | Slack消息推送通知 | | 10.| **OneBot V11 通知** | 通过动态拼接URL发送 OneBot V11 协议消息 |
| 11.| **Bark 通知** | Bark 推送通知插件 | | 11.| **企业微信通知** | 企业微信群聊机器人通知 |
| 12.| **飞书通知** | 飞书群聊webhook通知 | | 12.| **Server酱ᵀ** | https://sct.ftqq.com/ |
| 13.| **Server酱³** | https://doc.sc3.ft07.com/serverchan3 |
| 14.| **Slack通知** | Slack消息推送通知 |
| 15.| **Telegram通知** | Telegram Bot推送通知 |
| 16.| **VoceChat通知** | https://voce.chat |
<style module> <style module>
table th:first-of-type { table th:first-of-type {

View File

@@ -19,7 +19,7 @@
"detail": too many certificates (5) already issued for this exact set of idantifiers in the last 168hm0s "detail": too many certificates (5) already issued for this exact set of idantifiers in the last 168hm0s
``` ```
## ssl.com报错 CAA record does not include ssl.com which is required to issue the certificate ## 4. ssl.com报错 CAA record does not include ssl.com which is required to issue the certificate
ssl.com申请证书要求必须设置CAA记录表示允许ssl.com为该域名颁发证书 ssl.com申请证书要求必须设置CAA记录表示允许ssl.com为该域名颁发证书
请按如下格式添加CAA记录 请按如下格式添加CAA记录
@@ -29,5 +29,26 @@ ssl.com申请证书要求必须设置CAA记录表示允许ssl.com为该域名
| 一级泛域名 | CAA | * | 0 | issue/issuewild | "ssl.com" | | 一级泛域名 | CAA | * | 0 | issue/issuewild | "ssl.com" |
| 固定子域名 | CAA | sub | 0 | issue |"ssl.com" | | 固定子域名 | CAA | sub | 0 | issue |"ssl.com" |
## 5. address family not supported
启动时出现此错误是由于您的服务器不支持绑定ipv6地址
请配置环境变量 certd_koa_hostname=0.0.0.0
在docker-compose.yml中添加如下配置
```yaml
service:
certd:
environment:
certd_koa_hostname: 0.0.0.0
```
## 6. DNS记录问题
1. DNS 不要设置CAA记录删除即可
2. DNSSEC相关报错DNSSEC管理中删除即可
3. DNS 有其他平台申请过的_acme-challenge记录删除即可

View File

@@ -7,10 +7,16 @@
https://certd.handsfree.work/ https://certd.handsfree.work/
> 注意数据将不定期清理,不定期停止定时任务,生产使用请自行部署 注册 -> 创建证书流水线 -> 添加部署任务 -> 测试运行
> 注意demo的数据将不定期清理生产使用请自行部署
> 包含敏感信息,务必自己本地部署进行生产使用 > 包含敏感信息,务必自己本地部署进行生产使用
![首页](../images/start/home-2.png)
## 二、私有化部署 ## 二、私有化部署
由于证书、授权信息等属于高度敏感数据,请务必私有化部署,保障数据安全 由于证书、授权信息等属于高度敏感数据,请务必私有化部署,保障数据安全

View File

@@ -5,8 +5,10 @@
配置环境变量 配置环境变量
```shell ```shell
ALIYUN_CLIENT_CONNECT_TIMEOUT=10000 # 连接超时,单位毫秒 # docker-compose.yaml
ALIYUN_CLIENT_READ_TIMEOUT=10000 #读取数据超时,单位毫秒 environment:
- ALIYUN_CLIENT_CONNECT_TIMEOUT=16000 # 连接超时,单位毫秒
- ALIYUN_CLIENT_READ_TIMEOUT=16000 #读取数据超时,单位毫秒
``` ```

View File

@@ -17,7 +17,7 @@
> 如果出现过: 100.25.1.5 100.25.4.8 > 如果出现过: 100.25.1.5 100.25.4.8
> >
> 可以尝试配置 100.25.*.5 > 可以尝试配置 100.25.*.*
## 二、nginx代理方案 ## 二、nginx代理方案

View File

@@ -1,10 +0,0 @@
# 证书申请失败情况
## DNS记录问题
1. DNS 不要设置CAA记录删除即可
2. DNSSEC相关报错DNSSEC管理中删除即可
3. DNS 有其他平台申请过的_acme-challenge记录删除即可

11
docs/guide/use/cert/ip.md Normal file
View File

@@ -0,0 +1,11 @@
# IP证书申请
certd已支持IP证书申请
> 注意IP证书有效期只有7天。
## 申请方式
相比普通的域名证书申请方式区别在于:
1. 域名栏填写IP
2. 校验方式选择HTTP只能HTTP
3. 证书颁发机构选择默认的Let's Encrypt
4. 过期更新天数改成2天

Binary file not shown.

After

Width:  |  Height:  |  Size: 262 KiB

View File

@@ -11,7 +11,8 @@
* 进入“账户中心”->“API安全”->“商户API证书”->“管理证书” * 进入“账户中心”->“API安全”->“商户API证书”->“管理证书”
* 根据指引生成证书 * 根据指引生成证书
* 得到私钥和公 * 得到apiclient证书和私钥
![wx-1.png](images/wx-1.png)
3. 填写APIv3密钥 3. 填写APIv3密钥
@@ -24,4 +25,4 @@
4. 在Certd后台配置微信支付 4. 在Certd后台配置微信支付
* 进入“系统”->"设置"->“支付设置” * 进入“系统”->"设置"->“支付设置”
* 启用微信支付,选择“微信支付配置”,点击添加 * 启用微信支付,选择“微信支付配置”,点击添加
* 填写微信支付商户号、证书私钥、证书公钥、APIv3密钥即可。 * 填写微信支付商户号、证书apiclient_cert.pem、私钥apiclient_key.pem、APIv3密钥即可。

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 141 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

View File

@@ -0,0 +1,19 @@
# 插件开发
## 插件创建
点击自定义插件按钮,填写插件基本信息
![plugin-create.png](images/plugin-create.png)
创建成功后,会默认打开插件编辑页面,里面默认带有示例代码说明,可以在此基础上进行你的自定义开发
![plugin-edit.png](images/plugin-edit.png)
## 插件测试
在流水线中添加插件任务
![plugin-test.png](images/plugin-test1.png)
配置插件任务参数
![plugin-test.png](images/plugin-test2.png)
点击运行,查看插件任务运行结果
![plugin-test.png](images/plugin-test3.png)

View File

@@ -1,26 +1,53 @@
# 忘记管理员密码 # 忘记密码/无法登录
无法登录的情况:
1、忘记管理员密码
2、仅有第三方登录但第三方登录失效导致无法登录
请查看如下方法恢复的登录
## 一、忘记管理员密码
解决方法如下: 解决方法如下:
## 1. 修改环境变量 ### 1. 修改环境变量
docker部署的
修改docker-compose.yaml文件将环境变量`certd_system_resetAdminPasswd`改为`true` 修改docker-compose.yaml文件将环境变量`certd_system_resetAdminPasswd`改为`true`
```yaml ```yaml
services: services:
certd: certd:
environment: # 环境变量 environment: # 环境变量
- certd_system_resetAdminPasswd=false - certd_system_resetAdminPasswd=true
``` ```
## 2. 重启容器
源码部署的,修改`packages/ui/certd-server/.env`文件
```ini
certd_system_resetAdminPasswd=true
```
### 2. 重启容器
```shell ```shell
docker compose up -d docker compose up -d
docker logs -f --tail 500 certd docker logs -f --tail 500 certd
# 观察日志当日志中输出“重置1号管理员用户密码完成”,即可操作下一步 # 观察日志当日志中输出“重置1号管理员用户密码完成”即可操作下一步
# 这里会打印1号管理员记录的用户名如果你修改过管理员用户名请注意查看此条日志
``` ```
## 3. 恢复环境变量 ### 3. 恢复环境变量
修改docker-compose.yaml`certd_system_resetAdminPasswd`改回`false` 修改docker-compose.yaml`certd_system_resetAdminPasswd`改回`false`
## 4. 再次重启容器 ### 4. 再次重启容器
```shell ```shell
docker compose up -d docker compose up -d
``` ```
## 5. 默认密码登录 ### 5. 默认密码登录
使用`admin/123456`登录系统,请及时修改管理员密码 使用`原管理员账号/123456`登录系统,请及时修改管理员密码
> 默认管理员账号: admin
> 如果忘记管理员账号,请查看修改密码时的启动日志,会打印管理员账号名
## 二、仅有第三方登录,没有登录窗口
当开启仅使用第三方登录模式时,如果第三方登录未配置或已失效,则会导致无法登录
您可以通过访问 `http://你的certd地址/#/login?oauthOnly=false` 来临时关闭仅使用第三方登录模式,以使用密码登录。

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

View File

@@ -0,0 +1,17 @@
# 流水线有效期功能
可以为流水线设置有效期,超过有效期后,流水线将停止运行
## 1. 打开有效期开关
![setting.png](images/setting.png)
## 2. 设置有效期
![valid.png](images/edit.png)
![valid.png](images/edit2.png)
## 3. 设置完成
该流水线将在有效期结束后停止运行
![valid.png](images/show.png)

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

View File

@@ -0,0 +1,2 @@
# 第三方登录配置

View File

@@ -0,0 +1,11 @@
# 用户有效期功能
可以为用户设置有效期,超过有效期后,用户的流水线将停止运行
## 开启用户有效期功能
![开启用户有效期功能](images/user_valid_enable.png)
## 设置用户有效期
![设置用户有效期](images/user_valid_set.png)

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

View File

@@ -18,6 +18,12 @@
### 3. 配置Certd项目 ### 3. 配置Certd项目
![](./images/3.png) ![](./images/3.png)
建议加上 `:delegated` 提升性能
```yaml
volumes:
↓↓↓↓------加上这个提升性能
- /volume1/docker/certd:/app/data:delegated
```
### 4. 外网访问设置 ### 4. 外网访问设置
@@ -61,4 +67,31 @@
![](./images/deploy4.png) ![](./images/deploy4.png)
## 6. 配置通知和自动运行 ## 6. 配置通知和自动运行
![](./images/notify.png) ![](./images/notify.png)
## 三、 常见问题
### 1. 登录超时 status:ECONNABORTED
如果您的certd部署在群晖里面可能会遇到登录超时的问题
```
httpRequest:https://dms.xxxxx.com:5001/webapi/entry.cgi, method:get
请求出错: status:ECONNABORTED, statusText:ECONNABORTED
Axio:sError: timeout of 120000ms exceeded
```
可能的原因是是您的dsm域名指向的ip地址在容器内无法访问导致登录超时
您可以通过配置域名映射来解决
1. 获取群晖dsm内部地址
进入certd后台->系统管理->网络测试, 一般会看到 `172.xx.0.2` 记住这个xx是多少
![](./images/nettest.png)
2. 修改容器编排 docker-compose.yaml
```
services:
certd:
...
extra_hosts: # 放开这段注释
- "你的dsm域名地址:172.xx.0.1" # 将xx替换成上面记住的数字
```

Binary file not shown.

After

Width:  |  Height:  |  Size: 194 KiB

View File

@@ -24,13 +24,13 @@ features:
- title: 全自动申请证书 - title: 全自动申请证书
details: 支持所有注册商注册的域名 details: 支持所有注册商注册的域名
- title: 全自动部署证书 - title: 全自动部署证书
details: 支持部署到主机、阿里云、腾讯云等,目前已支持60+部署插件 details: 支持部署到主机、阿里云、腾讯云等,目前已支持100+部署插件
- title: 多域名、泛域名打到一个证书上 - title: 多域名、泛域名打到一个证书上
details: 支持通配符域名/泛域名,支持多个域名打到一个证书上 details: 支持通配符域名/泛域名,支持多个域名打到一个证书上
- title: 多证书格式支持 - title: 多证书格式支持
details: 支持pem、pfx、der、jks等多种证书格式支持Google、Letsencrypt、ZeroSSL证书颁发机构 details: 支持pem、pfx、der、jks等多种证书格式支持Google、Letsencrypt、ZeroSSL证书颁发机构
- title: 支持私有化部署 - title: 私有化部署,数据安全
details: 授权数据加密存储,保障数据安全 details: 授权数据加密存储,保障数据安全支持SQLite、Postgresql、MySQL多种数据库
- title: 多数据库支持 - title: 无痛升级
details: 支持SQLite、Postgresql、MySQL数据库 details: 有手就行,向下兼容,无需担心数据作废
--- ---

View File

@@ -9,5 +9,5 @@
} }
}, },
"npmClient": "pnpm", "npmClient": "pnpm",
"version": "1.37.0" "version": "1.38.1"
} }

View File

@@ -8,6 +8,7 @@
"@lerna-lite/publish": "^3.9.3", "@lerna-lite/publish": "^3.9.3",
"@lerna-lite/run": "^3.9.3", "@lerna-lite/run": "^3.9.3",
"@lerna-lite/version": "^3.9.3", "@lerna-lite/version": "^3.9.3",
"axios": "^1.9.0",
"medium-zoom": "^1.1.0", "medium-zoom": "^1.1.0",
"vitepress": "^2.0.0-alpha.4", "vitepress": "^2.0.0-alpha.4",
"vitepress-plugin-lightbox": "^1.0.2" "vitepress-plugin-lightbox": "^1.0.2"
@@ -17,29 +18,36 @@
"start:server": "cd ./packages/ui/certd-server && npm start", "start:server": "cd ./packages/ui/certd-server && npm start",
"devb": "lerna run dev-build", "devb": "lerna run dev-build",
"i-all": "lerna link && lerna exec npm install ", "i-all": "lerna link && lerna exec npm install ",
"publish": "npm run prepublishOnly2 && lerna publish --force-publish=pro/plus-core --conventional-commits --create-release github && npm run afterpublishOnly && npm run commitAll", "publish": "npm run prepublishOnly2 && lerna publish --force-publish=pro/plus-core --conventional-commits && npm run afterpublishOnly ",
"afterpublishOnly": "npm run copylogs && time /t >build.trigger && git add ./build.trigger && git commit -m \"build: trigger build image\" && TIMEOUT /T 10 && git push", "afterpublishOnly": "npm run copylogs && time /t >trigger/build.trigger && git add ./trigger/build.trigger && git commit -m \"build: trigger build image\" && TIMEOUT /T 10 && npm run commitAll",
"transform-sql": "cd ./packages/ui/certd-server/db/ && node --experimental-json-modules transform.js", "transform-sql": "cd ./packages/ui/certd-server/db/ && node --experimental-json-modules transform.js",
"plugin-doc-gen": "cd ./packages/ui/certd-server/ && npm run export-metadata",
"commitAll": "git add . && git commit -m \"build: publish\" && git push && npm run commitPro", "commitAll": "git add . && git commit -m \"build: publish\" && git push && npm run commitPro",
"commitPro": "cd ./packages/pro/ && git add . && git commit -m \"build: publish\" && git push", "commitPro": "cd ./packages/pro/ && git add . && git commit -m \"build: publish\" && git push",
"copylogs": "copyfiles \"CHANGELOG.md\" ./docs/guide/changelogs/", "copylogs": "copyfiles \"CHANGELOG.md\" ./docs/guide/changelogs/",
"prepublishOnly1": "npm run check && lerna run build ", "prepublishOnly1": "npm run check && lerna run build ",
"prepublishOnly2": "npm run check && npm run before-build && lerna run build ", "prepublishOnly2": "npm run check && npm run before-build && lerna run build && npm run plugin-doc-gen",
"before-build": "npm run transform-sql && cd ./packages/core/basic && time /t >build.md && git add ./build.md && git commit -m \"build: prepare to build\"", "before-build": "npm run transform-sql && cd ./packages/core/basic && time /t >build.md && git add ./build.md && git commit -m \"build: prepare to build\"",
"deploy1": "node --experimental-json-modules deploy.js ", "deploy1": "node --experimental-json-modules ./scripts/deploy.js ",
"check": "node --experimental-json-modules publish-check.js", "check": "node --experimental-json-modules ./scripts/publish-check.js",
"init": "lerna run build", "init": "lerna run build",
"init:dev": "lerna run build", "init:dev": "lerna run build",
"docs:dev": "vitepress dev docs", "docs:dev": "vitepress dev docs",
"docs:build": "npm run copylogs && vitepress build docs", "docs:build": "npm run copylogs && vitepress build docs",
"docs:preview": "vitepress preview docs", "docs:preview": "vitepress preview docs",
"pub": "echo 1" "pub": "echo 1",
"dev": "pnpm run -r --parallel compile ",
"release": "time /t >trigger/release.trigger && git add trigger/release.trigger && git commit -m \"build: release\" && git push",
"publish_to_atomgit": "node --experimental-json-modules ./scripts/publish-atomgit.js",
"publish_to_gitee": "node --experimental-json-modules ./scripts/publish-gitee.js",
"publish_to_github": "node --experimental-json-modules ./scripts/publish-github.js",
"get_version": "node --experimental-json-modules ./scripts/version.js"
}, },
"license": "AGPL-3.0", "license": "AGPL-3.0",
"dependencies": { "dependencies": {
"axios": "^1.7.7",
"copyfiles": "^2.4.1", "copyfiles": "^2.4.1",
"lodash-es": "^4.17.21", "lodash-es": "^4.17.21",
"root": "link:",
"typescript": "^5.4.2" "typescript": "^5.4.2"
}, },
"workspaces": [ "workspaces": [

View File

@@ -3,6 +3,99 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [1.38.1](https://github.com/publishlab/node-acme-client/compare/v1.38.0...v1.38.1) (2026-01-15)
**Note:** Version bump only for package @certd/acme-client
# [1.38.0](https://github.com/publishlab/node-acme-client/compare/v1.37.17...v1.38.0) (2026-01-13)
**Note:** Version bump only for package @certd/acme-client
## [1.37.17](https://github.com/publishlab/node-acme-client/compare/v1.37.16...v1.37.17) (2025-12-29)
### Performance Improvements
* aws route53 ([8caab1f](https://github.com/publishlab/node-acme-client/commit/8caab1fd9264df548f467b94202d567107b7a30b))
## [1.37.16](https://github.com/publishlab/node-acme-client/compare/v1.37.15...v1.37.16) (2025-12-15)
### Bug Fixes
* 修复ipv6作为证书域名申请证书校验失败的bug ([e4e16bc](https://github.com/publishlab/node-acme-client/commit/e4e16bc6a65bb082c18ca0590226f0987a47d477))
## [1.37.15](https://github.com/publishlab/node-acme-client/compare/v1.37.14...v1.37.15) (2025-12-06)
**Note:** Version bump only for package @certd/acme-client
## [1.37.14](https://github.com/publishlab/node-acme-client/compare/v1.37.13...v1.37.14) (2025-12-02)
**Note:** Version bump only for package @certd/acme-client
## [1.37.13](https://github.com/publishlab/node-acme-client/compare/v1.37.12...v1.37.13) (2025-12-02)
**Note:** Version bump only for package @certd/acme-client
## [1.37.12](https://github.com/publishlab/node-acme-client/compare/v1.37.11...v1.37.12) (2025-11-29)
### Performance Improvements
* 支持证书颁发机构 LiteSSL ([6be7591](https://github.com/publishlab/node-acme-client/commit/6be75913324e2828d9016eb307ff2d0abbbb2191))
## [1.37.11](https://github.com/publishlab/node-acme-client/compare/v1.37.10...v1.37.11) (2025-11-28)
### Performance Improvements
* ssl.com支持ecc ([b5ec047](https://github.com/publishlab/node-acme-client/commit/b5ec04723db48422f71041f4043002e7f5b450b1))
## [1.37.10](https://github.com/publishlab/node-acme-client/compare/v1.37.9...v1.37.10) (2025-11-19)
**Note:** Version bump only for package @certd/acme-client
## [1.37.9](https://github.com/publishlab/node-acme-client/compare/v1.37.8...v1.37.9) (2025-11-19)
**Note:** Version bump only for package @certd/acme-client
## [1.37.8](https://github.com/publishlab/node-acme-client/compare/v1.37.7...v1.37.8) (2025-11-17)
**Note:** Version bump only for package @certd/acme-client
## [1.37.7](https://github.com/publishlab/node-acme-client/compare/v1.37.6...v1.37.7) (2025-11-12)
### Performance Improvements
* 支持使用letencrypt测试环境申请ip证书 ([86ce00a](https://github.com/publishlab/node-acme-client/commit/86ce00adf92ff98fead87a3eaaa6631036708f47))
* 支持腾讯云teo dns解析 ([1d23dd2](https://github.com/publishlab/node-acme-client/commit/1d23dd2426bd1e4c4dfea0a9e561d665e045ba9d))
## [1.37.6](https://github.com/publishlab/node-acme-client/compare/v1.37.5...v1.37.6) (2025-11-10)
### Performance Improvements
* 支持letencrypt测试环境支持IP证书 ([1462cdd](https://github.com/publishlab/node-acme-client/commit/1462cddd1eb347b7ff238286b5c977b29a0591ec))
## [1.37.5](https://github.com/publishlab/node-acme-client/compare/v1.37.4...v1.37.5) (2025-11-08)
**Note:** Version bump only for package @certd/acme-client
## [1.37.4](https://github.com/publishlab/node-acme-client/compare/v1.37.3...v1.37.4) (2025-10-28)
**Note:** Version bump only for package @certd/acme-client
## [1.37.3](https://github.com/publishlab/node-acme-client/compare/v1.37.2...v1.37.3) (2025-10-24)
### Bug Fixes
* 修复并发情况下证书申请日志混乱的bug ([bb2714f](https://github.com/publishlab/node-acme-client/commit/bb2714ff241f9db4a71d805b23a1b0f9f2f6413a))
## [1.37.2](https://github.com/publishlab/node-acme-client/compare/v1.37.1...v1.37.2) (2025-10-14)
### Bug Fixes
* aliyunoss 选择证书接入点选择新加坡无法上传的bug ([e00733a](https://github.com/publishlab/node-acme-client/commit/e00733a34644c23ffe926486b15dc96bf2fa4b57))
## [1.37.1](https://github.com/publishlab/node-acme-client/compare/v1.37.0...v1.37.1) (2025-09-29)
**Note:** Version bump only for package @certd/acme-client
# [1.37.0](https://github.com/publishlab/node-acme-client/compare/v1.36.25...v1.37.0) (2025-09-28) # [1.37.0](https://github.com/publishlab/node-acme-client/compare/v1.36.25...v1.37.0) (2025-09-28)
**Note:** Version bump only for package @certd/acme-client **Note:** Version bump only for package @certd/acme-client

View File

@@ -3,7 +3,7 @@
"description": "Simple and unopinionated ACME client", "description": "Simple and unopinionated ACME client",
"private": false, "private": false,
"author": "nmorsman", "author": "nmorsman",
"version": "1.37.0", "version": "1.38.1",
"type": "module", "type": "module",
"module": "scr/index.js", "module": "scr/index.js",
"main": "src/index.js", "main": "src/index.js",
@@ -18,10 +18,10 @@
"types" "types"
], ],
"dependencies": { "dependencies": {
"@certd/basic": "^1.37.0", "@certd/basic": "^1.38.1",
"@peculiar/x509": "^1.11.0", "@peculiar/x509": "^1.11.0",
"asn1js": "^3.0.5", "asn1js": "^3.0.5",
"axios": "^1.7.2", "axios": "^1.9.0",
"debug": "^4.3.5", "debug": "^4.3.5",
"http-proxy-agent": "^7.0.2", "http-proxy-agent": "^7.0.2",
"https-proxy-agent": "^7.0.5", "https-proxy-agent": "^7.0.5",
@@ -52,7 +52,8 @@
"lint-types": "tsd", "lint-types": "tsd",
"prepublishOnly": "npm run build-docs", "prepublishOnly": "npm run build-docs",
"test": "mocha -t 60000 \"test/setup.js\" \"test/**/*.spec.js\"", "test": "mocha -t 60000 \"test/setup.js\" \"test/**/*.spec.js\"",
"pub": "npm publish" "pub": "npm publish",
"compile": "tsc --skipLibCheck --watch"
}, },
"repository": { "repository": {
"type": "git", "type": "git",
@@ -69,5 +70,5 @@
"bugs": { "bugs": {
"url": "https://github.com/publishlab/node-acme-client/issues" "url": "https://github.com/publishlab/node-acme-client/issues"
}, },
"gitHead": "6b43007c44e1b8ccdb87081b0cf3f99fc2c09d53" "gitHead": "2c80c35b21b3f435e835167fca13db510bbc38a2"
} }

View File

@@ -28,7 +28,6 @@ class AcmeApi {
} }
} }
} }
console.log(locationUrl, mapping);
return locationUrl; return locationUrl;
} }

View File

@@ -2,9 +2,11 @@
* ACME auto helper * ACME auto helper
*/ */
import { readCsrDomains } from "./crypto/index.js"; import { readCsrDomains } from "./crypto/index.js";
import { log } from "./logger.js";
import { wait } from "./wait.js"; import { wait } from "./wait.js";
import { CancelError } from "./error.js"; import { CancelError } from "./error.js";
import { domainUtils } from '@certd/basic';
const defaultOpts = { const defaultOpts = {
@@ -45,6 +47,9 @@ export default async (client, userOpts) => {
accountPayload.externalAccountBinding = opts.externalAccountBinding; accountPayload.externalAccountBinding = opts.externalAccountBinding;
} }
const log = (...args)=>{
return client.logger.info(...args);
}
/** /**
* Register account * Register account
*/ */
@@ -63,7 +68,7 @@ export default async (client, userOpts) => {
* Parse domains from CSR * Parse domains from CSR
*/ */
log("[auto] Parsing domains from Certificate Signing Request "); log("[auto] Parsing domains from Certificate Signing Request");
const { commonName, altNames } = readCsrDomains(opts.csr); const { commonName, altNames } = readCsrDomains(opts.csr);
const uniqueDomains = Array.from(new Set([commonName].concat(altNames).filter((d) => d))); const uniqueDomains = Array.from(new Set([commonName].concat(altNames).filter((d) => d)));
@@ -74,9 +79,21 @@ export default async (client, userOpts) => {
*/ */
log("[auto] Placing new certificate order with ACME provider"); log("[auto] Placing new certificate order with ACME provider");
const orderPayload = { identifiers: uniqueDomains.map((d) => ({ type: "dns", value: d })) };
if (opts.profile && client.sslProvider === 'letsencrypt' ){ let hasIp = false
const orderPayload = { identifiers: uniqueDomains.map((d) =>{
// 判断是否为IPv4或v6否则按域名处理
const type = domainUtils.isIp(d) ? 'ip' : 'dns';
if(type === 'ip'){
hasIp = true
}
return { type, value: d }
}) };
if (opts.profile && client.sslProvider.startsWith("letsencrypt") ){
orderPayload.profile = opts.profile; orderPayload.profile = opts.profile;
if(hasIp){
orderPayload.profile = "shortlived"
}
} }
const order = await client.createOrder(orderPayload); const order = await client.createOrder(orderPayload);
const authorizations = await client.getAuthorizations(order); const authorizations = await client.getAuthorizations(order);
@@ -255,7 +272,7 @@ export default async (client, userOpts) => {
await wait(waitDnsDiffuseTime * 1000) await wait(waitDnsDiffuseTime * 1000)
} }
log("开始向提供商请求挑战验证"); log("开始向提供商请求检查验证");
await runPromisePa(completeChallengeTasks, 1000); await runPromisePa(completeChallengeTasks, 1000);
} catch (e) { } catch (e) {
log(`证书申请失败${e.message}`); log(`证书申请失败${e.message}`);

View File

@@ -3,9 +3,9 @@
*/ */
import axios from 'axios'; import axios from 'axios';
import { parseRetryAfterHeader } from './util.js'; import { parseRetryAfterHeader } from './util.js';
import { log } from './logger.js';
const { AxiosError } = axios; const { AxiosError } = axios;
import {getGlobalAgents, HttpError} from '@certd/basic' import {getGlobalAgents, HttpError} from '@certd/basic'
import { log } from './logger.js';
/** /**
* Defaults * Defaults
*/ */

View File

@@ -5,10 +5,9 @@
*/ */
import { createHash } from 'crypto'; import { createHash } from 'crypto';
import { getPemBodyAsB64u } from './crypto/index.js'; import { getPemBodyAsB64u } from './crypto/index.js';
import { log } from './logger.js';
import HttpClient from './http.js'; import HttpClient from './http.js';
import AcmeApi from './api.js'; import AcmeApi from './api.js';
import verify from './verify.js'; import {createChallengeFn} from './verify.js';
import * as util from './util.js'; import * as util from './util.js';
import auto from './auto.js'; import auto from './auto.js';
import { CancelError } from './error.js'; import { CancelError } from './error.js';
@@ -104,8 +103,13 @@ class AcmeClient {
max: this.opts.backoffMax, max: this.opts.backoffMax,
}; };
this.http = new HttpClient(this.opts.directoryUrl, this.opts.accountKey, this.opts.externalAccountBinding, this.opts.urlMapping); this.http = new HttpClient(this.opts.directoryUrl, this.opts.accountKey, this.opts.externalAccountBinding, this.opts.urlMapping, opts.logger);
this.api = new AcmeApi(this.http, this.opts.accountUrl); this.api = new AcmeApi(this.http, this.opts.accountUrl);
this.logger = opts.logger;
}
log(...args) {
this.logger.info(...args);
} }
/** /**
@@ -177,7 +181,7 @@ class AcmeClient {
this.getAccountUrl(); this.getAccountUrl();
/* Account URL exists */ /* Account URL exists */
log('Account URL exists, returning updateAccount()'); this.log('Account URL exists, returning updateAccount()');
return this.updateAccount(data); return this.updateAccount(data);
} }
catch (e) { catch (e) {
@@ -185,7 +189,7 @@ class AcmeClient {
/* HTTP 200: Account exists */ /* HTTP 200: Account exists */
if (resp.status === 200) { if (resp.status === 200) {
log('Account already exists (HTTP 200), returning updateAccount()'); this.log('Account already exists (HTTP 200), returning updateAccount()');
return this.updateAccount(data); return this.updateAccount(data);
} }
@@ -214,7 +218,7 @@ class AcmeClient {
this.api.getAccountUrl(); this.api.getAccountUrl();
} }
catch (e) { catch (e) {
log('No account URL found, returning createAccount()'); this.log('No account URL found, returning createAccount()');
return this.createAccount(data); return this.createAccount(data);
} }
@@ -488,6 +492,9 @@ class AcmeClient {
throw new Error('Unable to verify ACME challenge, URL not found'); throw new Error('Unable to verify ACME challenge, URL not found');
} }
const {challenges} = createChallengeFn({logger:this.logger});
const verify = challenges
if (typeof verify[challenge.type] === 'undefined') { if (typeof verify[challenge.type] === 'undefined') {
throw new Error(`Unable to verify ACME challenge, unknown type: ${challenge.type}`); throw new Error(`Unable to verify ACME challenge, unknown type: ${challenge.type}`);
} }
@@ -502,8 +509,13 @@ class AcmeClient {
await verify[challenge.type](authz, challenge, keyAuthorization); await verify[challenge.type](authz, challenge, keyAuthorization);
}; };
log('Waiting for ACME challenge verification等待ACME挑战验证)'); this.log('Waiting for ACME challenge verification等待ACME检查验证)');
return util.retry(verifyFn, this.backoffOpts);
const log = (...args)=>{
this.logger.info(...args)
}
return util.retry(verifyFn, this.backoffOpts,log);
} }
/** /**
@@ -570,7 +582,7 @@ class AcmeClient {
const resp = await this.api.apiRequest(item.url, null, [200]); const resp = await this.api.apiRequest(item.url, null, [200]);
/* Verify status */ /* Verify status */
log(`[${d}] Item has status挑战状态): ${resp.data.status}`); this.log(`[${d}] Item has status检查状态): ${resp.data.status}`);
if (invalidStates.includes(resp.data.status)) { if (invalidStates.includes(resp.data.status)) {
abort(); abort();
@@ -586,7 +598,7 @@ class AcmeClient {
throw new Error(`[${d}] Unexpected item status: ${resp.data.status}`); throw new Error(`[${d}] Unexpected item status: ${resp.data.status}`);
}; };
log(`[${d}] Waiting for valid status 等待valid状态: ${item.url}`, this.backoffOpts); this.log(`[${d}] Waiting for valid status 等待valid状态: ${item.url}`, this.backoffOpts);
return util.retry(verifyFn, this.backoffOpts); return util.retry(verifyFn, this.backoffOpts);
} }

View File

@@ -19,7 +19,7 @@ import { getJwk } from './crypto/index.js';
*/ */
class HttpClient { class HttpClient {
constructor(directoryUrl, accountKey, externalAccountBinding = {}, urlMapping = {}) { constructor(directoryUrl, accountKey, externalAccountBinding = {}, urlMapping = {},logger) {
this.directoryUrl = directoryUrl; this.directoryUrl = directoryUrl;
this.accountKey = accountKey; this.accountKey = accountKey;
this.externalAccountBinding = externalAccountBinding; this.externalAccountBinding = externalAccountBinding;
@@ -31,6 +31,7 @@ class HttpClient {
this.directoryMaxAge = 86400; this.directoryMaxAge = 86400;
this.directoryTimestamp = 0; this.directoryTimestamp = 0;
this.urlMapping = urlMapping; this.urlMapping = urlMapping;
this.log = logger? logger.info.bind(logger) : log;
} }
/** /**
@@ -48,7 +49,7 @@ class HttpClient {
for (const key in this.urlMapping.mappings) { for (const key in this.urlMapping.mappings) {
if (url.includes(key)) { if (url.includes(key)) {
const newUrl = url.replace(key, this.urlMapping.mappings[key]); const newUrl = url.replace(key, this.urlMapping.mappings[key]);
log(`use reverse proxy: ${newUrl}`); this.log(`use reverse proxy: ${newUrl}`);
url = newUrl; url = newUrl;
} }
} }
@@ -65,10 +66,10 @@ class HttpClient {
opts.headers['Content-Type'] = 'application/jose+json'; opts.headers['Content-Type'] = 'application/jose+json';
/* Request */ /* Request */
log(`HTTP request: ${method} ${url}`); this.log(`HTTP request: ${method} ${url}`);
const resp = await axios.request(opts); const resp = await axios.request(opts);
log(`RESP ${resp.status} ${method} ${url}`); this.log(`RESP ${resp.status} ${method} ${url}`);
return resp; return resp;
} }
@@ -85,7 +86,7 @@ class HttpClient {
const age = (now - this.directoryTimestamp); const age = (now - this.directoryTimestamp);
if (!this.directoryCache || (age > this.directoryMaxAge)) { if (!this.directoryCache || (age > this.directoryMaxAge)) {
log(`Refreshing ACME directory, age: ${age}`); this.log(`Refreshing ACME directory, age: ${age}`);
const resp = await this.request(this.directoryUrl, 'get'); const resp = await this.request(this.directoryUrl, 'get');
if (resp.status >= 400) { if (resp.status >= 400) {
@@ -187,7 +188,7 @@ class HttpClient {
/* Nonce */ /* Nonce */
if (nonce) { if (nonce) {
log(`Using nonce: ${nonce}`); this.log(`Using nonce: ${nonce}`);
header.nonce = nonce; header.nonce = nonce;
} }
@@ -314,7 +315,7 @@ class HttpClient {
nonce = resp.headers['replay-nonce'] || null; nonce = resp.headers['replay-nonce'] || null;
attempts += 1; attempts += 1;
log(`Caught invalid nonce error, retrying (${attempts}/${this.maxBadNonceRetries}) signed request to: ${url}`); this.log(`Caught invalid nonce error, retrying (${attempts}/${this.maxBadNonceRetries}) signed request to: ${url}`);
return this.signedRequest(url, payload, { kid, nonce, includeExternalAccountBinding }, attempts); return this.signedRequest(url, payload, { kid, nonce, includeExternalAccountBinding }, attempts);
} }

View File

@@ -21,6 +21,9 @@ export const directory = {
staging: 'https://acme-staging-v02.api.letsencrypt.org/directory', staging: 'https://acme-staging-v02.api.letsencrypt.org/directory',
production: 'https://acme-v02.api.letsencrypt.org/directory', production: 'https://acme-v02.api.letsencrypt.org/directory',
}, },
letsencrypt_staging: {
production: 'https://acme-staging-v02.api.letsencrypt.org/directory',
},
zerossl: { zerossl: {
staging: 'https://acme.zerossl.com/v2/DV90', staging: 'https://acme.zerossl.com/v2/DV90',
production: 'https://acme.zerossl.com/v2/DV90', production: 'https://acme.zerossl.com/v2/DV90',
@@ -28,9 +31,32 @@ export const directory = {
sslcom:{ sslcom:{
staging: 'https://acme.ssl.com/sslcom-dv-rsa', staging: 'https://acme.ssl.com/sslcom-dv-rsa',
production: 'https://acme.ssl.com/sslcom-dv-rsa', production: 'https://acme.ssl.com/sslcom-dv-rsa',
} ec: 'https://acme.ssl.com/sslcom-dv-ecc',
},
litessl: {
staging: 'https://acme.litessl.com/acme/v2/directory',
production: 'https://acme.litessl.com/acme/v2/directory',
},
}; };
export function getDirectoryUrl(opts) {
const {sslProvider, pkType} = opts
const list= directory[sslProvider]
if (!list) {
throw new Error(`sslProvider ${sslProvider} not found`)
}
let pkTypePrefix = pkType || 'rsa'
if (pkType) {
pkTypePrefix = pkType.toLowerCase().split("_")[0]
}
if (pkTypePrefix && list[pkTypePrefix]) {
return list[pkTypePrefix]
}
return list.production
}
/** /**
* Crypto * Crypto
*/ */

View File

@@ -48,7 +48,7 @@ class Backoff {
* @returns {Promise} * @returns {Promise}
*/ */
async function retryPromise(fn, attempts, backoff) { async function retryPromise(fn, attempts, backoff, logger = log) {
let aborted = false; let aborted = false;
try { try {
@@ -60,12 +60,12 @@ async function retryPromise(fn, attempts, backoff) {
throw e; throw e;
} }
log(`Promise rejected: ${e.message}`); logger(`Promise rejected: ${e.message}`);
const duration = backoff.duration(); const duration = backoff.duration();
log(`Promise rejected attempt #${backoff.attempts}, ${duration}ms 后重试: ${e.message}`); logger(`Promise rejected attempt #${backoff.attempts}, ${duration}ms 后重试: ${e.message}`);
await new Promise((resolve) => { setTimeout(resolve, duration); }); await new Promise((resolve) => { setTimeout(resolve, duration); });
return retryPromise(fn, attempts, backoff); return retryPromise(fn, attempts, backoff, logger);
} }
} }
@@ -80,9 +80,9 @@ async function retryPromise(fn, attempts, backoff) {
* @returns {Promise} * @returns {Promise}
*/ */
function retry(fn, { attempts = 5, min = 5000, max = 30000 } = {}) { function retry(fn, { attempts = 5, min = 5000, max = 30000 } = {}, logger = log) {
const backoff = new Backoff({ min, max }); const backoff = new Backoff({ min, max });
return retryPromise(fn, attempts, backoff); return retryPromise(fn, attempts, backoff, logger);
} }
/** /**
@@ -216,21 +216,21 @@ function formatResponseError(resp) {
* @returns {Promise<string>} Root domain name * @returns {Promise<string>} Root domain name
*/ */
async function resolveDomainBySoaRecord(recordName) { async function resolveDomainBySoaRecord(recordName, logger = log) {
try { try {
await dns.resolveSoa(recordName); await dns.resolveSoa(recordName);
log(`找到${recordName}的SOA记录`); logger(`找到${recordName}的SOA记录`);
return recordName; return recordName;
} }
catch (e) { catch (e) {
log(`找不到${recordName}的SOA记录,继续往主域名查找`); logger(`找不到${recordName}的SOA记录,继续往主域名查找`);
const parentRecordName = recordName.split('.').slice(1).join('.'); const parentRecordName = recordName.split('.').slice(1).join('.');
if (!parentRecordName.includes('.')) { if (!parentRecordName.includes('.')) {
throw new Error('SOA record查找失败'); throw new Error('SOA record查找失败');
} }
return resolveDomainBySoaRecord(parentRecordName); return resolveDomainBySoaRecord(parentRecordName,logger);
} }
} }
@@ -241,18 +241,18 @@ async function resolveDomainBySoaRecord(recordName) {
* @returns {Promise<dns.Resolver>} DNS resolver * @returns {Promise<dns.Resolver>} DNS resolver
*/ */
async function getAuthoritativeDnsResolver(recordName) { async function getAuthoritativeDnsResolver(recordName, logger = log) {
log(`获取域名${recordName}的权威NS服务器: `); logger(`获取域名${recordName}的权威NS服务器: `);
const resolver = new dns.Resolver(); const resolver = new dns.Resolver();
try { try {
/* Resolve root domain by SOA */ /* Resolve root domain by SOA */
const domain = await resolveDomainBySoaRecord(recordName); const domain = await resolveDomainBySoaRecord(recordName,logger);
/* Resolve authoritative NS addresses */ /* Resolve authoritative NS addresses */
log(`获取到权威NS服务器name: ${domain}`); logger(`获取到权威NS服务器name: ${domain}`);
const nsRecords = await dns.resolveNs(domain); const nsRecords = await dns.resolveNs(domain);
log(`域名权威NS服务器${nsRecords}`); logger(`域名权威NS服务器${nsRecords}`);
const nsAddrArray = await Promise.all(nsRecords.map(async (r) => dns.resolve4(r))); const nsAddrArray = await Promise.all(nsRecords.map(async (r) => dns.resolve4(r)));
const nsAddresses = [].concat(...nsAddrArray).filter((a) => a); const nsAddresses = [].concat(...nsAddrArray).filter((a) => a);
@@ -261,16 +261,16 @@ async function getAuthoritativeDnsResolver(recordName) {
} }
/* Authoritative NS success */ /* Authoritative NS success */
log(`Found ${nsAddresses.length} authoritative NS addresses for domain: ${domain}`); logger(`Found ${nsAddresses.length} authoritative NS addresses for domain: ${domain}`);
resolver.setServers(nsAddresses); resolver.setServers(nsAddresses);
} }
catch (e) { catch (e) {
log(`Authoritative NS lookup error获取权威NS服务器地址失败: ${e.message}`); logger(`Authoritative NS lookup error获取权威NS服务器地址失败: ${e.message}`);
} }
/* Return resolver */ /* Return resolver */
const addresses = resolver.getServers(); const addresses = resolver.getServers();
log(`DNS resolver addresses域名的权威NS服务器地址: ${addresses.join(', ')}`); logger(`DNS resolver addresses域名的权威NS服务器地址: ${addresses.join(', ')}`);
return resolver; return resolver;
} }

View File

@@ -4,14 +4,22 @@
import dnsSdk from "dns" import dnsSdk from "dns"
import https from 'https' import https from 'https'
import {log} from './logger.js' import {log as defaultLog} from './logger.js'
import axios from './axios.js' import axios from './axios.js'
import * as util from './util.js' import * as util from './util.js'
import {isAlpnCertificateAuthorizationValid} from './crypto/index.js' import {isAlpnCertificateAuthorizationValid} from './crypto/index.js'
import {utils} from '@certd/basic'
const dns = dnsSdk.promises const dns = dnsSdk.promises
/**
export function createChallengeFn(opts = {}){
const logger = opts?.logger || {info:defaultLog,error:defaultLog,warn:defaultLog,debug:defaultLog}
const log = function(...args){
logger.info(...args)
}
/**
* Verify ACME HTTP challenge * Verify ACME HTTP challenge
* *
* https://datatracker.ietf.org/doc/html/rfc8555#section-8.3 * https://datatracker.ietf.org/doc/html/rfc8555#section-8.3
@@ -52,11 +60,15 @@ async function verifyHttpChallenge(authz, challenge, keyAuthorization, suffix =
} }
const httpPort = axios.defaults.acmeSettings.httpChallengePort || 80; const httpPort = axios.defaults.acmeSettings.httpChallengePort || 80;
const challengeUrl = `http://${authz.identifier.value}:${httpPort}${suffix}`; let host = authz.identifier.value;
if(utils.domain.isIpv6(host)){
host = `[${host}]`;
}
const challengeUrl = `http://${host}:${httpPort}${suffix}`;
if (!await doQuery(challengeUrl)) { if (!await doQuery(challengeUrl)) {
const httpsPort = axios.defaults.acmeSettings.httpsChallengePort || 443; const httpsPort = axios.defaults.acmeSettings.httpsChallengePort || 443;
const httpsChallengeUrl = `https://${authz.identifier.value}:${httpsPort}${suffix}`; const httpsChallengeUrl = `https://${host}:${httpsPort}${suffix}`;
const res = await doQuery(httpsChallengeUrl) const res = await doQuery(httpsChallengeUrl)
if (!res) { if (!res) {
throw new Error(`[error] 验证失败请检查以上测试url是否可以正常访问`); throw new Error(`[error] 验证失败请检查以上测试url是否可以正常访问`);
@@ -112,7 +124,7 @@ async function walkDnsChallengeRecord(recordName, resolver = dns,deep = 0) {
return records return records
} }
export async function walkTxtRecord(recordName,deep = 0) { async function walkTxtRecord(recordName,deep = 0) {
if(deep >5){ if(deep >5){
log(`walkTxtRecord too deep (#${deep}) , skip walk`) log(`walkTxtRecord too deep (#${deep}) , skip walk`)
return [] return []
@@ -136,7 +148,7 @@ export async function walkTxtRecord(recordName,deep = 0) {
try{ try{
/* Authoritative DNS resolver */ /* Authoritative DNS resolver */
log(`从域名权威服务器获取TXT解析记录`); log(`从域名权威服务器获取TXT解析记录`);
const authoritativeResolver = await util.getAuthoritativeDnsResolver(recordName); const authoritativeResolver = await util.getAuthoritativeDnsResolver(recordName,log);
const res = await walkDnsChallengeRecord(recordName, authoritativeResolver,deep); const res = await walkDnsChallengeRecord(recordName, authoritativeResolver,deep);
if (res && res.length > 0) { if (res && res.length > 0) {
for (const item of res) { for (const item of res) {
@@ -173,7 +185,8 @@ async function verifyDnsChallenge(authz, challenge, keyAuthorization, prefix = '
recordValues = [...new Set(recordValues)]; recordValues = [...new Set(recordValues)];
log(`DNS查询成功, 找到 ${recordValues.length} 条TXT记录${recordValues}`); log(`DNS查询成功, 找到 ${recordValues.length} 条TXT记录${recordValues}`);
if (!recordValues.length || !recordValues.includes(keyAuthorization)) { if (!recordValues.length || !recordValues.includes(keyAuthorization)) {
throw new Error(`没有找到需要的DNS TXT记录: ${recordName},期望:${keyAuthorization},结果:${recordValues}`); const err = `没有找到需要的DNS TXT记录: ${recordName},期望:${keyAuthorization},结果:${recordValues}`
throw new Error(err);
} }
log(`关键授权匹配成功(${challenge.type}/${recordName}:${keyAuthorization},校验成功, ACME challenge verified`); log(`关键授权匹配成功(${challenge.type}/${recordName}:${keyAuthorization},校验成功, ACME challenge verified`);
@@ -207,12 +220,13 @@ async function verifyTlsAlpnChallenge(authz, challenge, keyAuthorization) {
return true; return true;
} }
/** return {
* Export API challenges:{
*/ 'http-01': verifyHttpChallenge,
'dns-01': verifyDnsChallenge,
'tls-alpn-01': verifyTlsAlpnChallenge,
},
walkTxtRecord,
}
export default { }
'http-01': verifyHttpChallenge,
'dns-01': verifyDnsChallenge,
'tls-alpn-01': verifyTlsAlpnChallenge,
};

View File

@@ -49,6 +49,7 @@ export interface ClientOptions {
backoffMax?: number; backoffMax?: number;
urlMapping?: UrlMapping; urlMapping?: UrlMapping;
signal?: AbortSignal; signal?: AbortSignal;
logger?:any
} }
export interface ClientExternalAccountBindingOptions { export interface ClientExternalAccountBindingOptions {
@@ -107,12 +108,17 @@ export const directory: {
staging: string, staging: string,
production: string production: string
}, },
letsencrypt_staging: {
production: string
},
zerossl: { zerossl: {
staging: string, staging: string,
production: string production: string
} }
}; };
export function getDirectoryUrl(opts:{sslProvider:string, pkType: string}): string;
/** /**
* Crypto * Crypto
*/ */
@@ -203,7 +209,8 @@ export const agents: any;
export function setLogger(fn: (message: any, ...args: any[]) => void): void; export function setLogger(fn: (message: any, ...args: any[]) => void): void;
export function walkTxtRecord(record: any): Promise<string[]>; export function createChallengeFn(opts?: {logger?:any}): any;
// export function walkTxtRecord(record: any): Promise<string[]>;
export function getAuthoritativeDnsResolver(record:string): Promise<any>; export function getAuthoritativeDnsResolver(record:string): Promise<any>;
export const CancelError: typeof CancelError; export const CancelError: typeof CancelError;

View File

@@ -26,3 +26,4 @@ dist-ssr
test/user.secret.* test/user.secret.*
test/**/*.js test/**/*.js
src/**/*.spec.ts src/**/*.spec.ts
test.mjs

View File

@@ -3,6 +3,92 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [1.38.1](https://github.com/certd/certd/compare/v1.38.0...v1.38.1) (2026-01-15)
**Note:** Version bump only for package @certd/basic
# [1.38.0](https://github.com/certd/certd/compare/v1.37.17...v1.38.0) (2026-01-13)
**Note:** Version bump only for package @certd/basic
## [1.37.17](https://github.com/certd/certd/compare/v1.37.16...v1.37.17) (2025-12-29)
**Note:** Version bump only for package @certd/basic
## [1.37.16](https://github.com/certd/certd/compare/v1.37.15...v1.37.16) (2025-12-15)
### Bug Fixes
* 修复ipv6作为证书域名申请证书校验失败的bug ([e4e16bc](https://github.com/certd/certd/commit/e4e16bc6a65bb082c18ca0590226f0987a47d477))
## [1.37.15](https://github.com/certd/certd/compare/v1.37.14...v1.37.15) (2025-12-06)
**Note:** Version bump only for package @certd/basic
## [1.37.14](https://github.com/certd/certd/compare/v1.37.13...v1.37.14) (2025-12-02)
**Note:** Version bump only for package @certd/basic
## [1.37.13](https://github.com/certd/certd/compare/v1.37.12...v1.37.13) (2025-12-02)
**Note:** Version bump only for package @certd/basic
## [1.37.12](https://github.com/certd/certd/compare/v1.37.11...v1.37.12) (2025-11-29)
**Note:** Version bump only for package @certd/basic
## [1.37.11](https://github.com/certd/certd/compare/v1.37.10...v1.37.11) (2025-11-28)
### Performance Improvements
* 优化宝塔网站证书在并发部署时导致nginx配置文件错乱的问题 ([51cc084](https://github.com/certd/certd/commit/51cc08411fd2dbab66d769b495dc1b0bf2f2578c))
* 优化天翼云cdn 等待5秒部署完成 ([53c88ad](https://github.com/certd/certd/commit/53c88ad5afe66a3f7c38b9b759747918913a4edc))
* ssl.com支持ecc ([b5ec047](https://github.com/certd/certd/commit/b5ec04723db48422f71041f4043002e7f5b450b1))
## [1.37.10](https://github.com/certd/certd/compare/v1.37.9...v1.37.10) (2025-11-19)
**Note:** Version bump only for package @certd/basic
## [1.37.9](https://github.com/certd/certd/compare/v1.37.8...v1.37.9) (2025-11-19)
**Note:** Version bump only for package @certd/basic
## [1.37.8](https://github.com/certd/certd/compare/v1.37.7...v1.37.8) (2025-11-17)
**Note:** Version bump only for package @certd/basic
## [1.37.7](https://github.com/certd/certd/compare/v1.37.6...v1.37.7) (2025-11-12)
### Performance Improvements
* 支持使用letencrypt测试环境申请ip证书 ([86ce00a](https://github.com/certd/certd/commit/86ce00adf92ff98fead87a3eaaa6631036708f47))
## [1.37.6](https://github.com/certd/certd/compare/v1.37.5...v1.37.6) (2025-11-10)
**Note:** Version bump only for package @certd/basic
## [1.37.5](https://github.com/certd/certd/compare/v1.37.4...v1.37.5) (2025-11-08)
**Note:** Version bump only for package @certd/basic
## [1.37.4](https://github.com/certd/certd/compare/v1.37.3...v1.37.4) (2025-10-28)
**Note:** Version bump only for package @certd/basic
## [1.37.3](https://github.com/certd/certd/compare/v1.37.2...v1.37.3) (2025-10-24)
**Note:** Version bump only for package @certd/basic
## [1.37.2](https://github.com/certd/certd/compare/v1.37.1...v1.37.2) (2025-10-14)
### Performance Improvements
* 支持网络测试 ([2bef608](https://github.com/certd/certd/commit/2bef608e07ceb56d52007f290667e0afef401b22))
## [1.37.1](https://github.com/certd/certd/compare/v1.37.0...v1.37.1) (2025-09-29)
**Note:** Version bump only for package @certd/basic
# [1.37.0](https://github.com/certd/certd/compare/v1.36.25...v1.37.0) (2025-09-28) # [1.37.0](https://github.com/certd/certd/compare/v1.36.25...v1.37.0) (2025-09-28)
**Note:** Version bump only for package @certd/basic **Note:** Version bump only for package @certd/basic

View File

@@ -1 +1 @@
12:14 00:55

View File

@@ -1,7 +1,7 @@
{ {
"name": "@certd/basic", "name": "@certd/basic",
"private": false, "private": false,
"version": "1.37.0", "version": "1.38.1",
"type": "module", "type": "module",
"main": "./dist/index.js", "main": "./dist/index.js",
"module": "./dist/index.js", "module": "./dist/index.js",
@@ -13,10 +13,12 @@
"dev-build": "npm run build", "dev-build": "npm run build",
"preview": "vite preview", "preview": "vite preview",
"test": "mocha --loader=ts-node/esm", "test": "mocha --loader=ts-node/esm",
"pub": "npm publish" "pub": "npm publish",
"compile": "tsc --skipLibCheck --watch"
}, },
"dependencies": { "dependencies": {
"axios": "^1.7.2", "async-lock": "^1.4.1",
"axios": "^1.9.0",
"dayjs": "^1.11.7", "dayjs": "^1.11.7",
"http-proxy-agent": "^7.0.2", "http-proxy-agent": "^7.0.2",
"https-proxy-agent": "^7.0.5", "https-proxy-agent": "^7.0.5",
@@ -45,5 +47,5 @@
"tslib": "^2.8.1", "tslib": "^2.8.1",
"typescript": "^5.4.2" "typescript": "^5.4.2"
}, },
"gitHead": "6b43007c44e1b8ccdb87081b0cf3f99fc2c09d53" "gitHead": "2c80c35b21b3f435e835167fca13db510bbc38a2"
} }

View File

@@ -1,2 +1 @@
export * from './utils/index.js'; export * from "./utils/index.js";
export * from './utils/util.id.js';

View File

@@ -37,6 +37,9 @@ import { mitter } from "./util.mitter.js";
import * as request from "./util.request.js"; import * as request from "./util.request.js";
export * from "./util.cache.js"; export * from "./util.cache.js";
export * from "./util.id.js";
export const utils = { export const utils = {
sleep, sleep,
http, http,

View File

@@ -7,29 +7,29 @@ function match(targetDomains: string | string[], inDomains: string[]) {
return false; return false;
} }
if (typeof targetDomains === 'string') { if (typeof targetDomains === "string") {
targetDomains = [targetDomains]; targetDomains = [targetDomains];
} }
for (let targetDomain of targetDomains) { for (let targetDomain of targetDomains) {
let matched = false; let matched = false;
if (targetDomain.startsWith('.')) { if (targetDomain.startsWith(".")) {
targetDomain = '*' + targetDomain; targetDomain = "*" + targetDomain;
} }
for (let inDomain of inDomains) { for (let inDomain of inDomains) {
if (inDomain.startsWith('.')) { if (inDomain.startsWith(".")) {
inDomain = '*' + inDomain; inDomain = "*" + inDomain;
} }
if (targetDomain === inDomain) { if (targetDomain === inDomain) {
matched = true; matched = true;
break; break;
} }
if (!inDomain.startsWith('*.')) { if (!inDomain.startsWith("*.")) {
//不可能匹配 //不可能匹配
continue; continue;
} }
//子域名匹配通配符即可 //子域名匹配通配符即可
const firstDotIndex = targetDomain.indexOf('.'); const firstDotIndex = targetDomain.indexOf(".");
const targetDomainSuffix = targetDomain.substring(firstDotIndex + 1); const targetDomainSuffix = targetDomain.substring(firstDotIndex + 1);
if (targetDomainSuffix === inDomain.substring(2)) { if (targetDomainSuffix === inDomain.substring(2)) {
matched = true; matched = true;
@@ -46,6 +46,32 @@ function match(targetDomains: string | string[], inDomains: string[]) {
return true; return true;
} }
function isIpv4(d: string) {
if (!d) {
return false;
}
const isIPv4Regex = /^(\d{1,3}\.){3}\d{1,3}$/;
return isIPv4Regex.test(d);
}
function isIpv6(d: string) {
if (!d) {
return false;
}
const isIPv6Regex = /^([0-9A-Fa-f]{0,4}:){2,7}([0-9A-Fa-f]{1,4}$|((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\.|$)){4})$/gm;
return isIPv6Regex.test(d);
}
function isIp(d: string) {
if (!d) {
return false;
}
return isIpv4(d) || isIpv6(d);
}
export const domainUtils = { export const domainUtils = {
match, match,
isIpv4,
isIpv6,
isIp,
}; };

View File

@@ -1,4 +1,4 @@
export function isDev() { export function isDev() {
const nodeEnv = process.env.NODE_ENV || ''; const nodeEnv = process.env.NODE_ENV || 'dev';
return nodeEnv === 'development' || nodeEnv.includes('local') || nodeEnv.startsWith('dev'); return nodeEnv === 'development' || nodeEnv.includes('local') || nodeEnv.startsWith('dev');
} }

View File

@@ -11,6 +11,10 @@ function hmacSha256(data: string, digest: BinaryToTextEncoding = "base64") {
return crypto.createHmac("sha256", data).update(Buffer.alloc(0)).digest(digest); return crypto.createHmac("sha256", data).update(Buffer.alloc(0)).digest(digest);
} }
function hmacSha256WithKey(key: string, data: string, digest: BinaryToTextEncoding = "base64") {
return crypto.createHmac("sha256", key).update(data).digest(digest);
}
function base64(data: string) { function base64(data: string) {
return Buffer.from(data).toString("base64"); return Buffer.from(data).toString("base64");
} }
@@ -39,4 +43,5 @@ export const hashUtils = {
toHex, toHex,
hexToStr, hexToStr,
hexToNumber, hexToNumber,
hmacSha256WithKey,
}; };

View File

@@ -1,46 +1,16 @@
import { logger, utils } from './index.js'; // @ts-ignore
import AsyncLock from "async-lock";
export class Locker { export class Locker {
locked: Record<string, any> = {}; private asyncLocker: AsyncLock;
async execute(lockStr: string, callback: any) { constructor() {
await this.lock(lockStr); this.asyncLocker = new AsyncLock();
const timeoutId = setTimeout(() => {
logger.warn('Lock timeout,自动解锁', lockStr);
this.unlock(lockStr);
}, 20000);
try {
return await callback();
} finally {
clearTimeout(timeoutId);
this.unlock(lockStr);
}
} }
async lock(str: string) { async execute(lockStr: string, callback: any, options?: { timeout?: number }) {
const isLocked = this.isLocked(str); const timeout = options?.timeout ?? 120000;
if (isLocked) { return this.asyncLocker.acquire(lockStr, callback, { timeout });
let count = 0;
while (true) {
await utils.sleep(100);
if (!this.isLocked(str)) {
break;
}
count++;
if (count > 20) {
throw new Error('Lock timeout');
}
}
}
this.locked[str] = true;
}
unlock(str: string) {
delete this.locked[str];
}
isLocked(str: string) {
return this.locked[str] ?? false;
} }
} }

Some files were not shown because too many files have changed in this diff Show More