AcmeX supports a wide range of DNS providers for automated DNS-01 challenge fulfillment.
| Provider | Feature Flag | Configuration Requirements |
|---|---|---|
| Cloudflare | dns-cloudflare |
API Token, Zone ID |
| Route53 | dns-route53 |
AWS Credentials, Hosted Zone ID |
| Tencent Cloud (DNSPod) | dns-tencent |
SecretId, SecretKey |
| Huawei Cloud | dns-huawei |
AccessKey, SecretKey, ProjectId, Region |
| Google Cloud DNS | dns-google |
Project ID, Service Account (optional) |
Uses the Cloudflare API v4. Requires an API Token with Zone.DNS permissions.
Uses the official AWS SDK. Supports standard AWS credential resolution (env vars, IAM roles, etc.).
Uses Tencent Cloud API v3 with TC3-HMAC-SHA256 signing.
CreateRecord, DeleteRecord, and DescribeRecordList.Uses Huawei Cloud API with SDK-HMAC-SHA256 signing.
cn-north-4).DNS-01 propagation is configured through the stable v0.10.0 [dns.propagation]
schema. AcmeX first observes the authoritative nameserver set for the resolved
zone, then optionally checks the configured recursive resolvers. An empty
recursive_resolvers list is an explicit opt-out from recursive confirmation.
[dns.propagation]
authoritative_quorum = "all" # "all" or a positive integer
recursive_resolvers = [] # opt out by default; use ["1.1.1.1:53"] to enable
recursive_quorum = 1
max_wait_secs = 300
poll_interval_secs = 5
query_timeout_secs = 3
Provider-specific overrides live under [dns.providers.<id>.propagation] and
merge field-by-field with the global policy. Fields that are not set keep the
global value.
[dns.providers.internal.propagation]
recursive_resolvers = []
poll_interval_secs = 2
All DNS providers in AcmeX must implement the DnsProvider trait:
#[async_trait]
pub trait DnsProvider: Send + Sync {
async fn create_txt_record(&self, domain: &str, value: &str) -> Result<String>;
async fn delete_txt_record(&self, domain: &str, record_id: &str) -> Result<()>;
async fn verify_record(&self, domain: &str, value: &str) -> Result<bool>;
}
delete_txt_record to remove challenge records after validation.