首页/新闻资讯/正文详情

使用 lego 与 Core-Networks DNS 提供商签发通配符证书:环境变量配置与源码级原理解析

发布时间:2026/9/24 16:20:38 来源:云帆数科 栏目:资讯中心
使用 lego 与 Core-Networks DNS 提供商签发通配符证书:环境变量配置与源码级原理解析
网络安全密码学【免费下载链接】legoLets Encrypt/ACME client and library written in Go项目地址https://gitcode.com/gh_mirrors/le/lego点击查看免费下载导读Core-Networkscodecorenetworks是 lego 内置的 DNS-01 挑战提供商之一用于通过 Core-Networks 的 DNS 托管 API 自动添加/删除_acme-challengeTXT 记录从而为域名含通配符签发 Lets Encrypt 证书。本文以官方配置文档为主体结合仓库源码深入讲解凭据与超时参数的配置方式、_FILE环境变量文件注入机制、DNS-01 挑战的完整调用链以及如何在 Go 程序中以库的形式集成该提供商。一、提供商概览Core-Networks 提供商自v4.20.0起被引入 lego其注册入口位于 providers/dns/zz_gen_dns_providers.go通过环境变量加载并调用corenetworks.NewDNSProvider()。提供商元数据定义在 providers/dns/corenetworks/corenetworks.toml而对应的生成文档即 docs/content/dns/zz_gen_corenetworks.md。与 HTTP-01 需要 80 端口回源不同DNS-01 挑战通过在 DNS 中写入 TXT 记录来完成验证因此特别适合签发通配符证书如*.example.com服务器无法对外开放 80/443 端口的场景需要为大量子域一次性签发的自动化场景。使用该提供商前你需要一个可用的 Core-Networks API 账号用户名 密码并将待签发域名托管在其 DNS 平台。二、快速开始一条命令完成签发官方文档给出的最小可用示例是通过环境变量注入凭据后直接运行lego runCORENETWORKS_LOGINxxxx \ CORENETWORKS_PASSWORDyyyy \ lego run --dns corenetworks -d *.example.com -d example.com命令说明--dns corenetworks指定使用 Core-Networks 提供商执行 DNS-01 挑战-d *.example.com申请通配符证书-d example.com同时申请裸域证书Lets Encrypt 的通配符证书不覆盖裸域二者需分别签发。签发成功后证书与私钥默认保存在./.lego/certificates/目录下可通过 lego 的--path等参数调整存储位置。该示例同样记录在配置元数据文件 corenetworks.toml 的Example字段中是官方验证过的可运行形态。三、凭据配置Credentials3.1 环境变量Core-Networks 提供商需要两个必填凭据环境变量名说明CORENETWORKS_LOGINAPI 账号的用户名CORENETWORKS_PASSWORDAPI 账号的密码环境变量常量定义在 providers/dns/corenetworks/corenetworks.goconst ( envNamespace CORENETWORKS_ EnvLogin envNamespace LOGIN EnvPassword envNamespace PASSWORD // ... )在NewDNSProvider()中通过env.Get(EnvLogin, EnvPassword)统一读取corenetworks.go任一凭据缺失都会返回形如corenetworks: some credentials information are missing: CORENETWORKS_LOGIN的错误。这一点在 corenetworks_test.go 的TestNewDNSProvider用例中有完整验证分别覆盖缺 login与缺 password两种失败路径。3.2 使用 _FILE 后缀注入凭据Docker/容器场景所有环境变量名都可以追加_FILE后缀改为从文件中读取值例如CORENETWORKS_PASSWORD_FILE/run/secrets/cn_password。该机制由 platform/env/env.go 的GetOrFile实现优先读取CORENETWORKS_PASSWORD环境变量若为空则读取CORENETWORKS_PASSWORD_FILE指向的文件内容读取成功后使用strings.TrimRight(fileContents, \r\n)去除末尾换行符。这一特性特别适合 Docker Secret、Kubernetes Secret 挂载等不允许把密码写进环境变量明文或镜像层的部署场景。所有附加配置项同样支持_FILE后缀通用说明见文档 docs/content/dns/_index.md 中Configuration and Credentials一节。四、附加配置项详解Additional ConfigurationCore-Networks 提供商还支持 5 个可选环境变量用于控制超时、探测频率与记录 TTL环境变量名说明默认值CORENETWORKS_HTTP_TIMEOUTAPI 请求超时时间秒30CORENETWORKS_POLLING_INTERVALDNS 传播检查间隔秒2CORENETWORKS_PROPAGATION_TIMEOUTDNS 传播最大等待时间秒60CORENETWORKS_SEQUENCE_INTERVAL顺序请求之间的间隔秒60CORENETWORKS_TTL用于挑战的 TXT 记录 TTL秒3600这些参数的默认值在 NewDefaultConfig 中设定并与 lego 的dns01包内置常量衔接func NewDefaultConfig() *Config { return Config{ TTL: env.GetOrDefaultInt(EnvTTL, 3600), PropagationTimeout: env.GetOrDefaultSecond(EnvPropagationTimeout, dns01.DefaultPropagationTimeout), PollingInterval: env.GetOrDefaultSecond(EnvPollingInterval, dns01.DefaultPollingInterval), SequenceInterval: env.GetOrDefaultSecond(EnvSequenceInterval, dns01.DefaultPropagationTimeout), HTTPClient: http.Client{ Timeout: env.GetOrDefaultSecond(EnvHTTPTimeout, 30*time.Second), }, } }源码实现细节值得注意传播与轮询PropagationTimeout和PollingInterval通过Timeout()方法暴露给 lego 的挑战管理器corenetworks.go用于等待 TXT 记录在全球 DNS 生效CORENETWORKS_PROPAGATION_TIMEOUT60秒是等待上限CORENETWORKS_POLLING_INTERVAL2秒是每次探测的间隔。若你的权威 DNS 更新较慢可适当调大传播超时。顺序模式Sequential()返回SequenceIntervalcorenetworks.go当一次签发多个域名如通配符 裸域组合时lego 会按此间隔依次发起挑战避免一次性并发请求过多导致限流。TTL写入 TXT 记录的 TTL默认 3600 秒。更小的 TTL 可以缩短验证前的等待时间但会略微增加 DNS 查询量。HTTP 超时所有 API 调用的客户端超时默认 30 秒通过CORENETWORKS_HTTP_TIMEOUT调整。此外所有数值型变量都经由env.GetOrDefaultSecond/env.GetOrDefaultInt解析若变量值无法解析为数字会静默回退到默认值见 platform/env/env.go因此配置错误时不会直接报错需留意日志。五、源码级原理DNS-01 挑战的完整调用链5.1 Present添加验证记录当 lego 发起 DNS-01 挑战时会调用 provider 的Present方法corenetworks.go其流程为计算挑战信息通过dns01.GetChallengeInfo(ctx, domain, keyAuth)得到_acme-challenge的完整域名EffectiveFQDN与待写入的 TXT 值info.Value获取认证令牌调用内部客户端的CreateAuthenticatedContext先向 Core-Networks API 换取 Bearer Token见下节定位 DNS 区域调用dns01.DefaultClient().FindZoneByFqdn根据 FQDN 逐级向上查找所属 Zone例如_acme-challenge.example.com会定位到example.com区域计算子域名dns01.ExtractSubDomain从 FQDN 中剥离 Zone 得到记录名如_acme-challenge构造并提交记录构造TXT类型的Record{Name, TTL, Type, Data}先调用AddRecord添加记录再调用CommitRecords提交变更。5.2 CleanUp验证完成后的清理挑战验证成功后CleanUpcorenetworks.go执行逆向操作同样先定位 Zone、计算子域名然后调用DeleteRecords删除匹配的 TXT 记录并再次CommitRecords提交。注意 Core-Networks API 的设计是增删记录后必须显式 commit 才会真正生效这也是Present/CleanUp都包含两步写操作的原因。5.3 底层 API 客户端内部客户端实现在 providers/dns/corenetworks/internal/client.go默认 API 基址为https://beta.api.core-networks.dedefaultBaseURL见 client.go涉及的关键端点API 端点对应方法作用POST /auth/tokenCreateAuthenticationToken用 login/password 换取令牌GET /dnszonesListZone列出所有 DNS 区域GET /dnszones/{zone}GetZoneDetails查询区域详情含 DNSSEC、TSIG 等GET /dnszones/{zone}/recordsListRecords列出区域记录POST /dnszones/{zone}/records/AddRecord添加记录POST /dnszones/{zone}/records/deleteDeleteRecords删除匹配记录POST /dnszones/{zone}/records/commitCommitRecords提交生效变更认证令牌机制见 internal/identity.goCreateAuthenticationToken以Auth{Login, Password}调用POST /auth/token返回Token{Token, Expires}随后令牌被放入context.Context每次请求通过do方法自动附加Authorization: Bearer token头client.go。请求响应非 2xx 状态码时会通过errutils包装为带状态码的明确错误。记录与区域的数据结构定义在 internal/types.goRecord{Name, TTL, Type, Data}对应 API 的 TXT 记录ZoneDetails还包含Active、DNSSec、TSIG等区域元信息。对应接口的请求/响应 JSON 示例可参考测试夹具目录 providers/dns/corenetworks/internal/fixtures 中的auth.json、ListZone.json、ListRecords.json与GetZoneDetails.json。六、以库的形式集成到 Go 程序若你并非使用 lego CLI而是在 Go 项目中以库方式集成可直接构建 provider 实例。最简方式是通过环境变量import github.com/go-acme/lego/v5/providers/dns/corenetworks provider, err : corenetworks.NewDNSProvider() if err ! nil { log.Fatalf(create provider: %v, err) }需要编程式控制参数时使用NewDNSProviderConfigcorenetworks.goconfig : corenetworks.NewDefaultConfig() config.Login xxxx config.Password yyyy config.TTL 300 config.PropagationTimeout 90 * time.Second provider, err : corenetworks.NewDNSProviderConfig(config) if err ! nil { log.Fatalf(create provider: %v, err) }Config结构体corenetworks.go包含Login、Password、PropagationTimeout、PollingInterval、SequenceInterval、TTL与可选的HTTPClient字段。校验规则config为nil或Login/Password任一为空时返回corenetworks: credentials missing。随后将provider交给lego客户端的ChallengeProvider即可参与完整的 ACME 订单流程。七、测试与验证仓库为该提供商提供了单元测试与实时测试两套验证手段corenetworks_test.goTestNewDNSProvider与TestNewDNSProviderConfig验证凭据缺失时的错误信息是否符合预期同文件的TestLivePresent/TestLiveCleanUpcorenetworks_test.go为实时测试设置CORENETWORKS_LOGIN、CORENETWORKS_PASSWORD以及测试专用的CORENETWORKS_DOMAIN后运行会真实调用 Core-Networks API 完成一次 TXT 记录的添加与删除可用于在接入生产前验证账号权限与网络连通性内部客户端层的接口测试与夹具校验位于 internal/client_test.go 与 internal/identity_test.go。八、注意事项与排障建议通配符证书必须同时申请裸域Lets Encrypt 签发的*.example.com不覆盖example.com这也是官方示例同时传入两个-d参数的原因Zone 必须存在于账号下Present依赖FindZoneByFqdn找到 Zone若域名未托管于 Core-Networks 或账号无该 Zone 权限会返回could not find zone for domain错误别忘记 commit记录增删后必须提交CommitRecords直接修改 API 或跳过 commit 会导致变更不生效敏感信息优先使用_FILE在容器编排场景下用CORENETWORKS_LOGIN_FILE/CORENETWORKS_PASSWORD_FILE从 Secret 文件注入凭据避免凭据进入环境变量明文或镜像层传播等待时间TXT 记录生效需要时间若频繁出现挑战超时可适当调大CORENETWORKS_PROPAGATION_TIMEOUT并调小 TTL多域签发限流同时签发多个域名时CORENETWORKS_SEQUENCE_INTERVAL控制顺序间隔默认 60 秒可按需调整以平衡速度与稳定性。通过以上配置与源码分析你应当能够独立完成 Core-Networks 托管域名的自动签发配置并在出现异常时快速定位到具体的参数或调用环节。赞分享网络安全密码学【免费下载链接】legoLets Encrypt/ACME client and library written in Go项目地址https://gitcode.com/gh_mirrors/le/lego点击查看免费下载相关推荐LinkSwift九大网盘直链下载助手告别限速烦恼的智能解决方案LinkSwift九大网盘直链下载助手告别限速烦恼的智能解决方案 还在为网盘下载速度缓慢而烦恼吗LinkSwift网盘直链下载助手为您带来革命性的下载体验网络安全密码学Mordecai API完全指南10个高级用法提升地理数据处理效率Mordecai API完全指南10个高级用法提升地理数据处理效率 Mordecai是一个强大的Python地理解析库专门用于从英文文本中提取地名并将其解析网络安全密码学Apache Airflow Amazon Provider 之 S3 Tables 操作符全指南以 Iceberg 表为核心的自动化编排Apache Airflow Amazon Provider 之 S3 Tables 操作符全指南以 Iceberg 表为核心的自动化编排 本篇指南基于 Ap网络安全密码学上一篇空洞骑士模组管理终极指南Scarab让模组安装从未如此简单下一篇空洞骑士模组管理终极解决方案Scarab让模组安装从未如此简单创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

