ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

使用 lego 与 Joker.com 的 DNS-01 挑战:DMAPI 与 SVC 双模式实战指南

使用 lego 与 Joker.com 的 DNS-01 挑战:DMAPI 与 SVC 双模式实战指南 网络安全密码学【免费下载链接】legoLets Encrypt/ACME client and library written in Go项目地址https://gitcode.com/gh_mirrors/le/lego点击查看免费下载本指南聚焦 lego 项目内置的 Joker DNS 提供商代码joker自 v2.6.0 引入完整讲解如何通过 Joker.com 的两套 API面向代理商账户的DMAPI与面向域名面板的SVC / Dynamic DNS自动完成 ACME DNS-01 挑战覆盖环境变量凭据、附加调优参数、底层 API 调用链与测试验证方式帮助读者在 CLI 与 Go 库两个层面快速落地。背景Joker 提供商支持的两种 API 模式Joker 域名注册商为 Lets Encrypt 证书申请提供了两种不同的自动化接口lego 的 Joker 提供商通过JOKER_API_MODE环境变量在两者之间切换DMAPI默认模式面向 Joker 代理商reseller账户的正式 API基于登录会话Auth-Sid与 DNS zone 的整区读写功能完整也是唯一支持 API Key 认证的模式。SVC面向普通域名持有者的轻量接口本质是 Joker.com 域名面板中Dynamic DNS功能的自动化调用只需在面板中启用并记录一组专用的用户名/密码即可。两者在 providers/dns/joker/joker.go 中被统一抽象为NewDNSProvider()当JOKER_API_MODESVC时构造 SVC 客户端其余情况含未设置即默认一律走 DMAPI 路径这一分支逻辑同时被 joker_test.go 的TestNewDNSProvider用例覆盖验证。快速开始两种模式的 CLI 用法原文档给出的标准命令可直接在安装 lego 后执行。以下命令均使用--dns joker声明 DNS 挑战方式并同时为example.com及其通配子域*.example.com申请证书# SVC 模式域名面板 Dynamic DNS 凭据 JOKER_API_MODESVC \ JOKER_USERNAMEyour email \ JOKER_PASSWORDyour password \ lego run --dns joker -d *.example.com -d example.com # DMAPI 模式用户名 密码认证 JOKER_API_MODEDMAPI \ JOKER_USERNAMEyour email \ JOKER_PASSWORDyour password \ lego run --dns joker -d *.example.com -d example.com # DMAPI 模式API Key 认证另一种等价写法 JOKER_API_MODEDMAPI \ JOKER_API_KEYyour API key \ lego run --dns joker -d *.example.com -d example.com注意 DMAPI 模式即使不显式设置JOKER_API_MODEDMAPI也成立——它本就是默认值CLI 中的写法只是显式声明。在 zz_gen_dns_providers.go 的注册表中joker这一 provider 名称会路由到joker.NewDNSProvider()与--dns joker一一对应。凭据配置以下环境变量用于认证来源见 joker.toml 的[Configuration.Credentials]段环境变量名说明JOKER_API_KEYAPI Key仅在 DMAPI 模式下有效JOKER_API_MODEDMAPI或SVC。DMAPI 面向代理商账户默认DMAPIJOKER_PASSWORDJoker.com 密码SVC 模式下为面板中的 Dynamic DNS 密码JOKER_USERNAMEJoker.com 用户名SVC 模式下为面板中的 Dynamic DNS 用户名上述所有变量名均可追加_FILE后缀改为从文件中读取值例如JOKER_PASSWORD_FILE/run/secrets/joker_password适用于密钥以文件形式挂载的场景详见 docs/content/dns/_index.md 的Configuration and credentials一节。从源码看两类模式对凭据的要求并不相同DMAPIprovider_dmapi.goJOKER_API_KEY与JOKER_USERNAME/JOKER_PASSWORD二选一任一组合存在即满足初始化条件底层login见 internal/dmapi/identity.go会按优先用户名/密码、其次 API Key的顺序构造认证参数。SVCprovider_svc.go必须同时提供JOKER_USERNAME与JOKER_PASSWORD否则初始化直接报错credentials missingJOKER_API_KEY在此模式下不参与认证。附加配置时序与超时调优环境变量名说明JOKER_HTTP_TIMEOUTAPI 请求超时秒默认 60JOKER_POLLING_INTERVALDNS 传播检查间隔秒默认 2JOKER_PROPAGATION_TIMEOUTDNS 传播最大等待时间秒默认 120JOKER_SEQUENCE_INTERVAL顺序请求间隔秒默认 60仅 SVC 模式生效JOKER_TTL挑战 TXT 记录的 TTL秒默认 120这些默认值并非凭空而来而是由NewDefaultConfig()在 joker.go 中逐一固化TTL取自dns01.DefaultTTLPropagationTimeout为 2 分钟PollingInterval取自dns01.DefaultPollingInterval2 秒SequenceInterval默认 60 秒HTTP 客户端超时 60 秒。同样它们也支持_FILE后缀变体。其中JOKER_SEQUENCE_INTERVAL是 SVC 模式的专属参数由于 SVC 接口不支持按内容精确定位 TXT 记录多条记录只能顺序处理svcProvider.Sequential()会把该间隔返回给 lego 的挑战调度器用于控制相邻请求之间的间隔而 DMAPI 模式则无此限制可以并行处理多条记录。深入原理一DMAPI 模式的会话式整区读写DMAPI 的实现位于 internal/dmapi/client.go基地址为https://dmapi.joker.com/request/。其调用流程与 lego 的挑战生命周期严格对应登录会话CreateAuthenticatedContext调用login获取Auth-Sid会话 ID并在内存中以 1 小时为有效期缓存 Token对应 Joker 官方会话闲置约 1 小时过期的规则见 internal/dmapi/identity.go。后续每个请求都会通过auth-sid参数携带该会话 ID。Present写入挑战记录provider_dmapi.go 的Present依次完成用dns01.FindZoneByFqdn定位权威 zone → 用ExtractSubDomain拆出相对子域名 →GetZone拉取整个 zone 文本 →dmapi.AddTxtEntryToZone在 zone 尾部追加一行形如relative TXT 0 value ttl的记录 →PutZone整体回传。追加过程中还通过fixTxtLines对 API 返回的 TXT 行做了格式兼容处理应对 Joker API 端未修复的引号拆分问题。CleanUp清理挑战记录重新拉取 zone用RemoveTxtEntryFromZone删除以relative TXT 0为前缀的所有记录仅在确有修改时才回传 zone最后显式调用Logout关闭会话出错时也会在defer中尝试登出。DMAPI 模式支持JOKER_API_KEY认证适合代理商账户在自动化流程中隔离主凭据的使用场景。深入原理二SVC 模式与 Dynamic DNS 凭据SVC 模式沿用了 Joker.com 域名面板中Dynamic DNS的接口基地址为https://svc.joker.com/nic/replace见 internal/svc/client.go每次请求直接携带username、password、zone、label、typeTXT、value六个表单字段无会话概念响应以OK前缀判定成功。与直觉不同SVC 模式的用户名/密码不是你登录 Joker.com 的邮箱与账户密码而是在域名面板中单独生成的Dynamic DNS Authentication凭据。按 Joker.com 官方指引API 文档链接见 joker.toml每个域只需配置一次登录 Joker.com进入 My Domains找到要签发 Lets Encrypt 证书的域名在菜单中选择 DNS在右上角找到 Dynamic DNS 设置如未启用请启用它这不会影响该域名已有的任何其他 DNS 记录记下此时显示的 Dynamic DNS Authentication 凭据即一组用户名与密码每个域名只需这样操作一次。在 SVC 模式下Present写入 TXT 记录值CleanUp则以空字符串value再次调用同一接口实现删除由于接口无法定位特定记录删除语义是清空该 label 的 TXT 值这也是它必须串行执行见上文Sequential()的根本原因。在 Go 库中使用除 CLI 外Joker 提供商同样可以直接以库方式集成。基础用法是让 lego 从环境变量自动装配provider, err : joker.NewDNSProvider()若希望在代码中显式控制参数例如缩短 TTL 或调整传播等待时间可构造joker.Config后调用NewDNSProviderConfigconfig : joker.NewDefaultConfig() config.APIMode DMAPI config.Username your-username config.Password your-password config.TTL 300 provider, err : joker.NewDNSProviderConfig(config)Config的字段APIKey、Username、Password、APIMode、PropagationTimeout、PollingInterval、SequenceInterval、TTL、HTTPClient与上文环境变量一一对应NewDefaultConfig()会优先读取环境变量未设置时回落为各默认值。返回的 provider 实现了challenge.ProviderTimeout接口Timeout()方法提供传播超时与轮询间隔SVC 模式额外实现Sequential()以声明串行策略。测试与验证仓库内为 Joker 提供商提供了两类测试见 joker_test.go单元测试TestNewDNSProvider/TestNewDNSProviderConfig覆盖 DMAPI默认、显式 DMAPI、SVC 三种模式下的 provider 类型装配验证环境变量与APIMode的分支逻辑DMAPI 的会话与 zone 处理逻辑另有 internal/dmapi/client_test.go 与 internal/dmapi/identity_test.go 守护。在线测试TestLivePresent/TestLiveCleanUp需要真实 Joker 账户与域名由JOKER_DOMAIN指定默认跳过仅在显式启用 live test 时执行真实写入与清理。注意事项小结模式选择普通域名持有者使用 SVC需在面板启用 Dynamic DNS代理商账户建议使用 DMAPI并可选用 API Key 代替账密。凭据区分SVC 模式的账密与登录 Joker.com 的邮箱/密码无关务必使用面板生成的 Dynamic DNS 凭据。串行限制SVC 模式天然串行多域并发申请时总耗时更长可通过JOKER_SEQUENCE_INTERVAL调整请求间隔DMAPI 无此限制。密钥安全生产环境推荐使用_FILE后缀变体配合密钥文件避免凭据出现在进程环境或命令行历史中。赞分享网络安全密码学【免费下载链接】legoLets Encrypt/ACME client and library written in Go项目地址https://gitcode.com/gh_mirrors/le/lego点击查看免费下载相关推荐Qwen3-Coder 仓库中的 DevQualityEval v0.5.0 单模型报告解读yi-6b 的测试生成评测、七级分类与评分构成Qwen3 Coder 仓库中的 DevQualityEval v0.5.0 单模型报告解读yi 6b 的测试生成评测、七级分类与评分构成 本文以 Qwen3网络安全密码学lego 使用 all-inkl DNS Provider 解决 DNS-01 挑战配置、原理与实战指南lego 使用 all inkl DNS Provider 解决 DNS 01 挑战配置、原理与实战指南 本指南以 legoGo 编写的 Lets Enc网络安全密码学MuJoCo API 类型体系详解mjtNum、mjModel、mjData、枚举与回调函数的完整地图MuJoCo API 类型体系详解mjtNum、mjModel、mjData、枚举与回调函数的完整地图 MuJoCo 的 C API 建立在一套庞大但高度规整网络安全密码学创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表