ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

lego 使用 UCloud DNS 完成 DNS-01 证书签发:ucloud 提供方完整配置指南

lego 使用 UCloud DNS 完成 DNS-01 证书签发:ucloud 提供方完整配置指南 网络安全密码学【免费下载链接】legoLets Encrypt/ACME client and library written in Go项目地址https://gitcode.com/gh_mirrors/le/lego点击查看免费下载本篇技术指南围绕 legoLets Encrypt/ACME client and library written in Go内置的UCloud 域名解析UDNRDNS 提供方展开介绍如何通过环境变量配置 UCloud 账号密钥利用其 DNS 服务为域名含泛域名签发或续期 ACME 证书。读完本文你将掌握lego run --dns ucloud的完整用法、全部可调参数及其默认值、_FILE文件引用方式以及该提供方在仓库源码中的实现原理与验证路径。UCloud 提供方概览UCloud 是 lego 官方内置的 DNS 提供方之一用于通过 UCloud 的 DNS 服务UDNR自动完成 DNS-01 挑战——即在验证域名下写入一条_acme-challengeTXT 记录待 CA 校验通过后再将其清理删除。项目值提供方代码Codeucloud引入版本Sincev4.34.0官方主页https://www.ucloud.cn/对应 APIUDNUCloud DNS相关接口见 UCloud 官方 API 文档提供方的元数据定义在 providers/dns/ucloud/ucloud.toml所有环境变量均以UCLOUD_为命名空间前缀。快速开始签发包含泛域名的证书使用 UCloud 提供方签发证书的最小命令如下摘自官方文档并保持原样UCLOUD_PUBLIC_KEYxxx \ UCLOUD_PRIVATE_KEYyyy \ lego run --dns ucloud -d *.example.com -d example.com其中UCLOUD_PUBLIC_KEY为 UCloud API 公钥Public keyUCLOUD_PRIVATE_KEY为 UCloud API 私钥Private key-d *.example.com -d example.com同时申请泛域名与裸域名ACME 要求两者同时出现在证书中时须显式列出。命令执行后lego 会调用--dns ucloud指定的提供方在 UCloud DNS 中为example.com创建挑战所需的 TXT 记录等待记录生效并完成验证最终签发并保存证书。若需了解lego run的全部命令行参数可查阅 docs/content/references/ref-flags。凭据配置Credentials提供方需要以下两个环境变量作为必填凭据环境变量名说明UCLOUD_PUBLIC_KEYUCloud API 公钥UCLOUD_PRIVATE_KEYUCloud API 私钥这两个变量在源码中对应 providers/dns/ucloud/ucloud.go 中的EnvPublicKey与EnvPrivateKey常量。构造提供方时NewDNSProvider二者缺一不可如果缺失会分别返回ucloud: some credentials information are missing: UCLOUD_PRIVATE_KEY之类的错误在直接使用配置对象NewDNSProviderConfig时若凭据为空则返回ucloud: credentials missing。这些行为均有测试用例覆盖见 providers/dns/ucloud/ucloud_test.go。使用_FILE后缀从文件读取凭据所有 UCloud 相关环境变量包括上面的公钥、私钥都可以在变量名后追加_FILE后缀使变量值指向一个文件路径lego 会读取该文件内容作为实际值。例如UCLOUD_PUBLIC_KEY_FILE/path/to/public_key \ UCLOUD_PRIVATE_KEY_FILE/path/to/private_key \ lego run --dns ucloud -d example.com文件内容只应包含值本身不包含换行或额外字符这一约定与 lego 所有 DNS 提供方一致详见 docs/content/dns/_index.md 中关于_FILE后缀的说明。附加配置Additional Configuration除了必填凭据UCloud 提供方还支持以下可选环境变量环境变量名说明默认值UCLOUD_HTTP_TIMEOUTAPI 请求超时时间秒30UCLOUD_POLLING_INTERVAL两次 DNS 传播检查之间的间隔秒2UCLOUD_PROJECT_IDUCloud 项目 ID无UCLOUD_PROPAGATION_TIMEOUTDNS 传播最长等待时间秒60UCLOUD_REGION地域Region无UCLOUD_TTL挑战 TXT 记录的 TTL秒600这些参数对应 providers/dns/ucloud/ucloud.go 中Config结构体的字段并由NewDefaultConfig见 providers/dns/ucloud/ucloud.go读取环境变量并填充默认值。各参数的作用与源码依据UCLOUD_TTL创建 TXT 记录时写入的 TTL 值字符串形式传入 UCloud API。默认 600 秒在Present中通过addRequest.TTL ucloud.String(strconv.Itoa(d.config.TTL))设置。UCLOUD_PROPAGATION_TIMEOUT/UCLOUD_POLLING_INTERVAL控制 lego 等待 DNS 记录全球生效的轮询策略。默认值取自 lego 全局常量dns01.DefaultPropagationTimeout60 秒与dns01.DefaultPollingInterval2 秒最终由Timeout()方法返回给挑战流程使用见 providers/dns/ucloud/ucloud.go。UCLOUD_HTTP_TIMEOUT每次调用 UCloud API 的超时上限默认 30 秒。Present/CleanUp中所有请求都通过WithTimeout(d.config.HTTPTimeout)生效。UCLOUD_REGION与UCLOUD_PROJECT_ID二者均为可选非空时会被写入 UCloud SDK 的客户端配置cfg.Region/cfg.ProjectId用于限定 API 调用的地域与项目范围。若你的账号资源位于非默认地域或多个项目下通常需要显式指定。同样地以上所有变量都支持_FILE后缀的文件方式引用。使用配置文件方式签发除命令行外lego 也支持通过.lego.yml配置文件声明挑战方式。将 DNS 提供方声明为ucloud即可例如challenges: cf: dns: provider: ucloud certificates: foo: domains: - example.com - *.example.com随后在执行lego无子命令时通过环境变量提供UCLOUD_PUBLIC_KEY/UCLOUD_PRIVATE_KEYUCLOUD_PUBLIC_KEYxxx \ UCLOUD_PRIVATE_KEYyyy \ lego配置文件相关字段说明可参考 docs/content/references/ref-file 中的challenges小节以及 DNS 挑战的整体指南 docs/content/obtain/dns01.md。源码实现与工作流程从源码结构看UCloud 提供方的实现分为两层对外暴露的提供方层与封装 API 调用的内部客户端层。提供方层providers/dns/ucloud/ucloud.goDNSProvider实现了challenge.Provider接口核心生命周期如下Presentproviders/dns/ucloud/ucloud.go由挑战信息计算出_acme-challenge.example.com形式的有效 FQDN通过FindZoneByFqdn定位权威 DNS 区域如example.com调用DomainDNSAdd创建一条TXT记录值为挑战 key authorizationTTL 取UCLOUD_TTL。CleanUpproviders/dns/ucloud/ucloud.go通过DomainDNSQuery拉取该域名全部 DNS 记录逐条匹配Type TXT、记录名等于挑战 FQDN、且内容等于挑战值的记录调用DeleteDNSRecord精确删除避免误删其他 TXT 记录。Timeout返回传播超时与轮询间隔交由 lego 的 DNS-01 传播检查机制使用。同时DNSProvider显式声明实现了challenge.ProviderTimeout接口见 providers/dns/ucloud/ucloud.go。内部客户端层providers/dns/ucloud/internal/client.go该层基于 UCloud 官方 Go SDKgithub.com/ucloud/ucloud-sdk-go封装以Product: UDNR初始化客户端并提供三个 API 动作providers/dns/ucloud/internal/client.go方法对应 UCloud API 动作用途DomainDNSAddUdnrDomainDNSAdd添加 DNS 记录DomainDNSQueryUdnrDomainDNSQuery查询域名 DNS 记录DeleteDNSRecordUdnrDeleteDnsRecord删除 DNS 记录请求与响应结构体定义在 providers/dns/ucloud/internal/types.go其中记录字段包括DnsType类型、RecordName记录名、Content内容、Prio优先级、TTL等。测试验证仓库为 UCloud 提供方提供了完整的单元测试与模拟服务器测试providers/dns/ucloud/ucloud_test.go覆盖缺省凭据错误、Present/CleanUp的完整 HTTP 交互使用httptest模拟 UCloud API校验表单参数中的Action、Dn、RecordName、DnsType、Content、TTL与签名头。providers/dns/ucloud/internal/client_test.go验证三个 API 动作的请求构造与响应解析测试固件位于 providers/dns/ucloud/internal/fixtures。测试中还会校验请求头U-Timestamp-Ms与 URL 编码表单体现了 UCloud API 基于时间戳与签名Signature参数的鉴权方式。此外还有TestLivePresent/TestLiveCleanUp两个仅在有真实凭据环境LEGO_LIVE下执行的在线用例可用于对真实 UCloud 账号做端到端验证。常见问题与注意事项凭据缺失UCLOUD_PUBLIC_KEY与UCLOUD_PRIVATE_KEY必须同时提供否则提供方初始化直接报错不会发起任何 API 调用。TTL 与传播若你的 DNS 服务商或权威解析缓存较慢可适当调大UCLOUD_TTL前先确认默认值 600 秒是否满足传播需求同时可增大UCLOUD_PROPAGATION_TIMEOUT以延长等待窗口。地域与项目在多项目/多地域场景下请结合账号实际资源所在位置设置UCLOUD_REGION与UCLOUD_PROJECT_ID避免 API 在错误的范围下找不到目标域名。Zone 解析Present/CleanUp依赖 lego 内置的权威区域解析FindZoneByFqdn。如果域名存在多个 SOA如内网与公网双 zone可通过--dns.resolvers指定外部权威解析服务器具体说明见 docs/content/obtain/dns01.md 与 docs/content/advanced/tips.md。延伸阅读DNS 提供方的通用配置与凭据规范含_FILE后缀约定docs/content/dns/_index.mdDNS-01 挑战完整指南docs/content/obtain/dns01.md提供方声明文件生成文档的元数据来源providers/dns/ucloud/ucloud.toml提供方核心实现providers/dns/ucloud/ucloud.goAPI 客户端实现providers/dns/ucloud/internal/client.go赞分享网络安全密码学【免费下载链接】legoLets Encrypt/ACME client and library written in Go项目地址https://gitcode.com/gh_mirrors/le/lego点击查看免费下载相关推荐使用 lego 通过 Constellix DNS 提供商签发 ACME 证书DNS-01 挑战完整配置指南使用 lego 通过 Constellix DNS 提供商签发 ACME 证书DNS 01 挑战完整配置指南 本文以 legoLets Encrypt/A网络安全密码学lego 使用 Hosting.de DNS Provider 签发证书DNS-01 挑战配置完整指南lego 使用 Hosting.de DNS Provider 签发证书DNS 01 挑战配置完整指南 Hosting.de 是 legoLets Enc网络安全密码学使用 lego 通过 Veesp DNS 提供商签发通配符证书DNS-01 挑战完整指南使用 lego 通过 Veesp DNS 提供商签发通配符证书DNS 01 挑战完整指南 导读 本文围绕 lego 的 Veesp DNS 提供商代码 v网络安全密码学上一篇AntiDupl终极解决方案专业级重复图片检测与磁盘空间释放完整手册下一篇安卓虚拟相机完全指南3步实现摄像头内容替换创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表