{"id":42197178,"url":"https://github.com/zllovesuki/challenger","last_synced_at":"2026-01-27T00:18:39.010Z","repository":{"id":49845849,"uuid":"518302067","full_name":"zllovesuki/challenger","owner":"zllovesuki","description":"Hosted ACME challenges via Cloudflare via CNAME: dns.providers.challenger","archived":false,"fork":false,"pushed_at":"2022-07-30T04:49:56.000Z","size":37,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"main","last_synced_at":"2024-11-21T20:48:31.559Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/zllovesuki.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2022-07-27T03:57:44.000Z","updated_at":"2022-07-27T08:17:47.000Z","dependencies_parsed_at":"2022-08-31T18:31:14.789Z","dependency_job_id":null,"html_url":"https://github.com/zllovesuki/challenger","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/zllovesuki/challenger","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zllovesuki%2Fchallenger","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zllovesuki%2Fchallenger/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zllovesuki%2Fchallenger/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zllovesuki%2Fchallenger/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zllovesuki","download_url":"https://codeload.github.com/zllovesuki/challenger/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zllovesuki%2Fchallenger/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28792676,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-26T21:49:50.245Z","status":"ssl_error","status_checked_at":"2026-01-26T21:48:29.455Z","response_time":59,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-01-27T00:18:38.770Z","updated_at":"2026-01-27T00:18:38.923Z","avatar_url":"https://github.com/zllovesuki.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"Hosted ACME Challenge on Cloudflare for Caddy\n===========================\n\nThis package contains a DNS provider module for [Caddy](https://github.com/caddyserver/caddy). It can be used to manage hosted ACME challenge records with Cloudflare accounts under a specific zone.\n\nThis is useful when you have a Caddy instance/cluster managing domains across different DNS providers, and you need a single point of entry for ACME challenges.\n\n## How to use\n\nIf you want to host acme challenges for `secure.example.com` (or its wildcard variant), add a CNAME record `_acme-challenge.secure.example.com` pointing to `secure.example.com.acmehostedexample.com`, where `acmehostedexample.com` is the zone in the config and in Cloudflare.\n\n## Caddy module name\n\n```\ndns.providers.challenger\n```\n\n## Config examples\n\nTo use this module for the ACME DNS challenge, [configure the ACME issuer in your Caddy JSON](https://caddyserver.com/docs/json/apps/tls/automation/policies/issuer/acme/) like so:\n\n```json\n{\n\t\"module\": \"acme\",\n\t\"challenges\": {\n\t\t\"dns\": {\n\t\t\t\"provider\": {\n\t\t\t\t\"name\": \"challenger\",\n\t\t\t\t\"api_token\": \"{env.CF_API_TOKEN}\",\n                \"root_zone\": \"acmehostedexample.com\"\n\t\t\t}\n\t\t}\n\t}\n}\n```\n\nor with the Caddyfile:\n\n```\ntls {\n\tdns challenger {env.CF_API_TOKEN} acmehostedexample.com\n}\n```\n\nYou can replace `{env.CF_API_TOKEN}` with the actual auth token if you prefer to put it directly in your config instead of an environment variable.\n\n`acmehostedexample.com` is the zone responsible for hosting acme challenges for other zones.\n\n## Authenticating\n\nSee [the associated README in the libdns package](https://github.com/libdns/cloudflare) for important information about credentials.\n\n**NOTE**: If migrating from Caddy v1, you will need to change from using a Cloudflare API Key to a scoped API Token. Please see link above for more information.\n\n## Troubleshooting\n\n### Error: `Invalid request headers`\n\nIf providing your API token via an ENV var which is accidentally not set/available when running Caddy, you'll receive this error from Cloudflare.\n\nDouble check that Caddy has access to a valid CF API token.\n\n### Error: `timed out waiting for record to fully propagate`\n\nSome environments may have trouble querying the `_acme-challenge` TXT record from Cloudflare. Verify in the Cloudflare dashboard that the temporary record is being created.\n\nIf the record does exist, your DNS resolver may be caching an earlier response before the record was valid. You can instead configure Caddy to use an alternative DNS resolver such as [Cloudflare's official `1.1.1.1`](https://www.cloudflare.com/en-gb/learning/dns/what-is-1.1.1.1/).\n\nAdd a custom `resolver` to the [`tls` directive](https://caddyserver.com/docs/caddyfile/directives/tls):\n\n```\ntls {\n  dns challenger {env.CF_API_TOKEN} acmehostedexample.com\n  resolvers 1.1.1.1\n}\n```\n\nOr with Caddy JSON to the `acme` module: [`challenges.dns.provider.resolvers: [\"1.1.1.1\"]`](https://caddyserver.com/docs/json/apps/tls/automation/policies/issuer/acme/challenges/dns/resolvers/).\n\n## Credits\n\nThis package is based on [libdns/cloudflare](https://github.com/libdns/cloudflare) and [caddy-dns/cloudflare](https://github.com/caddy-dns/cloudflare)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzllovesuki%2Fchallenger","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzllovesuki%2Fchallenger","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzllovesuki%2Fchallenger/lists"}