
网络安全密码学【免费下载链接】legoLets Encrypt/ACME client and library written in Go项目地址https://gitcode.com/gh_mirrors/le/lego点击查看免费下载本篇技术指南以 lego 官方 DNS 提供商文档中的 Vscale 章节为核心完整讲解如何使用 lego 配合 Vscale Domains API 通过 DNS-01 挑战自动签发含通配符证书。读完本文你将掌握 Vscale 提供商的环境变量配置、_FILE后缀与 dotenv 用法、全部可选参数及默认值并能结合源码理解其底层实现原理。概述lego 中的 Vscale DNS 提供商Vscale 是 lego 内置的 DNS 提供商之一提供商代码为vscale自v2.0.0版本起可用。其配置说明文档位于 docs/content/dns/zz_gen_vscale.md该文件由 providers/dns/vscale/vscale.toml 自动生成字段与 TOML 元数据一一对应。它的适用场景非常明确当你的域名托管在 Vscale且希望以纯 DNS 方式DNS-01 挑战为域名或*.example.com这类通配符域名签发 Lets Encrypt 证书时无需在服务器上开放 80/443 端口只需在 Vscale 控制台生成 API Token 并注入环境变量即可。快速开始一条命令签发通配符证书官方文档给出的最小可用示例如下docs/content/dns/zz_gen_vscale.mdVSCALE_API_TOKENxxxxx \ lego run --dns vscale -d *.example.com -d example.com命令解析VSCALE_API_TOKEN必填的 API Token在 Vscale 控制台的「Settings → Tokens」页面生成源码注释见 providers/dns/vscale/vscale.go--dns vscale指定使用 Vscale 提供商走 DNS-01 挑战-d *.example.com -d example.com同时为通配符域名和根域名申请证书ACME 要求通配符域名必须与根域名一并提交。凭证配置VSCALE_API_TOKENVscale 提供商仅需一个凭证环境变量环境变量名描述VSCALE_API_TOKENAPI token必填从源码看凭证的加载逻辑位于 providers/dns/vscale/vscale.goNewDNSProvider()调用env.Get(EnvAPIToken)读取环境变量若为空则返回错误vscale: some credentials information are missing: VSCALE_API_TOKEN。相关测试用例providers/dns/vscale/vscale_test.go也验证了「缺失 API Token 时报错」这一行为。_FILE后缀凭证改为引用文件官方文档特别说明所有环境变量名都可以加上_FILE后缀改为引用一个文件路径而不是直接的值详细说明见 docs/content/dns/_index.md。例如VSCALE_API_TOKEN_FILE/etc/secrets/vscale-token \ lego run --dns vscale -d *.example.com -d example.com文件内容必须只包含凭证值本身不能带换行之外的字符。该机制由platform/env包统一实现env.Get内部调用GetOrFileplatform/env/env.go会先读取普通变量若为空则自动尝试对应的_FILE变量。dotenv 文件批量管理配置此外还可使用 dotenv 文件集中管理环境变量。使用lego run时通过--env-file指定lego run --dns vscale -d *.example.com -d example.com --env-file .env.vscale.env.vscale内容示例VSCALE_API_TOKENyour-token-here附加配置参数与默认值除凭证外Vscale 提供商还支持 4 个可选环境变量官方文档表格docs/content/dns/zz_gen_vscale.md环境变量名描述默认值VSCALE_HTTP_TIMEOUTAPI 请求超时秒30VSCALE_POLLING_INTERVALDNS 传播检查间隔秒2VSCALE_PROPAGATION_TIMEOUTDNS 传播最大等待时间秒120VSCALE_TTL用于 DNS 挑战的 TXT 记录 TTL秒60这些默认值可以在源码的NewDefaultConfig()中得到印证providers/dns/vscale/vscale.gofunc NewDefaultConfig() *Config { return Config{ TTL: env.GetOrDefaultInt(EnvTTL, selectel.MinTTL), PropagationTimeout: env.GetOrDefaultSecond(EnvPropagationTimeout, 120*time.Second), PollingInterval: env.GetOrDefaultSecond(EnvPollingInterval, dns01.DefaultPollingInterval), HTTPClient: http.Client{ Timeout: env.GetOrDefaultSecond(EnvHTTPTimeout, 30*time.Second), }, } }几个值得注意的细节VSCALE_TTL的默认值并非写死的 60而是引用了共享常量selectel.MinTTL 60providers/dns/internal/selectel/provider.go且该值同时是 TTL 的下限——低于 60 会被直接拒绝VSCALE_POLLING_INTERVAL默认值 2 秒来自dns01.DefaultPollingIntervalchallenge/dns01/dns_challenge.go这些变量同样支持_FILE后缀加载逻辑与凭证一致底层均为env.GetOrDefaultInt/env.GetOrDefaultSecondplatform/env/env.go。源码级实现Vscale 提供商的工作原理配置结构与 TTL 校验vscale包的类型Config是共享包selectel.Config的类型别名providers/dns/vscale/vscale.go包含Token、PropagationTimeout、PollingInterval、TTL、HTTPClient五个字段providers/dns/internal/selectel/provider.go。NewDNSProviderConfig(config)会执行两项硬校验providers/dns/internal/selectel/provider.goconfig.Token为空 → 报错credentials missingconfig.TTL 60→ 报错invalid TTL, TTL (59) must be greater than 60。测试用例TestNewDNSProviderConfig对「missing api key」和「bad TTL valuettl59」两种失败场景都有断言providers/dns/vscale/vscale_test.go。API 端点与认证方式Vscale 的默认 API 基址为https://api.vscale.io/v1/domainsproviders/dns/vscale/vscale.goHTTP 客户端在每次请求的请求头中注入X-Token: token完成认证providers/dns/internal/selectel/internal/client.go。核心调用链如下对应 Vscale Domains API 的Domains Records资源操作HTTP 请求源码位置按名称查域名GET /{domainName}client.go添加 TXT 记录POST /{domainID}/records/client.go列出记录GET /{domainID}/records/client.go删除记录DELETE /{domainID}/records/{recordID}client.goPresent / CleanUp 生命周期DNSProvider实现了challenge.ProviderTimeout接口providers/dns/vscale/vscale.go三个核心方法的语义如下Present通过dns01.GetChallengeInfo计算挑战 FQDN 与 TXT 值先GetDomainByName拿到域名对象 ID再以TypeTXT、TTLconfig.TTL、NameEffectiveFQDN、ContentValue调用AddRecord写入记录providers/dns/internal/selectel/provider.goCleanUp对EffectiveFQDN执行dns01.UnFqdn去掉尾部点得到记录名列出该域下所有记录逐一删除名称匹配的记录providers/dns/internal/selectel/provider.goTimeout直接返回配置中的PropagationTimeout与PollingInterval供 lego 在验证前等待 DNS 传播providers/dns/vscale/vscale.go。另外GetDomainByName具备递归降级能力当查询的域名层级大于 2 且返回 404 时会去掉最左侧子域重新查找直至找到账号下实际存在的父域client.go。从源码结构看这一设计是为了兼容子域名记录挂在父域下的场景。请求与错误处理内部客户端统一走do()方法注入X-Token头、发送请求、将非 2xx 响应解析为APIError含code、error、field字段后包装返回client.go、types.go。此外 HTTP 客户端还会被clientdebug.Wrap包装便于开启调试日志排查问题provider.go。验证与测试仓库为 Vscale 提供商提供了完整的单元测试与实时测试providers/dns/vscale/vscale_test.goTestNewDNSProvider覆盖「成功初始化」与「缺少VSCALE_API_TOKEN时报错」两条路径TestNewDNSProviderConfig覆盖 token 为空、TTL 低于 60 两种非法配置TestLivePresent/TestLiveCleanUp真实的挑战记录创建与清理测试仅在设置了 live 测试环境时运行默认跳过。如果你在配置过程中遇到「credentials information are missing」错误优先检查VSCALE_API_TOKEN是否设置或_FILE指向的文件内容是否为空若收到 TTL 相关报错请确认VSCALE_TTL不小于 60 秒。小结Vscale 是 lego 中接入成本较低的 DNS 提供商之一只需一个 API Token配合lego run --dns vscale即可完成通配符证书的签发与自动续期。其实现复用了 selectel 共享内核通过X-Token认证与「查域名 → 增删 TXT 记录」的标准流程工作全部参数TTL、传播超时、轮询间隔、HTTP 超时均可用环境变量覆盖且默认值明确。更多 provider 配置通用约定如_FILE后缀与 dotenv可参考 docs/content/dns/_index.md完整参数元数据则维护在 providers/dns/vscale/vscale.toml。赞分享网络安全密码学【免费下载链接】legoLets Encrypt/ACME client and library written in Go项目地址https://gitcode.com/gh_mirrors/le/lego点击查看免费下载相关推荐AI SDK Cartesia Provider 能力全景Sonic 语音合成与 Ink 2 实时转录的版本演进与源码级解析AI SDK Cartesia Provider 能力全景Sonic 语音合成与 Ink 2 实时转录的版本演进与源码级解析 ai sdk/cartesia网络安全密码学lego 使用 DDnssDynDNS ServiceDNS 提供商签发通配符证书DDNSS_KEY 配置与 DNS-01 挑战全指南lego 使用 DDnssDynDNS ServiceDNS 提供商签发通配符证书DDNSS_KEY 配置与 DNS 01 挑战全指南 导读 本文讲解如何网络安全密码学Dyn DNS 提供商接入指南用 lego 通过 DNS-01 挑战签发通配符证书Dyn DNS 提供商接入指南用 lego 通过 DNS 01 挑战签发通配符证书 本指南以 lego 项目自动生成的 Dyn 提供商文档 docs/con网络安全密码学上一篇如何快速实现BERT语义相似度计算面向初学者的完整指南 下一篇15分钟极速掌握.NET MAUI全平台自动化构建与测试从零基础到实战创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考