ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Certbot DNS-OVH 插件实战:使用 OVH API 自动完成 DNS-01 通配符证书签发

Certbot DNS-OVH 插件实战:使用 OVH API 自动完成 DNS-01 通配符证书签发 网络安全CLI后端【免费下载链接】certbotCertbot is EFFs tool to obtain certs from Lets Encrypt and (optionally) auto-enable HTTPS on your server. It can also act as a client for any other CA that uses the ACME protocol.项目地址https://gitcode.com/gh_mirrors/ce/certbot点击查看免费下载导读certbot-dns-ovh是 EFF 官方 Certbot 项目certbot旗下的一款 DNS 认证插件用于在域名 DNS 托管于 OVH 时通过 OVH 官方 API 自动创建并删除_acme-challengeTXT 记录从而让 Certbot 以全自动方式完成 ACMEdns-01挑战并签发证书尤其适合通配符域名。读完本文你将掌握插件安装与启用方式、OVH API 凭据的申请与配置文件写法、三类典型签发命令单域名 / 多域名 / 自定义传播等待以及凭据安全、权限告警与错误排查等实战要点。插件定位OVH 的 DNS-01 自动化认证器工作原理在 Certbot 主仓库 中DNS 类插件的通用设计是在认证阶段perform向权威 DNS 写入 ACME 验证所需的 TXT 记录等待 DNS 传播后由 ACME 服务器校验校验完成进入清理阶段cleanup时再删除该记录。certbot-dns-ovh正是这一模式的 OVH 实现。它的核心类是 Authenticator声明如下继承自 Certbot 公共基类LexiconDNSAuthenticator位于 dns_common_lexicon.py即“基于 Lexicon 的 DNS 认证器”插件描述为 Obtain certificates using a DNS TXT record (if you are using OVH for DNS).并通过more_info()说明其通过 OVH API 配置 DNS TXT 记录来响应dns-01挑战插件入口在 pyproject.toml 中注册为dns-ovh certbot_dns_ovh._internal.dns_ovh:Authenticator这也是命令行--dns-ovh参数的来源。底层调用链从 CLI 参数到 TXT 记录从源码结构看一次完整的dns-01挑战处理流程为dns_ovh.py 通过add_parser_arguments注册插件专属参数--dns-ovh-credentials并调用父类注册--dns-ovh-propagation-seconds基类DNSAuthenticator.perform见 dns_common.py为每个待验证域名计算validation_domain_name通常形如_acme-challenge.example.com与validation值然后调用子类的_perform_perform经由LexiconDNSAuthenticator的 实现使用 Lexicon 的Client上下文管理器调用 OVH 提供方创建 TXT 记录基类随后按propagation-seconds指定的秒数休眠等待传播再向 ACME 服务器返回响应挑战结束后cleanup调用_cleanup删除同一条 TXT 记录对应实现。凭据到 Lexicon 配置的映射在Authenticator.__init__中插件通过_add_provider_option将凭据文件中的四个键映射为 Lexicon 的 OVH 提供方配置项见 dns_ovh.py凭据文件键Lexicon 提供方配置项含义dns_ovh_endpointauth_entrypointOVH API 端点ovh-eu或ovh-cadns_ovh_application_keyauth_application_key应用密钥Application Keydns_ovh_application_secretauth_application_secret应用机密Application Secretdns_ovh_consumer_keyauth_consumer_key消费者密钥Consumer Key_build_lexicon_config见 dns_common_lexicon.py会把解析后的配置与域名、TTL 组装成 Lexicon 配置对象其中 TTL 由基类固定为 60 秒_ttl属性域名的逐级探测由base_domain_name_guesses完成dns_common.py。安装插件该插件不随 Certbot 默认安装属于独立的可选插件包。在 模块文档 中说明可通过访问 certbot.eff.org 的安装指引选择你的操作系统并切换到 Wildcard通配符标签页按页面提示安装对应插件包。以 Python 生态为例可在装有 Certbot 的同一环境中安装pip install certbot-dns-ovh从 setup.py 可见插件运行时依赖dns-lexicon3.15.1Lexicon 是驱动 OVH API 调用的底层库并声明了acme5.8.0.dev0与certbot5.8.0.dev0的最小版本约束当前仓库中该插件的版本号为5.8.0.dev0。也就是说请确保 Certbot 与插件版本匹配。安装后可通过certbot plugins命令验证插件是否可见输出中应包含dns-ovh。命令行参数插件共提供两个命令行参数其中--dns-ovh-credentials为必填参数说明是否必填--dns-ovh-credentialsOVH 凭据 INI 文件的路径必填--dns-ovh-propagation-seconds创建 TXT 记录后、请求 ACME 服务器校验前等待 DNS 传播的秒数默认 30可选关于默认值需要说明两点在 模块文档 的参数表中--dns-ovh-propagation-seconds标注的默认值为 30但从当前仓库源码看dns_ovh.py 中add_parser_arguments传入的默认值是 120 秒。在 Certbot 的 DNS 插件族中各插件默认值并不统一如 Cloudflare/DigitalOcean 为 10 秒、Google/RFC2136 为 60 秒、Linode 与 OVH 同为 120 秒建议以你安装版本实际certbot --help all的输出为准。若遇到“ACME 服务器未能及时看到 TXT 记录”的失败可像下文示例那样显式调大该值。申请 OVH API 凭据并编写凭据文件申请凭据使用本插件前需要在 OVH 控制台为账号创建一组 API 凭据Application Key、Application Secret、Consumer Key。模块文档给出了两个创建入口分别对应两个 API 端点OVH Europe欧洲区https://eu.api.ovh.com/createToken/端点标识为ovh-euOVH North America北美区https://ca.api.ovh.com/createToken/端点标识为ovh-ca。创建时需授予账号以下访问规则。若你的域名全部由 OVH 托管、需要允许所有域名则授予GET /domain/zone/* PUT /domain/zone/* POST /domain/zone/* DELETE /domain/zone/*若只允许单个域名例如仅托管example.com则收紧为GET /domain/zone/ GET /domain/zone/REQUIRED_DOMAIN/* PUT /domain/zone/REQUIRED_DOMAIN/* POST /domain/zone/REQUIRED_DOMAIN/* DELETE /domain/zone/REQUIRED_DOMAIN/*其中REQUIRED_DOMAIN替换为实际域名。建议遵循最小权限原则按“单域名授权”起步仅在确有通配需求时再放宽。编写凭据文件凭据文件是 INI 格式模块文档给出的完整示例为# OVH API credentials used by Certbot dns_ovh_endpoint ovh-eu dns_ovh_application_key MDAwMDAwMDAwMDAw dns_ovh_application_secret MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw dns_ovh_consumer_key MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw注意MDAw...仅是文档占位示例实际使用必须替换为你在 OVH 控制台真实申请到的值。若你在北美区申请将dns_ovh_endpoint改为ovh-ca。凭据文件路径可通过--dns-ovh-credentials命令行参数指定也可在 Certbot 交互提示中输入。Certbot 会记录该文件路径用于后续续期renewal但不会保存文件内容本身见 模块文档。凭据安全须知OVH API 凭据等同于你的 OVH 账号密码必须严格保护。模块文档中的警示要点如下能读取该文件的人可以用这些凭据以你的名义发起任意 OVH API 调用能让 Certbot 以这些凭据运行的人可以对相关域名完成dns-01挑战从而获取新证书或吊销已有证书——即使这些域名并非由本服务器管理。此外Certbot 会在每次使用该凭据文件含续期时检查文件权限若检测到其他用户可访问会输出Unsafe permissions on credentials configuration file警告并附上文件路径。该警告无法通过参数关闭只能通过修复权限来消除例如chmod 600 ~/.secrets/certbot/ovh.ini从源码看这一检查由validate_file_permissions实现dns_common.py它会在文件被其他用户可读时记录 warning 日志CredentialsConfigurationdns_common.py则负责解析 INI 并强制校验四个必需键是否存在且非空缺失时会抛出PluginError提示形如Property dns_ovh_application_key not found (should be ...)。使用示例以下示例均假设凭据文件位于~/.secrets/certbot/ovh.ini请务必先按上文设置好权限。为单个域名签发证书certbot certonly \ --dns-ovh \ --dns-ovh-credentials ~/.secrets/certbot/ovh.ini \ -d example.comcertonly表示只获取证书而不修改 Web 服务器配置--dns-ovh启用本插件。同时为多个域名签发一张证书certbot certonly \ --dns-ovh \ --dns-ovh-credentials ~/.secrets/certbot/ovh.ini \ -d example.com \ -d www.example.com该命令为example.com与www.example.com签发一张包含两个 SAN 的证书。自定义 DNS 传播等待时间certbot certonly \ --dns-ovh \ --dns-ovh-credentials ~/.secrets/certbot/ovh.ini \ --dns-ovh-propagation-seconds 60 \ -d example.com--dns-ovh-propagation-seconds 60表示创建 TXT 记录后等待 60 秒再请 ACME 服务器校验。当你的 DNS 传播较慢、反复出现校验失败时可适当增大该值。结合通配符域名由于插件走dns-01挑战它也天然支持通配符域名。例如certbot certonly \ --dns-ovh \ --dns-ovh-credentials ~/.secrets/certbot/ovh.ini \ -d *.example.com \ -d example.com注意通配符证书只能通过dns-01方式签发这正是此类 DNS 插件最主要的应用场景。常见错误排查从 Authenticator 的错误处理实现 可以总结出两条高频错误提示及其含义报错特征可能原因HTTP400 Client Error提示 Is your Application Secret value correct?Application Secret 填写错误HTTP403 Client Error提示 Are your Application Key and Consumer Key values correct?Application Key 或 Consumer Key 错误或凭据权限不足此外若插件在查找域名对应 DNS zone 时抛出Domain ... not found类错误可从以下方向排查该域名确实未被 OVH DNS 托管或尚未在 OVH 创建对应的 zone凭据的访问规则未覆盖该域名可对照上文“单域名授权”部分检查dns_ovh_endpoint与实际申请凭据的区域不一致欧洲区应为ovh-eu北美区应为ovh-ca。插件测试用例 dns_ovh_test.py 中的DOMAIN_NOT_FOUND与LOGIN_ERROR403 Client Error正是对上述两类场景的覆盖可作为复现与验证的参考。续期与自动化由于 Certbot 在签发时记录了凭据文件路径续期命令无需重复传参certbot renew续期期间 Certbot 会重新读取该凭据文件完成dns-01挑战同样会触发权限检查与告警。若希望临时修改续期行为可在续期命令中显式覆盖参数例如加大传播等待时间certbot renew --dns-ovh-propagation-seconds 90将certbot renew配置到 cron 或 systemd timer 即可实现证书的自动续期。参考资源插件入口与核心实现certbot-dns-ovh/src/certbot_dns_ovh/_internal/dns_ovh.py插件公开模块含完整参数与凭据文档certbot-dns-ovh/src/certbot_dns_ovh/init.py插件包元数据与入口注册certbot-dns-ovh/pyproject.toml、certbot-dns-ovh/setup.py插件测试certbot-dns-ovh/src/certbot_dns_ovh/_internal/tests/dns_ovh_test.pyLexicon 基类实现certbot/src/certbot/plugins/dns_common_lexicon.pyDNS 插件公共基类与凭据处理certbot/src/certbot/plugins/dns_common.py赞分享网络安全CLI后端【免费下载链接】certbotCertbot is EFFs tool to obtain certs from Lets Encrypt and (optionally) auto-enable HTTPS on your server. It can also act as a client for any other CA that uses the ACME protocol.项目地址https://gitcode.com/gh_mirrors/ce/certbot点击查看免费下载相关推荐certbot-dns-nsone 插件实战使用 NS1 DNS 自动完成 dns-01 验证并签发通配符证书certbot dns nsone 插件实战使用 NS1 DNS 自动完成 dns 01 验证并签发通配符证书 本指南围绕 Certbot 官方 DNS 插件网络安全CLI后端Certbot 通配符证书签发实战certbot-dns-google 插件与 Google Cloud DNS 的 dns-01 自动化配置指南Certbot 通配符证书签发实战certbot dns google 插件与 Google Cloud DNS 的 dns 01 自动化配置指南 本指南聚焦网络安全CLI后端Certbot DNSimple DNS 插件certbot-dns-dnsimple实战指南基于 DNS-01 挑战的自动化通配符证书签发Certbot DNSimple DNS 插件certbot dns dnsimple实战指南基于 DNS 01 挑战的自动化通配符证书签发 Certbo网络安全CLI后端上一篇如何解决SD-WebUI-Inpaint-Anything自定义修复模型不显示的问题下一篇终极指南如何用KKManager轻松管理你的Illusion游戏Mod和角色卡创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进