Skip to content

acme-dns rejects acmetest TXT records (bad_txt) due to strict 43-character validation #33

@kubax

Description

@kubax

Hi,
I'm currently working on a PR for acme.sh that adds optional JSON-based storage to the dns_acmedns plugin.

To get the PR reviewed, I must pass the DNS-API-Test in the acme.sh CI system.
However, this is currently not possible because of how acme-dns validates TXT records.

Problem Summary

The acme.sh DNS-API test (DNS.yml) generates synthetic TXT challenge values like:

acmeTestTxtRecord_1763716270

These records are much shorter than 43 characters, but acme-dns only accepts TXT values that satisfy this function:

func validTXT(s string) bool {
    sn := sanitizeString(s)
    if utf8.RuneCountInString(s) == 43 && utf8.RuneCountInString(sn) == 43 {
        // 43 chars is the current LE auth key size, but not limited / defined by ACME
        return true
    }
    return false
}

Since the CI-generated values do not meet this condition, acme-dns responds with:

{"error": "bad_txt"}

This prevents the acme.sh DNS-API test from completing successfully, even though the plugin works correctly with real ACME challenge values.

Effect

Because acmetest uses TXT values shorter than 43 characters, every attempt to validate the test TXT record fails, causing the entire DNS-API test to fail.
This blocks verification of the acme.sh PR, even though the implementation behaves correctly with actual ACME challenges.

Question / Request

Would it be possible to consider one of the following options to improve compatibility with automated test frameworks such as acmetest?

  1. Adjust the acmetest TXT record generation so that it creates valid 43‑character TXT strings compatible with acme-dns,
    or
  2. Change the acme.sh DNS check to soft-fail only this specific TXT‑update step, allowing the remaining DNS workflow tests to execute successfully even when acme-dns rejects the synthetic TXT value.

At the moment, there is no way to pass the acme.sh DNS-API test using acme-dns because the test TXT values are rejected before they can be stored.

Any clarification or suggestions would be greatly appreciated.

Thanks!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions