20 函数 · 签名核对自 lib/xacme · RFC 8555

xacme 函数参考

有序字节流上的二进制应用层协议帧库:build.bat xtp 编入,32 字节头、四型消息(REQUEST / RESPONSE / PUSH / EVENT)、流式增量解析、完整 limits 体系。两个 inline 辅助(xtp2_text / xtp2_wants_reply)留在头文件里由脚本侧内联。

账户与配置

xrtAcmeAccountConfigInit 配置

账户配置清零初始化;CA 预设常量 XACME_DIRECTORY_LE / LE_STAGING / ZEROSSL / GOOGLE / BUYPASS 直接赋给 sDirectoryUrl。

void xrtAcmeAccountConfigInit(xacmeaccountconfig* pConfig);

签发流程(5 个入口)

xacmeClientInit / Unit / AccountPem 生命周期

建客户端:解析 directory、注册或复用账户(kid 来自 Location);AccountPem 导出账户密钥供持久化。失败设置线程错误(域 "xrt.acme.flow")。

bool xacmeClientInit(xacmeclient* pClient, struct xnetengine* pBorrowedEngine, cstr sCaPem, cstr sDirectoryUrl, cstr sAccountKeyPem);

xacmeClientIssue 签发

一次 dns-01 签发:域名可含通配符;返回证书链 PEM(xrtFree 释放)。provider 的 Add 在挑战前调用、Remove 结束后尽力调用。

str xacmeClientIssue(xacmeclient* pClient, const xstrview* pDomains, size_t iDomainCount, const struct xacmednsprovider* pDns);

xacmeClientIssueStored 一站式续签

组合 store:剩余寿命 ≥ iRenewalDays 直接返回现有链(*pbRenewed=false);否则签发、落盘(fullchain + CA 溯源)并返回新链。

str xacmeClientIssueStored(xacmeclient* pClient, const xstrview* pDomains, size_t iDomainCount, const struct xacmednsprovider* pDns, cstr sStoreRoot, int iRenewalDays, bool* pbRenewed);

DNS provider

xrtAcmeDnsProviderValidate / Count / Id 接口

provider 结构校验、内建注册表枚举(当前仅 "ali");自定义厂商直接填结构(id/Add/Remove/可选 Propagate)。

xrtAcmeDnsAliConfigInit / xrtAcmeDnsAli / ProviderUnit 阿里云

阿里云 alidns provider 构造(ACS3-HMAC-SHA256 V3 签名)与回收;密钥走环境/Custom。

bool xrtAcmeDnsAli(const xacmednaliconfig* pConfig, xacmednsprovider* pProvider);

库自带 TXT 传播探测(UDP 查权威 NS),确认记录可见后才通知 CA 验证。

存储与续期

xrtAcmeStoreSaveAccount / LoadAccount 账户

账户密钥落盘/回读(PKCS#8 PEM)——Init 传入复用,免重复注册。

xrtAcmeStoreSaveCert / LoadCert / LoadCertCa 证书

全链与 CA 溯源分别存取,原子写入。

xrtAcmeStoreNeedRenew 续期判断

按剩余天数判断是否需要续签(x509 解析,不依赖外部进程)。

bool xrtAcmeStoreNeedRenew(cstr sStoreRoot, cstr sDomain, int iRenewalDays, bool* pbNeed);
20 符号(13 公开 + 5 flow 入口 + 2 增量)全部导入脚本与嵌套 TCC;VFS 以 xacme/ 子路径收录 flow 头。教学见第 38 章;与 ch42 部署、ch47 证书热替换衔接。