[Acme] Re: RFC 8555 Last Call Draft Change Request
"Fabian V. Thobe" <fabian@thobe.eu> Tue, 14 July 2026 16:34 UTC
Return-Path: <fabian@thobe.eu>
X-Original-To: acme@mail2.ietf.org
Delivered-To: acme@mail2.ietf.org
Received: from localhost (localhost [127.0.0.1]) by mail2.ietf.org (Postfix) with ESMTP id D50D6116AAE5D for <acme@mail2.ietf.org>; Tue, 14 Jul 2026 09:34:39 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ietf.org; s=ietf1; t=1784046879; bh=FNhCcYcHNgaT5uh3hU9wdhKUBcOaMtU8p5AtTwxNcqM=; h=References:In-Reply-To:From:Date:Subject:To; b=KTiiO0aEqQtGZG8bW9qFTocxnBbJ5YlAunK4CpwMVxbnbXUfZVbccOs7jfOau1xIi 2tCP971d22+TXxyq06NnCDic62tsjPhu4O1tnkWN+yj518+1+lSEE6+o1MXPX3CSB3 qOWnLpQrLcV4fxxBFpA+vX79HWDsutgszqMX8EPg=
X-Virus-Scanned: amavisd-new at ietf.org
X-Spam-Flag: NO
X-Spam-Score: -2.087
X-Spam-Level:
X-Spam-Status: No, score=-2.087 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, HTML_FONT_LOW_CONTRAST=0.001, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, TVD_PH_BODY_ACCOUNTS_PRE=0.001, T_KAM_HTML_FONT_INVALID=0.01] autolearn=ham autolearn_force=no
Authentication-Results: mail2.ietf.org (amavisd-new); dkim=pass (1024-bit key) header.d=thobe.eu
Received: from mail2.ietf.org ([166.84.6.31]) by localhost (mail2.ietf.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id pbBa3SsPaJk9 for <acme@mail2.ietf.org>; Tue, 14 Jul 2026 09:34:38 -0700 (PDT)
Received: from mail-wr1-x42e.google.com (mail-wr1-x42e.google.com [IPv6:2a00:1450:4864:20::42e]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature ECDSA (P-256) server-digest SHA256) (No client certificate requested) by mail2.ietf.org (Postfix) with ESMTPS id 1474F116AAE56 for <acme@ietf.org>; Tue, 14 Jul 2026 09:34:38 -0700 (PDT)
Received: by mail-wr1-x42e.google.com with SMTP id ffacd0b85a97d-4703bc0a99aso2675644f8f.3 for <acme@ietf.org>; Tue, 14 Jul 2026 09:34:38 -0700 (PDT)
ARC-Seal: i=1; a=rsa-sha256; t=1784046877; cv=none; d=google.com; s=arc-20260327; b=ZRRUnb+SlHPC4hs0FpCDConf9asv3s96rCQwUZi4UYV1eUW7ihWYn8gghN/Oxjq51H INQldODh6dxLasEGO908/ltZ2CrKlWqahosTGhWe++YnWt7Cv+P+xhuwC3rWWizzVBCT NHA6XVXQa/fz0zLTEz4/LrETRX3vQoNAkvW0yOOukUlp8MpMPZ+A+cYUrCyPiNd/FI/0 evcJTQHV2b+MVwqiXWDEu+QRP/ksqIbPHJnxpFR4EtOsu/fNwEV95GnQAKKzEPkD4omw NUNp4mGP2C9EH5WoAtmqOpIi/7/U2YeJe3VWZDWTVqtVlJu1arzkhpLnHr5eJolZByYs TUVA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20260327; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :dkim-signature; bh=ddtwgs9FU49uT9xC58C8OfsLZInlTaYcABwFRDdzJzs=; fh=FsstuwMttWLQ3Or/hON/k6d0sP4hWjEB5KnC48Ftt34=; b=RHr0TfydXvv6ndEtrmqXQ772sLb4XQMrdTUUPLld+NBZbepUih03gERmUJBA8X5o4E 6CBsj3VbdYlpg6WVkgAh3LS6zifMAvcvA6nKIwZl27EyJ7+UF+axaR31DGTl27EuTE/7 1wwFPUYFPQz0P8HSBkAg0DH3w/8ielclTFxkgOUv2RMaUz/fmc+XBpvrMe8vRfZcqptO gJuewcrJjS+ZlK3i0yW484pHBUZq9d7e4Fd3qbnpw7hXVjHVvsm8+n+ZAywtgzYQmlW8 QcL3v1txamd2o9DtMr4BiFAzioTDDTltvd5wtGpiuP8gFID3MVmxSQHokenAa5YSp5yP MiEQ==; darn=ietf.org
ARC-Authentication-Results: i=1; mx.google.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thobe.eu; s=google; t=1784046877; x=1784651677; darn=ietf.org; h=content-type:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to :content-type; bh=ddtwgs9FU49uT9xC58C8OfsLZInlTaYcABwFRDdzJzs=; b=cqMV/T5cy9pY7hwnQgJlRxCr3CBfehyMurz90xc/3u3OyJ9xghnSfo0g5DBmRU4oQV Zl+WHjoNr7oiGtFOjzqY+ALTr4gqJ73DlhpBzzhqVOY8Eaock+khMk1PnfkYJWm3Rq2B yQfNCz/kwE6m0aqz1MoWZuuxFEPKg5cw9/gdU=
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784046877; x=1784651677; h=content-type:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=ddtwgs9FU49uT9xC58C8OfsLZInlTaYcABwFRDdzJzs=; b=G/JuQsYLdzMADGgkJe4Zotxae7E88Llqvquyy2ilgT71skgI2lBVwac8j5hgsFIerU bQrvOOvEulpoE2q6n+Zdn7keqSCegC9NtQi6s7IW7odPYKuugDTSiPJhPLdDYDTR6hs4 QL2jDle6AHl2yweg9xR4FQRG+fksBKYKy/bwx8cutCnElihC5z3IQ8TXVtZqvsPh2NqM MVPGKtVtYySaXM3sfc7w5MtiiZeSCUn9fQE5l/zxitUDckIInobKhYlT0D35kXCY8imf x+vKLJJuvvAV3f9tMLPBXBGCArTZumAPb014A+wlhz7a7fu7ooYleiJ5XOtIUgs6QS/h D8pQ==
X-Gm-Message-State: AOJu0Yxt7A7rvjrqghtV/058iCtZ/GsMJSVe9nHUy2LvbwPXzmJdvIor N4NcUfyycdAajzDhULSxNXrySWX6gyJv5OZKRdMByoCW7F6WTqtKVPbyy41zLsFYQRgW8JH9HFn 7jyRHqFuTsGZ8msP2/ewhiLtSjgypkDFgUCk05LoP4sX4hKjliRKTmkqvXQ==
X-Gm-Gg: AfdE7ckSrb/Pw0sQKwjPjbfcSFBGCZonld3T0oD0LyRaSuRM1dXACorElFU/lrhl+43 IuC4y8fDnpT5GimNRVGIMSPz7bEvP+aG28nQCnw5V40+3zz+P+VaM9fCCDFsjIuTrb2qlXWz6u7 1VHvvewthxTXhI7+TMxCj6Wp28KVNKzVzPsrNk3zpXWOtP5SFFzFkzjUl/5zD7z89L6kxSpEjo5 18k0wdkwaGyS4oKtu+mjkZiAC5TVlYkFgHqc7wYEP4oMhxeJzATMbuBbvjKHzud91DdeXc7aGCy OnkLBO5CVW7bKqOc3I2DRMI69lRRXrwrY7IWJiQ=
X-Received: by 2002:a5d:5f47:0:b0:470:a7d8:75f5 with SMTP id ffacd0b85a97d-47f2dcf75a5mr15744697f8f.42.1784046876770; Tue, 14 Jul 2026 09:34:36 -0700 (PDT)
MIME-Version: 1.0
References: <CADn23j4Ugi5_DXA65u4CZubMOqJMLwgM1jiqHG4poJm-dZUOaQ@mail.gmail.com> <OxVXykS--F-9@cbonnell.com> <CADn23j5AnuiaBHpUMzFKJkd3jGcTyPCJ6xCpPt27kRbrXLHmhg@mail.gmail.com> <CADn23j6thVTvaKWRJPki87RyQMET=4Ls6dh=_4sBU5_RyEyYFg@mail.gmail.com>
In-Reply-To: <CADn23j6thVTvaKWRJPki87RyQMET=4Ls6dh=_4sBU5_RyEyYFg@mail.gmail.com>
From: "Fabian V. Thobe" <fabian@thobe.eu>
Date: Tue, 14 Jul 2026 18:34:24 +0200
X-Gm-Features: AUfX_my4rzSRLJ-Z4TnECwFspuBV6LiSNSnUS0-pf2gS7QQW_cpnoCMtAVkvukE
Message-ID: <CADn23j7B=s-rT6j=ObrNXGUKNnQSAt+dK7yXR4C_3OHmswvP_w@mail.gmail.com>
To: acme@ietf.org
Content-Type: multipart/alternative; boundary="0000000000005a5323065694c8c6"
Message-ID-Hash: D375OY4BD2HQFLRKWCDEKQ3UCAGNAGVS
X-Message-ID-Hash: D375OY4BD2HQFLRKWCDEKQ3UCAGNAGVS
X-MailFrom: fabian@thobe.eu
X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-acme.ietf.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header
X-Mailman-Version: 3.3.9rc6
Precedence: list
Subject: [Acme] Re: RFC 8555 Last Call Draft Change Request
List-Id: Automated Certificate Management Environment <acme.ietf.org>
Archived-At: <https://mailarchive.ietf.org/arch/msg/acme/mESy9BgF-vmzyVcYtrGT2iQvpkI>
List-Archive: <https://mailarchive.ietf.org/arch/browse/acme>
List-Help: <mailto:acme-request@ietf.org?subject=help>
List-Owner: <mailto:acme-owner@ietf.org>
List-Post: <mailto:acme@ietf.org>
List-Subscribe: <mailto:acme-join@ietf.org>
List-Unsubscribe: <mailto:acme-leave@ietf.org>
Small errata of the previous email:
*If you want to submit a proposed solution, I suggest you write an
Internet-Draft and submit it to the IETF Datatracker so that the WG has a
draft to review. Potentially, some of the folks on this mailing list might
volunteer to help you write it, if there is enough interest in solving this
problem*
That is definitely a big one, I'd love to do that. *I wouldn't *like to
invalidate accounts as for the tremendous side effects that could have on
weak client side implementations and unintentional failed renewal. I think
requiring re-authorization is sufficient, but maybe I am missing something.
On Tue, Jul 14, 2026 at 6:25 PM Fabian V. Thobe <fabian@thobe.eu> wrote:
> Hey Mike, Hey Corey,
>
> First, thank you very much for your kind review of my initial email.
> Having had personal ties to people in countries which would not be
> considered free, I am surely more sensitive than the next guy and more
> sceptical towards infrastructure around me.
>
>
> *In general, reuse of authorizations is desirable. For "high security"
> environments, clients could proactively deactivate authorizations after
> certificate issuance per RFC 8555, section 7.5.2. So, I think the current
> spec and server implementations are sufficient, provided that the server
> implements deactivating authorizations.*
> *I agree that this is a potential gap in the ACME spec. RFC 8555 allows
> revocation requests to be signed by any account that has valid
> authorizations for all identifiers in the certificate, but:*
>
> 1.
> *There is no language mandating the deactivation of authorizations in the
> course of revocation, and: *
> 2. *Revocation requires a certificate to revoke.*
>
> *Additionally, there's no language in section 7.5.2 to invalidate
> authorizations across all accounts.*
>
>
> The fun part is, that I fully agree with you regarding 7.5.2, technically
> for ease of implementation though, I believe that the organic way to pass a
> cache policy would be with the item it governs > hence with the order to be
> subsequently stored with the authorization itself, a simple caching : true
> / false together with the order would basically solve the entire issue.
>
> "identifiers": [
> { "type": "dns", "value": "example.org", "caching" : "false" }
> ],
>
> I feel this would be the most lightweight solution and also go hand in
> hand with keeping 8555 as lightweight as possible.
>
> *You don't want to make an API like that un-authenticated because then
> that becomes a vector for DoS attacks. *
>
>
> Good that we all don't want to go that road XD
>
> *But I also see your idea to add a "I lost my account key" feature to ACME
> that lets you do a DNS-01 challenge in order to prove ownership and thereby
> revoke authorization to any existing ACME accounts (this feels to me
> similar to a "I forgot my password" flow). I think that's an interesting
> idea worth exploring.*
>
> That is definitely a big one, I'd love to do that. I would like to
> invalidate accounts as for the tremendous side effects that could have on
> weak client side implementations and unintentional failed renewal. I think
> requiring re-authorization is sufficient, but maybe I am missing something.
>
> *Regarding the adoption of authorisation invalidation: *
>
> Right now adoption for authz revocation is spotty:
> Certbot: does not allow revocation of authorisation
> poshACME: Does fully support it
> acme.sh: Does fully support it
>
> Certbot is the tool Let's Encrypt pushes most and has surely the highest
> adoption outside of native hosting service integration and does neither
> mention caching nor backup of account keys in any section of the
> documentation.
>
> *If you want to submit a proposed solution, I suggest you write an
> Internet-Draft and submit it to the IETF Datatracker so that the WG has a
> draft to review. Potentially, some of the folks on this mailing list might
> volunteer to help you write it, if there is enough interest in solving this
> problem*
>
>
> Yes, I'd love to. I think the most pragmatic way would be a "caching" :
> "true / false" on the identifier inside the order object. It can be
> passed along the chain to create the authorization object.
> If more complex solutions are appreciated, I would write a proposal along
> the lines of DNS validation based authorization invalidation. I am not sure
> if an account recovery is needed, if the authorizations are invalidated.
>
> Thanks to you both, I really appreciated your replies. I am either way
> happy to contribute, I do though believe that passing caching boolean down
> with the order would be easiest.
>
> On Tue, Jul 14, 2026 at 6:23 PM Fabian V. Thobe <fabian@thobe.eu> wrote:
>
>> Hey Mike, Hey Corey,
>>
>> First, thank you very much for your kind review of my initial email.
>> Having had personal ties to people in countries which would not be
>> considered free, I am surely more sensitive than the next guy and more
>> sceptical towards infrastructure around me.
>>
>>
>> *In general, reuse of authorizations is desirable. For "high security"
>> environments, clients could proactively deactivate authorizations after
>> certificate issuance per RFC 8555, section 7.5.2. So, I think the current
>> spec and server implementations are sufficient, provided that the server
>> implements deactivating authorizations.*
>> *I agree that this is a potential gap in the ACME spec. RFC 8555 allows
>> revocation requests to be signed by any account that has valid
>> authorizations for all identifiers in the certificate, but:*
>>
>> 1.
>> *There is no language mandating the deactivation of authorizations in the
>> course of revocation, and: *
>> 2. *Revocation requires a certificate to revoke.*
>>
>> *Additionally, there's no language in section 7.5.2 to invalidate
>> authorizations across all accounts.*
>>
>>
>> The fun part is, that I fully agree with you regarding 7.5.2, technically
>> for ease of implementation though, I believe that the organic way to pass a
>> cache policy would be with the item it governs > hence with the order to be
>> subsequently stored with the authorization itself, a simple caching : true
>> / false together with the order would basically solve the entire issue.
>>
>> "identifiers": [
>> { "type": "dns", "value": "example.org", "caching" : "false" }
>> ],
>>
>> I feel this would be the most lightweight solution and also go hand in
>> hand with keeping 8555 as lightweight as possible.
>>
>> *You don't want to make an API like that un-authenticated because then
>> that becomes a vector for DoS attacks. *
>>
>>
>> Good that we all don't want to go that road XD
>>
>> *But I also see your idea to add a "I lost my account key" feature to
>> ACME that lets you do a DNS-01 challenge in order to prove ownership and
>> thereby revoke authorization to any existing ACME accounts (this feels to
>> me similar to a "I forgot my password" flow). I think that's an interesting
>> idea worth exploring.*
>>
>> That is definitely a big one, I'd love to do that. I would like to
>> invalidate accounts as for the tremendous side effects that could have on
>> weak client side implementations and unintentional failed renewal. I think
>> requiring re-authorization is sufficient, but maybe I am missing something.
>>
>> *Regarding the adoption of authorisation invalidation: *
>>
>> Right now adoption for authz revocation is spotty:
>> Certbot: does not allow revocation of authorisation
>> poshACME: Does fully support it
>> acme.sh: Does fully support it
>>
>> Certbot is the tool Let's Encrypt pushes most and has surely the highest
>> adoption outside of native hosting service integration and does neither
>> mention caching nor backup of account keys in any section of the
>> documentation.
>>
>> *If you want to submit a proposed solution, I suggest you write an
>> Internet-Draft and submit it to the IETF Datatracker so that the WG has a
>> draft to review. Potentially, some of the folks on this mailing list might
>> volunteer to help you write it, if there is enough interest in solving this
>> problem*
>>
>>
>> Yes, I'd love to. I think the most pragmatic way would be a "caching" :
>> "true / false" on the identifier inside the order object. It can be
>> passed along the chain to create the authorization object.
>> If more complex solutions are appreciated, I would write a proposal along
>> the lines of DNS validation based authorization invalidation. I am not sure
>> if an account recovery is needed, if the authorizations are invalidated.
>>
>> Thanks to you both, I really appreciated your replies. I am either way
>> happy to contribute, I do though believe that passing caching boolean down
>> with the order would be easiest.
>>
>> Fabian
>>
>>
>> On Tue, Jul 14, 2026 at 3:15 PM Corey Bonnell <dev@cbonnell.com> wrote:
>>
>>> > Introduce a mechanism to explicitly disable authorization caching for
>>> DNS-01 challenges (Reference:
>>> https://github.com/letsencrypt/boulder/issues/8870)
>>>
>>> In general, reuse of authorizations is desirable. For "high security"
>>> environments, clients could proactively deactivate authorizations after
>>> certificate issuance per RFC 8555, section 7.5.2. So, I think the current
>>> spec and server implementations are sufficient, provided that the server
>>> implements deactivating authorizations.
>>>
>>> > Introduce a recovery mechanism allowing domain owners to invalidate
>>> all existing authorizations (not the account) through a fresh
>>> proof-of-ownership challenge (e.g., DNS-based).
>>>
>>> I agree that this is a potential gap in the ACME spec. RFC 8555 allows
>>> revocation requests to be signed by any account that has valid
>>> authorizations for all identifiers in the certificate, but:
>>>
>>>
>>> 1. There is no language mandating the deactivation of authorizations
>>> in the course of revocation, and:
>>> 2. Revocation requires a certificate to revoke.
>>>
>>>
>>> Additionally, there's no language in section 7.5.2 to invalidate
>>> authorizations across all accounts.
>>>
>>> Absent a way to invalidate through the ACME protocol, there are some
>>> mitigations:
>>>
>>>
>>> 1. Directly contact the CA. WebPKI CAs need to be able to respond to
>>> problem reports within 24 hours.
>>> 2. Assuming the WebPKI CA supports RFC 8657 (which all will need to
>>> support in early 2027 thanks to CABF ballot SC-98): set up CAA records with
>>> a short TTL containing the RFC 8657 accounturi parameter and update the
>>> records in the event of account compromise. WebPKI CAs are required to
>>> recheck CAA records every 8 hours or before the TTL elapses (whichever is
>>> greater), so there is a relatively short window for abuse.
>>>
>>>
>>> Thanks,
>>> Corey
>>>
>>> [1]
>>> https://cabforum.org/2026/05/13/ballot-sc098v2-process-rfc-8657-caa-parameters/
>>>
>>> Jul 14, 2026, 04:27 by fabian@thobe.eu:
>>>
>>> Dear RFC8555 Committee,
>>>
>>> In cc: Alexis Hancock from EFF as some content involves also Certbot
>>>
>>> *TL;DR *
>>> A mechanism for authorization invalidation independent of the account
>>> key appears necessary to ensure that domain ownership, and not a historical
>>> authorization state, remains the ultimate source of trust.
>>>
>>> *Background*
>>> While working on improvements to the DNS Route53 plugin for Certbot (Certbot
>>> PR #10729 <https://github.com/certbot/certbot/pull/10729>) to better
>>> meet the security requirements of a European government entity, we
>>> identified a potentially critical issue related to cached DNS-01
>>> authorizations. Specifically, we observed during the PR related manual
>>> testing that certificate issuance remained possible even after the certbot
>>> DNS credentials had been revoked upon credential change. While we initially
>>> suspected a regression related to previously used AWS credentials, further
>>> investigation revealed that the root cause lies in RFC8555 mandated
>>> procedures handling of DNS authorizations.
>>>
>>> *Relevant Sections of RFC 8555*
>>>
>>>
>>> *7.5.2. Deactivating an Authorization*
>>> The server must verify that deactivation requests are signed by the
>>> account key corresponding to the authorization.
>>>
>>>
>>>
>>> *7.3.6. Account Deactivation*
>>> Similarly, account deactivation requires a valid signature from the
>>> account key.
>>>
>>>
>>> *In both cases, the ability to revoke or deactivate authorizations is
>>> strictly tied to possession of the account key.*
>>>
>>> *Threat Analysis*
>>>
>>> *High-Level Concern*
>>>
>>> The current model creates a situation in which DNS-01 authorizations may
>>> remain valid even when DNS credentials are revoked and the account key is
>>> no longer accessible for a lack of re-authorization. If a legitimate owner
>>> loses control of the account key, whether through compromise or operational
>>> loss, there is no reliable mechanism to invalidate existing authorizations.
>>>
>>>
>>> This creates a scenario where a malicious actor in possession of the
>>> account key can continue issuing certificates without the knowledge or
>>> consent of the legitimate domain owner.
>>> Hereby the fact that Let's Encrypt clearly democratized encryption with
>>> valid certificates is of high importance: systems in subpar environments or
>>> environments subject to financial constraints regarding the procurement are
>>> much more vulnerable than large enterprises or organizations. Especially in
>>> the highly open source dependent political NGO sector I see significant
>>> risks as the infrastructure owner might be a malicious actor allowing
>>> various "men in the middle" scenarios.
>>>
>>>
>>> A mechanism for authorization invalidation independent of the account
>>> key appears necessary *to ensure that domain ownership, and not
>>> historical authorization state, remains the ultimate source of trust*.
>>>
>>> *Observed Risk Scenarios*
>>>
>>> Several already observed risk scenarios emerged:
>>>
>>> - Lack of recoverable or uncompromised physical infrastructure after
>>> ransomware incidents makes the account keys irrecoverable;
>>> - Preference for full system rebuilds over restoration due to
>>> uncertainty about compromise timelines;
>>> - Missing or incomplete secret management practices;
>>> - Operational pressure leading to deviations from established
>>> recovery procedures
>>>
>>> In these scenarios, loss of the ACME account key is a realistic and,
>>> maybe even already a recurring outcome.
>>>
>>> *Expanded Risk Considerations*
>>>
>>> Additional risks arise in environments where DNS infrastructure itself
>>> may be compromised or controlled by malicious actors, including:
>>>
>>> - Man-in-the-middle attacks via compromised DNS resolution chains
>>> - Centralized or state-controlled infrastructure introducing
>>> systemic risks
>>> - Limited infrastructure diversity in certain regions
>>>
>>> In such cases, cached authorizations amplify the attack surface by
>>> allowing continued certificate issuance independent of current DNS control.
>>>
>>> *Proposed Mitigations*
>>>
>>> 1. *Lightweight Option: No-Cache Mechanism for DNS-01*
>>> Introduce a mechanism to explicitly disable authorization caching
>>> for DNS-01 challenges.
>>> (Reference: https://github.com/letsencrypt/boulder/issues/8870)
>>> 2.
>>>
>>>
>>> *Break-Glass Recovery via Proof of Ownership*
>>> Introduce a recovery mechanism allowing domain owners to invalidate
>>> all existing authorizations (not the account) through a fresh
>>> proof-of-ownership challenge (e.g., DNS-based).
>>>
>>>
>>> This would:
>>> - Provide a recovery path in case of account key loss
>>> - Prioritize domain ownership verification over authorization
>>> persistence
>>> - Align with the core purpose of certificates: authentication,
>>> not just encryption
>>>
>>>
>>>
>>> *Additional notes regarding awareness*
>>>
>>>
>>> In discussions with peers across banking, healthcare, public sector, and
>>> commercial environments (many operating under ISO 27001 or similar
>>> frameworks), a lack of awareness regarding cached issues become apparent
>>> (despite all of us using Let's Encrypt in private or professional
>>> settings). Notably, none of the professionals consulted were aware that
>>> DNS-01 authorizations are cached in a way that allows continued certificate
>>> issuance after DNS credentials are revoked. There is also no clear
>>> indication of this behavior in common tooling.
>>>
>>> As a result all of us assumed that:
>>>
>>> - Revoking DNS credentials is widely assumed to fully mitigate risk
>>> - No standard procedures were required for responding to account key
>>> loss
>>>
>>> Given that the tooling does not surface or warn about cached
>>> authorizations, there might also be a problem regarding the value of
>>> account keys. To be honest among 9 people, two of us even had a false risk
>>> assessment in the ISO 27001 assessments, in one case fully audited by a
>>> market leading entity. There might be a disconnect between what's
>>> documented at Let's Encrypt and what effectively reaches the community as
>>> literally there's no section neither about risks nor backup in the Certbot
>>> documentation, the discovery of the non-ephemeral nature of
>>> authorizations requires research, this is also reflected in the answers of
>>> AI agents (see below), all major AIs apart from Claude responded wrongly. An
>>> issue and offering to fix at least some oddities of certbot behaviour was
>>> not favourably received (https://github.com/certbot/certbot/issues/10731
>>> ).
>>>
>>> As outlined above, the current ACME model prioritizes usability and
>>> automation but does not fully address scenarios involving loss of account
>>> keys. Given the widespread adoption of ACME and the increasing reliance on
>>> short-lived certificates, this gap presents a meaningful security risk
>>> undermining the efforts to shorten certificate lifetime for security as any
>>> effort is undermined by the malicious can simply order a new certificate
>>> with obtained account keys.
>>>
>>> I would be happy to provide a more detailed proposal, including draft
>>> specification language and an expanded threat analysis, if that would be
>>> helpful.
>>> Attachments
>>>
>>> *Boulder Issue:*
>>> Feature Request: Add an opt-in mechanism to disable DNS-01 authorization
>>> reuse (--no-cache) for one Time DNS-01 Challenge Usage
>>> #8870
>>> https://github.com/letsencrypt/boulder/issues/8870
>>>
>>> *Certbot PR *
>>> dns-route53: cerbot credentials.ini file support + fix duplicate TXT
>>> record on apex/wildcard
>>> #10729
>>> https://github.com/certbot/certbot/pull/10729
>>>
>>>
>>> *Certbot Issue *[Bug]: Invalid / Revoked credentials allow renewal due
>>> to lack of revalidation of credentials and continued use of DNS-01 Auth
>>> #10731
>>> https://github.com/certbot/certbot/issues/10731
>>>
>>> *Example Observation*
>>>
>>> A Certbot renewal executed with invalid DNS credentials still succeeded,
>>> without indicating that cached authorizations were used:
>>>
>>>
>>> (venv) zeus@mi-certbot-staging:~/certbot$ sudo venv/bin/certbot
>>> certonly \
>>> --dns-cloudflare -d "*.domain.com" --dns-cloudflare-credentials \
>>> ~/cfinvalid --staging
>>> [...]
>>> Renewing an existing certificate for *.domain.com
>>> Successfully received certificate.
>>> Certificate is saved at: /etc/letsencrypt/live/domain.com/fullchain.pem
>>>
>>>
>>>
>>> *Generative AI answers to the question:are dns challenges on certbot
>>> remade on every renewal?*
>>>
>>>
>>> 1. *Gemini*
>>> Unconditional Yes
>>> Yes, DNS challenges are remade on every single renewal. Every time
>>> Certbot attempts to renew a certificate, it initiates a fresh "order" with
>>> the Certificate Authority (such as Let's Encrypt). This order generates a
>>> brand-new, completely randomized token.
>>> 2. *Co-Pilot *
>>> Unconditional Yes
>>> "Yes — DNS‑01 challenges are recreated every time Certbot renews
>>> your certificate, unless your DNS plugin/provider supports persistent TXT
>>> records (almost none do). Certbot must prove domain control again at each
>>> renewal, so it generates a new TXT value for _
>>> acme-challenge.yourdomain.com every time."
>>> 3. *ChatGPT*
>>> Unconditional Yes
>>> "Yes. If you're using a DNS-01 challenge with Certbot, the challenge
>>> is generated fresh for every certificate issuance and every renewal."
>>> 4. *Claude*
>>> Correct Answer
>>> Not automatically, no — it depends on the ACME server's
>>> authorization caching, not on certbot itself.
>>>
>>>
>>>
--
Fabian V. Thobe
+39 331 6355 270 / fabian@thobe.eu
Via Filippo Corridoni 68, 56125 Pisa
- [Acme] RFC 8555 Last Call Draft Change Request Fabian V. Thobe
- [Acme] Re: RFC 8555 Last Call Draft Change Request Mike Ounsworth
- [Acme] Re: RFC 8555 Last Call Draft Change Request Corey Bonnell
- [Acme] Re: RFC 8555 Last Call Draft Change Request Fabian V. Thobe
- [Acme] Re: RFC 8555 Last Call Draft Change Request Fabian V. Thobe
- [Acme] Re: RFC 8555 Last Call Draft Change Request Corey Bonnell
- [Acme] Re: RFC 8555 Last Call Draft Change Request Ilari Liusvaara
- [Acme] Re: RFC 8555 Last Call Draft Change Request Michael Richardson
- [Acme] Re: RFC 8555 Last Call Draft Change Request Michael Paoli
- [Acme] Re: RFC 8555 Last Call Draft Change Request Mike Ounsworth
- [Acme] Re: RFC 8555 Last Call Draft Change Request Aaron Gable
- [Acme] Re: RFC 8555 Last Call Draft Change Request Seo Suchan
- [Acme] Re: RFC 8555 Last Call Draft Change Request Fabian V. Thobe
- [Acme] Re: RFC 8555 Last Call Draft Change Request 皮皮猪
- [Acme] Re: RFC 8555 Last Call Draft Change Request Aaron Gable
- [Acme] Re: RFC 8555 Last Call Draft Change Request Corey Bonnell
- [Acme] Re: RFC 8555 Last Call Draft Change Request Michael Richardson
- [Acme] 回复:Re: RFC 8555 Last Call Draft Change Req… 皮皮猪