django-allauth 集成 Patreon 第三方登录:VERSION/SCOPE 配置与 OAuth2 源码实现解析
django-allauth 集成 Patreon 第三方登录:VERSION/SCOPE 配置与 OAuth2 源码实现解析

django-allauth 集成 Patreon 第三方登录:VERSION/SCOPE 配置与 OAuth2 源码实现解析 【免费下载链接】django-allauth Integrated set of Django applications addressing authentication, registration, account management as well as 3rd party (social) accoun… · 2026/9/24 16:20:31

用 Infinite-Canvas 把散落的 Prompt 和素材收进一张无限画布
用 Infinite-Canvas 把散落的 Prompt 和素材收进一张无限画布

做 AI 绘图或者多模态创作的人,大概都经历过这种状态:Prompt 写在某个聊天窗口里,参考图存在下载文件夹,生成结果又丢在另一个目录,改了几版之后自己都记不清哪张图对应哪段提示词。想对比两个版本的差异,得… · 2026/9/24 16:20:25

【Dv2Admin】修正页面列数据接口同时多次请求
【Dv2Admin】修正页面列数据接口同时多次请求

在企业级应用的开发中,提升用户界面的性能和交互体验一直是开发者关注的重点。尤其在数据请求与反显过程中,大量的请求会给服务器带来不必要的负担,同时可能影响用户的体验。 本文通过一个典型的业务场景,探讨如何优化列表数据请求,以一次请求的方式实现高效的数据反显,… · 2026/9/24 16:20:25

【SRC】EDU实战篇5:OSS 特征识别与权限联动利用技巧
【SRC】EDU实战篇5:OSS 特征识别与权限联动利用技巧

文章目录 思路 案例一(OSS接管) 站点1 站点2 案例二(OSS覆盖) 站点1 站点2 站点3 案例三(工具综合利用) 站点1 总结 ⚠️本博文所涉安全渗透测试技术、方法及案例,仅用于网络安全技术研究与合规性交流,旨在提升读者的安全防护意识与技术能力。任何个人或组织在使用相关… · 2026/9/24 17:02:37

【Coze】【视频】三分钟读一本书
【Coze】【视频】三分钟读一本书

今天给大家演示一个 《三分钟读一本书》Coze 工作流。该工作流通过大模型驱动的分镜文案生成、图像合成、语音合成以及视频草稿自动创建等一整套流程,将一本书的内容浓缩为一个三分钟的视频,实现从文本到成片的全自动化制作。用户只需输入书名、作者和个人账号信息,即可得到… · 2026/9/24 17:02:12

第24篇-MCP-Client架构-Host应用如何管理多个Server连接
第24篇-MCP-Client架构-Host应用如何管理多个Server连接

【MCP 全栈教程】第 24 篇:MCP Client 架构——Host 应用如何管理多个 Server 连接 本系列定位:从协议原理到 Server 开发、Client 开发、再到各大平台实战集成,系统化掌握 MCP(Model Context Protocol)全栈技术体系。… · 2026/9/24 17:01:59

第21篇-MCP-Server测试-MCP-Inspector与自动化测试
第21篇-MCP-Server测试-MCP-Inspector与自动化测试

【MCP 全栈教程】第 21 篇:MCP Server 测试——MCP Inspector 与自动化测试 本系列定位:从协议原理到 Server 开发、Client 开发、再到各大平台实战集成,系统化掌握 MCP(Model Context Protocol)全栈技术体系。 本篇你… · 2026/9/24 17:01:59

OneNote 笔记如何备份才不丢数据:3 种方案完整保姆级攻略
OneNote 笔记如何备份才不丢数据:3 种方案完整保姆级攻略

OneNote 笔记如何备份才不丢数据:3 种方案完整保姆级攻略 【免费下载链接】cs-408 计算机考研专业课程408相关的复习经验,资源和OneNote笔记 项目地址: https://gitcode.com/GitHub_Trending/cs/cs-408 用 OneNote 攒了几个月笔记,某次… · 2026/9/24 17:01:59

使用 AWS SDK for C++ 编写 Hello SNS:通过 ListTopics 入门 Amazon SNS
使用 AWS SDK for C++ 编写 Hello SNS:通过 ListTopics 入门 Amazon SNS

示例工程教程后端 【免费下载链接】aws-doc-sdk-examples Welcome to the AWS Code Examples Repository. This repo contains code examples used in the AWS documentation, AWS SDK Developer Guides, and more. For more information, see the Readme.md file below. 项目地… · 2026/9/24 17:01:53

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13

1D-CNN时间序列建模实战:从Conv1d原理到工业落地
1D-CNN时间序列建模实战:从Conv1d原理到工业落地

简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26

柔软的L:汉语语流中被忽视的舌肌张力控制
柔软的L:汉语语流中被忽视的舌肌张力控制

1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码