appname                    = CertDock
version                    = 0.1.84
display_name               = 证书管理
desc                       = 证书全生命周期管理：ACME 与本地 CA 签发、自动续期、部署、到期提醒与云端证书同步。
source                     = thirdparty
platform                   = arm
maintainer                 = fuqing_sun
maintainer_url             = 
distributor                = fuqing_sun
os_min_version             = 1.1.3100
desktop_uidir              = ui
desktop_applaunchname      = CertDock.Application
ctl_stop                   = true
checkport                  = false
disable_authorization_path = false
# 12(.pfx) / JKS；PEM 四文件恒含），证书列表「下载」同步支持（下载对话框选附加格式，接口 POST /api/certs/{id}/download 可选请求体 formats）；**导出物私钥一律明文**——本地托管产物与下载 zip 的 key.pem/key.der 不再随证书口令加密（此前设了口令的证书导出 ENCRYPTED 私钥，nginx/宝塔 等无法直接加载；口令仍保护应用内存储），NeedsPlainKey 契约扩展至本地托管；PFX/JKS 用 go-pkcs12（Modern：PBES2/AES-256-CBC/SHA-256）与 keystore-go 编码，容器口令 = 证书私钥口令（未设口令时 changeit），新增依赖均为宽松许可并已入「开源许可」清单；权限：私钥类文件与 zip 0600、导出根目录修正为 0755（此前被 umask 压成 0700 导致共享不可达）；证书无私钥时选附加格式报 cert.export.key_missing；节点校验新增 pack/formats 三码；共新增 6 个错误码三语同步、3 条旧文案中性化；0.1.56：改名与分发合规——应用技术名 Certds → CertDock（安装目录 @appdata/CertDock、网关路径 /app/CertDock、包名 CertDock-<架构>-<版本>、包内二进制 certdock-server、数据库 certdock.db、前端存储键 certdock.*；中文显示名保持「证书管理」；旧版 DNS 遗留标识 certds-check / _certds.challenge 保持原值以兼容清理）；改为 MIT 许可（仓库根新增 LICENSE，随包附带 fpk/app/LICENSE）；新增第三方组件许可与致谢清单（tools/gen-notices.sh 生成：go list -deps + pnpm licenses，含 modernc 静态链接的 SQLite/musl 声明；仓库根、随包 fpk/app/THIRD-PARTY-NOTICES.md、帮助中心新增第五标签「开源许可」三处一致）；「关于本软件」新增免责声明并改为免费分发措辞；CA 服务条款不再代替用户同意——系统设置新增「安全与协议」勾选（ca_tos_agreed，服务端存、可审计），未同意时签发/续期/测试连接在发起网络请求前被拦（新错误码 acme.tos_not_agreed 三语）；升级后既有 ACME 流水线需先在设置页勾选才能继续签发/续期；帮助中心分区由四改五、导航与文档同步改名；0.1.55：帮助中心——左侧导航新增顶级页「帮助中心」（功能文档 / API 文档 / 关于本软件 / 版本历史 四标签）；内容内置离线可用、复用公告同一安全渲染管道（原始 HTML 丢弃、链接协议白名单、外链 noopener）；版本信息（版本 / 构建时间 / Go 运行时）与版本历史由构建期快照生成——build.sh 新增 [2/9] 快照步骤（版本号 + changelog + 构建时间写入内嵌目录，源码树快照目录 gitignored；开发运行回退读取仓库 manifest）；新增 1 个错误码 api.help.disabled 三语同步；导航项与四标签三语；0.1.54：公告子系统——启动后自动从公告源拉取公告，有新公告时弹窗提醒（默认开启、设置页可关）；只显示发布时间已到当下的公告、按时间倒序取最新 5 条（未来公告到点才出现，老公告留源站留痕不进窗口）；公告源＝索引 JSON + 每条一个 Markdown 正文文件（默认源为本机 5550 端口测试站，可在设置改为实际地址）；内容按不可信处理——服务端安全渲染（新增 goldmark 依赖：原始 HTML 丢弃、链接仅 http/https/mailto、外链 noopener），仅 GET 无凭据、超时 5s、体积与条目上限、跨主机重定向与正文同主机校验，正文不落库不执行；已读状态存浏览器本地（新公告才弹）；设置页新增「公告」区（开关/源地址/立即检查两态）；新增 5 个错误码三语同步；帮助中心（0.1.55）复用同一渲染管道；0.1.53：阿里云扩展（收官批次）——新增 13 个部署类型（上传：阿里云 OSS；部署：阿里云 DCDN / ESA 站点证书 / ESA SaaS 证书 / GA / API 网关 / 函数计算 / 点播 / DDoS 高防 / NLB / ALB / CLB；清理：阿里云 DCDN 清除缓存）；证书确保机制（CAS 按「名称 + Sha2 指纹」匹配复用；CLB 走 SLB 自有证书库按名称复用、按设计取舍不写云端绑定）；按 SDK 接口面裁剪（WAF 3.0 官方 SDK 无证书接口故未提供阿里云 WAF 类型；ESA 模块无刷新接口故未提供 ESA 清除缓存）；接入 alibabacloud-go 各产品模块与 OSS SDK v2（假云端逐字测试）；各产品区域固定 cn-hangzhou；新增 10 个错误码三语同步；六批计划全部交付完成（0.1.48–0.1.53，新增部署类型合计 45 个，总数 61）；0.1.52：腾讯云扩展——新增 8 个部署类型（上传：腾讯云 COS；部署：腾讯云 ECDN / CLB / WAF / 云直播(CSS) / GAAP 证书部署与「腾讯云 SSL 批量部署」〔按资源类型 + 资源 ID 列表批量部署到云资源〕；功能：腾讯云主机〔云 API 自动化助手 TAT 下发脚本写入证书〕）；证书确保机制（按别名查 SSL 证书，命中原地更新内容复用证书 ID，不重复堆积）；接入官方 tencentcloud-sdk-go 各服务包与 COS SDK（假云端逐字测试；ECDN 写接口经 SDK 通用调用实现、标注待真机验证）；各产品区域固定 ap-guangzhou；新增 13 个错误码三语同步；0.1.51：Cloudflare + Google Cloud + 七牛云——新增 4 个部署类型（上传：Cloudflare 自定义证书〔zone 级〕、Google Cloud 证书管理器；部署：七牛云 CDN 证书部署；清理：七牛云 CDN 清除缓存）；授权管理新增三家云凭据（Cloudflare=API Token、Google=服务账号 JSON、七牛云=AK/SK，表单与校验按厂商切换）；云端证书列表/同步/删除过期证书支持三家（Cloudflare 遍历全部 zone、Google global 位置、七牛 SSL 证书服务）；DNS-01 授权下拉不出现三家；Cloudflare/七牛证书接口 REST 手写（官方 Go SDK 未提供；七牛沿用官方签名 SignRequestV2），Google 手写 RSA JWT 换令牌（不引入 google.golang.org/api）；三家均以假云端逐字断言；Cloudflare 自定义证书为付费能力、需真机实测；0.1.50：火山引擎全线——新增 8 个部署类型（上传：火山引擎证书中心、火山引擎 TOS 上传；部署：火山引擎 CDN / DCDN / CLB / ALB / WAF / API 网关证书部署）；授权管理云凭据新增火山引擎（AK/SK）；云端证书列表/同步/删除过期证书支持火山引擎证书中心；DNS-01 授权下拉按厂商能力过滤（火山引擎不出现）；接入官方火山引擎 SDK（certificateservice/cdn/dcdn/clb/alb/waf/apig）与 ve-tos SDK（假云端逐字测试；CDN 证书按 SHA-256 指纹查重、CLB/ALB 为查询参数形态）；各产品默认区域固定（证书中心/WAF cn-beijing，CDN/DCDN/CLB/ALB/API 网关 cn-north-1，TOS tos-cn-beijing.volces.com）、WAF/API 网关接口形态标注待真机验证；0.1.49：华为云全线——新增 8 个部署类型（上传：华为云 SCM 证书中心、华为云 OBS 上传；部署：华为云 CDN / ELB / WAF / AAD / API 网关证书部署；清理：华为云 CDN 清除缓存〔无清理方式参数，口径同阿里云〕）；授权管理云凭据新增华为云（AK/SK）；云端证书列表/同步/删除过期证书支持华为云 SCM；DNS-01 授权下拉按厂商能力过滤（华为云不出现，能力表经新端点 /api/auth/cloud-providers）；接入官方华为云 v3 SDK 与 OBS SDK（假云端逐字测试；AAD 因 SDK 凭据类型限制改用核心构造器自动解析 project_id）；WAF/AAD/API 网关接口形态标注待真机验证；0.1.48：功能节点扩充与部署凭据——功能类型新增「Webhook 部署」「Kubernetes Secret」「宝塔面板」「PVE 主机」；授权管理新增「部署凭据」标签（Kubernetes / 宝塔 / PVE / Webhook 四类凭据，配置整份密文存储、秘密字段不回显、编辑留空沿用，Kubernetes/宝塔/PVE 支持测试连接；Webhook 按 URL/方法/自定义头/体模板推送、默认 JSON 转义、拒绝跨主机重定向；Kubernetes 创建/原地更新 kubernetes.io/tls Secret、不解析 kubeconfig；宝塔部署站点证书或面板自身 SSL〔面板 SSL 接口待真机验证〕；PVE 上传节点自定义证书、可选重启 pveproxy）；服务端部署类型元数据收敛（Names/KindOf/凭据种类/厂商校验单一事实来源，既有 16 类行为逐字不变）——为后续六批约 50 个云厂商部署类型铺路；0.1.47：流水线节点拆分——新增「上传节点」「功能节点」「清理节点」（连同申请/部署/通知共六类，界面顺序：申请 → 上传 → 部署 → 功能 → 清理 → 通知；每个节点只显示本类类型，类型下拉面板限高约 5 条可上下滚动，新增节点自动插到对应位置，既有流水线打开后按类型自动归位：如「腾讯云 SSL 上传」显示为上传节点、「删除本地过期证书」显示为清理节点）；新增「FTP 上传」（功能节点）与授权管理「FTP」凭据（主机/端口/用户名/密码/远端目录，密码密文存储、接口与日志不回显，编辑留空=沿用）；修复旧结构部署节点保存校验——不需要云凭据的类型（SCP、删除本地过期证书等）不再被要求选择云凭据，「删除云端过期证书」现在两种云凭据都可用；节点校验文案统一为「第 N 个节点…」；0.1.46：申请证书节点扩充（「密钥算法」增 RSA 3072 / ECDSA P-384；「档位 Profile」增 tlsserver 45 天 / shortlived 约 6 天并加档位说明，档位仅 Let's Encrypt 支持；移除「通配符」提示行）；触发方式「cron」改为「定时」（每天 / 每周 / 每月 / 每 N 小时 结构化选择，可回落自定义表达式，提交仍为 cron）；基础信息节点只留流水线名称——无申请节点时证书与触发方式移到「部署」节点卡顶部；授权管理新增 ZeroSSL / Google Trust Services / Actalis 预设与 EAB 外部账户绑定（KID 明文 + HMAC 密文，签发/续期/测试连接均按 EAB 注册）；0.1.45：左侧导航改名（「设置」→「系统设置」、「流水线」→「流水线管理」，七项导航统一四字；页面标题与相关提示同步；三语同改）；0.1.44：修复运行总览各端可横向滑动——卡片网格改用自包含 CSS 网格（列数不变：手机 2 / 平板 3 / 桌面 6）；0.1.43：总览新增「DNS 托管记录数」「DNS 托管正常」两卡（与「DNS 托管」页记录数/正常列同源），云端证书三卡去掉「含已上传副本」副标题；0.1.42：主题三态（亮色/暗色/自动，默认自动跟随系统）与界面三语化（中文/English/日本語，默认跟随浏览器语言回落中文）——设置页新增「外观」区切换、即时生效；语言/主题偏好存浏览器本地（各设备独立）；暗色偏好下刷新无亮色闪帧；后端「用户可见错误提示」错误码化（前端按错误码以当前语言渲染，zh 与缺失码回落后端中文）；0.1.41：部署节点扩展——新增 12 种部署节点（EdgeOne 证书配置/证书更新/清除缓存；腾讯云 CDN 与阿里云 CDN 证书配置/证书更新/清除缓存；删除云端/本地过期证书；SCP 部署）；「授权管理 → SSH 密钥」实装（SCP 凭据：秘密加密存储、接口不回显、测试连接）；节点表单站点/域名/云端证书下拉实时拉取；同名部署节点跳过记录各自独立；0.1.40：DNS 托管「查看/编辑」抽屉移除「审计事件」区块（内容改在「审计日志」页查阅：自动周期条目在运行日志、手动操作在操作日志）；M13 审计日志：新增顶级页「审计日志」（运行日志＋操作日志双标签，一行一条，点击弹抽屉；运行类含完整运行日志全文）；操作日志全量留痕（全部写操作含失败经接口层中间件记录，请求响应体不入库）；运行日志含每次流水线运行（开始即现、终态更新、重启中断恢复）与软件运行事件（应用日志落库、DNS 自动周期）；日志只增不删；含 0.1.38：M12 评审收口：运行终态落库改用不可取消上下文（停止恰落收尾瞬间不再把运行卡在「运行中」）；Webhook 完全忽略节点收件人配置（已删邮箱不再连带跳过）；收件邮箱校验类型必须为「通知」、邮件通道提示指向通知节点；前端运行状态补「已停止」；含 0.1.37：流水线运行/停止、通知收件人体系（通道只存发件、收件人由通知节点多选、设置页默认收件邮箱）；含 0.1.36 及更早：证书列表域名列精简、设置页面板同宽、操作列收窄右对齐、列表单行化、流水线抽屉联动修复、DNS 托管记录表单行省略、证书检测「无法连接」误报修复、核对改证书检测、DNS 托管全自动周期、云 DNS 同步与两段式上传、流水线编排器结构 v2、安装/升级不删数据
changelog                  = 0.1.62：流水线编辑器「添加节点」按钮对齐——（＋申请节点/＋上传节点/＋部署节点/＋功能节点/＋清理节点/＋通知节点）改为 3 列网格排列、按钮等宽行列全对齐（窄屏 ≤420px 自动降 2 列）；修复原 flex 换行叠加相邻按钮左边距导致第二行整体右移 12px 的错位；0.1.61：跳过重复签发——重新运行流水线时先检查证书是否仍有效：未过期且剩余天数大于续期窗口（「剩余N天」触发用配置的 N、与自动续期窗口完全一致；「手动/定时」触发按 30 天）且证书文件齐备时跳过签发、直接执行部署等后续节点，重复点「运行」不再重复消耗 CA 配额；进入窗口/已过期/证书文件缺失（走签发自动重建）/窗口配置非法/首次签发（待签发流水线）一律照常签发；跳过只记运行日志（「证书仍有效（剩余 X 天，续期窗口 Y 天），跳过签发」），不写 cert_event、不新增错误码；跳过签发后序列号不变，「同名证书已存在时跳过」的部署节点对带申请节点的流水线同样生效；三语提示与帮助文档同步；0.1.60：导出子目录——「本地托管」节点新增「导出子目录」输入（相对所选授权目录的内部目录，支持多级如 nginx/prod、尾斜杠与冗余分隔归一；留空=默认 CertDock-export）；目录不存在时自动创建（仅自建目录设 0755，已存在的目录不改其权限）；校验拒绝绝对路径与越出授权目录的 .. （新错误码 pipeline.node.export_subdir_invalid 三语）；设计文档与帮助文档同步；0.1.59：导出目录收敛（按反馈）——「导出目录」下拉只列用户在应用设置中授权的目录（TRIM_DATA_ACCESSIBLE_PATHS）；共享目录（@appshare）与应用私有目录对常规应用/程序/用户不可读，不再列出也不再写入；节点必须显式选择导出目录（无隐式默认：保存期 api.pipeline.export_dir_required、运行期 deploy.local.export_dir_required）；写入根统一为 <授权目录>/CertDock-export/（授权目录根不改权限）；config/resource 去掉 data-share 声明、卸载脚本移除共享目录清理分支（授权目录下 CertDock-export/ 仍清理）；GET /api/export-dirs 只返回 items；新增 2 个错误码三语同步；帮助文档同步；0.1.58：导出目录可选——「本地托管」节点新增「导出目录」下拉：候选＝平台共享目录（TRIM_DATA_SHARE_PATHS，飞牛按 config/resource 声明创建、文件管理器可见）＋应用设置中授权的目录（TRIM_DATA_ACCESSIBLE_PATHS）＋应用私有回退，默认保持既有语义（首个授权目录否则私有回退）；布局按来源区分（共享目录直接写；授权/私有写其下 CertDock-export/，与卸载清理口径一致）；写入根为平台/用户目录时不改 Chmod（ACL 归平台管），只对应用自建内容设权限；节点 export_dir 须命中候选（保存期与运行期各校验一次，不可用即报错不静默回退）；新增端点 GET /api/export-dirs；启动日志打印候选全表与默认目录；manifest 的 disable_authorization_path 由 true 改 false 以开放「应用设置中授权目录」入口；cmd/main 不再传 --share（flag 保留为开发覆盖）；新增 3 个错误码三语同步；帮助文档同步；0.1.57：导出格式可选——「本地托管」节点新增打包方式（目录 / ZIP 压缩包）与附加导出格式（DER / PKCS
checksum                   = f74982c7dbcfd9c027bb8c45ca3300b7
