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

  1. Read the wrapped err text to identify why lego rejected the DNS-01 provider.
  2. Ensure the lego.Client was initialized normally (lego.NewClient with a valid ACME user) before setting the challenge.
  3. Rebuild the provider with default propagation/timeout settings to rule out invalid options.
  4. 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

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


AI-assisted analysis of Billionmail/BillionMail@fc36c76c05 (2026-09-05). Data as JSON: /api/errors/5c9b848e017f76e4. Report an issue: GitHub.