Billionmail/BillionMail · error
DNS verification setup failed: {}
Error message
DNS verification setup failed: {} What it means
Once the Tencent Cloud provider is built, SetDnsTencentcloud registers it for the DNS-01 challenge via client.Challenge.SetDNS01Provider(p). lego returns an error if the provider is unsuitable for DNS-01 (e.g. no propagation/timeout options accepted, nil provider, or internal registration failure); the code wraps it in this message.
Source
Thrown at core/internal/service/acme/acme.go:145
* @return error Error information
*/
func SetDnsTencentcloud(ctx context.Context, client *lego.Client, keyConfig map[string]string) error {
if keyConfig == nil || keyConfig["SecretId"] == "" || keyConfig["SecretKey"] == "" {
return errors.New(public.LangCtx(ctx, "DNS automated resolution failed: SecretId or SecretKey is empty in TencentCloud configuration file"))
}
cfg := tencentcloud.NewDefaultConfig()
cfg.SecretID = keyConfig["SecretId"]
cfg.SecretKey = keyConfig["SecretKey"]
p, err := tencentcloud.NewDNSProviderConfig(cfg)
if err != nil {
return errors.New(public.LangCtx(ctx, "DNS provider initialization failed: {}", err.Error()))
}
err = client.Challenge.SetDNS01Provider(p)
if err != nil {
return errors.New(public.LangCtx(ctx, "DNS verification setup failed: {}", err.Error()))
}
return nil
}
/**
* @description: Configure DNS verification via Alibaba Cloud
* @param {*lego.Client} client Client
* @param {map[string]string} keyConfig Configuration information
* @return error Error information
*/
func SetDnsAliyun(ctx context.Context, client *lego.Client, keyConfig map[string]string) error {
if keyConfig == nil || keyConfig["APIKey"] == "" || keyConfig["SecretKey"] == "" {
return errors.New(public.LangCtx(ctx, "DNS automated resolution failed: APIKey or SecretKey is empty in AliDNS configuration file"))
}
cfg := alidns.NewDefaultConfig()
cfg.APIKey = keyConfig["APIKey"]
cfg.SecretKey = keyConfig["SecretKey"]View on GitHub (pinned to fc36c76c05)
Solutions
- Read the wrapped err text to identify why lego rejected the DNS-01 provider.
- Ensure the lego.Client was initialized normally (lego.NewClient with a valid ACME user) before setting the challenge.
- Rebuild the provider with default propagation/timeout settings to rule out invalid options.
- Align lego package versions in go.mod so client and provider come from the same module version.
Defensive patterns
Strategy: try-catch
Validate before calling
if client == nil || p == nil {
return errors.New("lego client and DNS provider must be non-nil before SetDNS01Provider")
} Try / catch
err := client.Challenge.SetDNS01Provider(p)
if err != nil {
log.Printf("DNS-01 provider registration failed: %v", err)
return fmt.Errorf("DNS-01 challenge setup failed: %w", err)
} Prevention
- Create the lego client with a valid ACME user before challenge setup.
- Keep lego client and provider packages on the same version.
- Use default propagation/timeout options unless validated otherwise.
- Add an integration test that sets the DNS-01 provider for each supported provider.
When it happens
Trigger: client.Challenge.SetDNS01Provider(p) returns non-nil err in SetDnsTencentcloud (acme.go:144-147) after a successful provider construction.
Common situations: lego client was created without the DNS-01 challenge enabled; a nil or misconfigured provider slipped through; lego version mismatch between client and provider packages; custom propagation options rejected by lego.
Related errors
- DNS automated resolution failed: SecretId or SecretKey is em
- DNS provider initialization failed: {}
- DNS automated resolution failed: APIKey or SecretKey is empt
- DNS automated resolution failed: APIKey or Email is empty in
- DNS automated resolution failed: APIKey or SecretKey is empt
AI-assisted analysis of Billionmail/BillionMail@fc36c76c05 (2026-09-05).
Data as JSON: /api/errors/5c9b848e017f76e4.
Report an issue: GitHub.