Is the primary reason for this so we don’t have to have the user specify
multiple DNS records? If so I don’t think this added complexity makes sense
here.

On Wed, May 14, 2025 at 12:32 Xiaohui Lam <[email protected]> wrote:

> Hi Amir, and Ryan
>
> I agree with your comments.
> Yes ACME account key needs full lifecycle management(including replace
> mechanism).
>
> Maybe my demand can be satisfied by a new challenge type, rather than the
> digest form generated based on accountkey.
>
> e.g:  design a new challenge type`dns-delegation-01`
>
> And Domain name's challenges API:
>
> POST /acme/authz/PAniVnsZcis HTTP/1.1
> Host: example.com
> Content-Type: application/jose+json
>
> {
> "protected": base64url({
> "alg": "ES256",
> "kid": "https://example.com/acme/acct/evOfKhNU60wg";,
> "nonce": "uQpSjlRb4vQVCjVYAyyUWg",
> "url": "https://example.com/acme/authz/PAniVnsZcis";
> }),
> "payload": "",
> "signature": "nuSDISbWG8mMgE7H...QyVUL68yzf3Zawps"
> }
>
> HTTP/1.1 200 OK
> Content-Type: application/json
> Link: <https://example.com/acme/directory>;rel="index"
>
> {
> "status": "pending",
> "expires": "2016-01-02T14:09:30Z",
>
> "identifier": {
> "type": "dns",
> "value": "www.example.org"
> },
>
> "challenges": [
> {
> "type": "http-01",
> "url": "https://example.com/acme/chall/prV_B7yEyA4";,
> "token": "DGyRejmCefe7v4NfDGDKfA"
> },
> {
> "type": "dns-01",
> "url": "https://example.com/acme/chall/Rg5dV14Gh1Q";,
> "token": "DGyRejmCefe7v4NfDGDKfA"
> },
> {
> "type": "dns-delegation-01",
> "url": "https://example.com/acme/chall/D2zX3m9jfIyE4";,
> "token": "DGyRejmCefe7v4NfDGDKfA"
> }
> ]
> }
>
> And requires user to create DNS TXT
> _acme-challenge_cloudflare.www.example.org  300
> TXT keyAuthorization=token || '.' || base64url(Thumbprint(accountKey))
>
> And perform challenge(delegation can only be alphanumeric, no special
> characters allowed):
>
>
> POST /acme/chall/D2zX3m9jfIyE4 HTTP/1.1 Host: example.com Content-Type:
> application/jose+json { "protected": base64url({ "alg": "ES256", "kid": "
> https://example.com/acme/acct/evOfKhNU60wg";, "nonce":
> "Q_s3MWoqT05TrdkM2MTDcw", "url": "
> https://example.com/acme/chall/D2zX3m9jfIyE4"; }), "payload": base64url({
>
>
> "delegation": "cloudflare"
>
>
>
> }), "signature": "9cbg5JO1Gf5YLjjz...SpkUfcdPai9uVYYQ" }
>
> How about new challenge type like this? But we need a draft a new RFC if
> it makes sense.
>
> Thanks
> 在2025年5月15日星期四 UTC+8 00:13:35<Ryan Hurst> 写道:
>
>> Remember that an ACME account key is just another cryptographic key that
>> requires full lifecycle management. This involves keeping it secure,
>> rotating it regularly to limit the window an attacker has if it is ever
>> compromised, and eventually replacing it with a key using stronger or newer
>> algorithms (for example, moving to ML-DSA for post-quantum security). In
>> practice, ACME account keys are no more secure than the keys used for TLS
>> certificates, since most implementations store them on disk protected only
>> by basic filesystem ACLs.
>>
>> On the positive side, because account keys see fewer operations, they can
>> be generated and stored in hardware such as a TPM, which offers stronger
>> protection without impacting TLS performance or algorithm choices. This is
>> why it makes sense to decouple the domain-control label from the account
>> key itself, but the specification must still acknowledge that these keys
>> require proper management. Failing to do so would lead to fragile
>> implementations and discourage sound key-management practices.
>>
>> Ryan
>>
>> On Wed, May 14, 2025 at 9:10 AM Xiaohui Lam <[email protected]> wrote:
>>
>>> Hi Amir,
>>>
>>> Thank you for post expanding contents.
>>>
>>> > I don't doubt this, but most of what we do in this space is planning
>>> for worst case scenarios. As ACME is meant to facilitate short-lived
>>> credentials, I don't think it would be responsible to build features that
>>> rely on long (forever?) lived keys.
>>>
>>> How do we solve this problem?
>>> - Let's encrypt returns account URI:
>>> https://acct.acme-v02.letsencrypt.org/acct/tjvsrsls89gu9ssu (Just an
>>> example and does not represent the actual content.)
>>>     - base32(SHA-256(
>>> https://acct.acme-v02.letsencrypt.org/acct/tjvsrsls89gu9ssu)[0:9])
>>> - GTS returns a different account URI:
>>> https://acme-02.pki.google/account/ilctdkn9ifnueocs (Just an example
>>> and does not represent the actual content.)
>>>     - base32(SHA-256(https://acme-02.pki.google/account/ilctdkn9ifnueocs
>>> )[0:9])
>>>
>>> This situation (scenario of Cloudflare's multiple backup certificate) CA
>>> requires two different dnshostname, and Cloudflare customers need to create
>>> DNS record twice.
>>>
>>> Is there other way to reduce configuration overhead for users?
>>>
>>> Thank you.
>>> 在2025年5月15日星期四 UTC+8 00:01:57<Amir Omidi> 写道:
>>>
>>>> > Based on my experience, instances of ACME account key compromise are
>>>> extremely rare. I also have full confidence in Cloudflare’s robust security
>>>> operations capability - such account key compromises are highly unlikely to
>>>> occur internally at Cloudflare.
>>>>
>>>> I don't doubt this, but most of what we do in this space is planning
>>>> for worst case scenarios. As ACME is meant to facilitate short-lived
>>>> credentials, I don't think it would be responsible to build features that
>>>> rely on long (forever?) lived keys.
>>>>
>>>> Furthermore, the issue isn't only key compromise. There are many
>>>> circumstances why this key might change. For example:
>>>>
>>>> 1. Regulatory requirements on not having long-lived keys.
>>>> 2. There being a runtime problem during generation of this ACME account
>>>> key that is discovered in the future.
>>>> 3. Moving away from ECC/RSA keys in the future.
>>>>
>>>> I feel very strongly that we should not be building a feature that
>>>> takes a strong dependency on the life of a key, where it doesn't really
>>>> need to.
>>>>
>>>> Thanks!
>>>>
>>>> On Wed, May 14, 2025 at 11:57 AM Xiaohui Lam <[email protected]> wrote:
>>>>
>>>>> Hi Amir,
>>>>>
>>>>> Thank you for your response, specially posted here, your concern when
>>>>> drafting the RFC.
>>>>>
>>>>> Based on my experience, instances of ACME account key compromise are
>>>>> extremely rare. I also have full confidence in Cloudflare’s robust 
>>>>> security
>>>>> operations capability - such account key compromises are highly unlikely 
>>>>> to
>>>>> occur internally at Cloudflare.
>>>>>
>>>>> My suggestion is to draft the document to retain both the current
>>>>> account URI-generated suffix and add an account key-generated suffix. This
>>>>> would allow delegate operators (such as Cloudflare) to implement the
>>>>> optimal approach for their customers.
>>>>>
>>>>> Thank you.
>>>>>
>>>>> 在2025年5月14日星期三 UTC+8 23:17:12<Amir Omidi> 写道:
>>>>>
>>>>>> Hi!
>>>>>>
>>>>>> However, wouldn’t it be more logical to generate this host from the
>>>>>> account public key instead?
>>>>>>
>>>>>>
>>>>>> If we think about the entire lifecycle of the ACME account, using the
>>>>>> public key makes less sense. The workflow that I’ve imagined for this is 
>>>>>> as
>>>>>> follows:
>>>>>>
>>>>>> 1. Large provider creates ACME accounts on ACME enabled CAs.
>>>>>> 2. Large provider ensures that the CA’s have rate limits in place to
>>>>>> allow them to do large number of issuances.
>>>>>> 3. Large provider communicates these stable strings to the customer
>>>>>> to set as CNAME records for DCV delegation.
>>>>>>
>>>>>> Now, if we use the public key, these are no longer stable URLs. We
>>>>>> effectively have a long lived key, where replacing that key ends up
>>>>>> requiring every single customer to change their CNAME records.
>>>>>>
>>>>>> With the design that is currently in place, we can use
>>>>>> https://datatracker.ietf.org/doc/html/rfc8555#section-7.3.5 to
>>>>>> rollover the account keys, without causing disruptions to the end users.
>>>>>>
>>>>>> Hope this answers the inquiry!
>>>>>>
>>>>>> On May 14, 2025, at 10:42 AM, Xiaohui Lam <[email protected]> wrote:
>>>>>>
>>>>>> It should be following:
>>>>>>
>>>>>>  - _acme-challenge_cd9dtbvvknxwz1mg.example.org 300 IN CNAME "
>>>>>> example.org.googletrustservice.acme-delegate.cloudflare.com", for
>>>>>> Google Trust Service
>>>>>>  - _acme-challenge_on0ikkqoklpbadex.example.org 300 IN CNAME "
>>>>>> example.org.letsencrypt.acme-delegate.cloudflare.com", for Let's
>>>>>> Encrypt
>>>>>>
>>>>>> Sorry for my typo
>>>>>> 在2025年5月14日星期三 UTC+8 22:39:59<Xiaohui Lam> 写道:
>>>>>>
>>>>>>> Hi all,
>>>>>>>
>>>>>>> I came across Cloudflare’s blog (
>>>>>>> https://blog.cloudflare.com/zh-cn/introducing-dcv-delegation),
>>>>>>> which mentions an RFC draft Automated Certificate Management Environment
>>>>>>> (ACME) DNS Labeled With ACME Account ID Challenge. This draft proposes a
>>>>>>> new domain control verification (DCV) method using following DNS record:
>>>>>>> _acme-challenge_ujmmovf2vn55tgye.www.example.org 300 IN TXT
>>>>>>> "LoqXcYV8...jxAjEuX0.9jg46WB3...fm21mqTI"
>>>>>>>
>>>>>>> Key concern of mine revolves around how the validation domain name
>>>>>>> is constructed by prepending the label:
>>>>>>> "_acme-challenge" || base32(SHA-256(Account Resource URL)[0:9])
>>>>>>> The verification DNS host _acme-challenge_[suffix]'s suffix is
>>>>>>> generated from the ACME account URI (account resource URL). However,
>>>>>>> wouldn’t it be more logical to generate this host from the account 
>>>>>>> public
>>>>>>> key instead?
>>>>>>>
>>>>>>> Let’s contextualize this with Cloudflare’s use case: they aim to
>>>>>>> allow users to delegate _acme-challenge_[suffix] via CNAME records. If 
>>>>>>> we
>>>>>>> use the account URI to generate the DNS host suffix, and Cloudflare 
>>>>>>> users
>>>>>>> need to enroll certificates from two CAs - such as
>>>>>>>
>>>>>>>   - Let’s Encrypt, and
>>>>>>>   - Google Trust Service
>>>>>>>
>>>>>>> Cloudflare will give two CNAME records, e. g:
>>>>>>>
>>>>>>>  - _acme-challenge_cd9dtbvvknxwz1mg.example.org 300 IN CNAME "
>>>>>>> example.org.googletrustservice.acme-delegate.cloudflare.com", for
>>>>>>> Let's Encrypt
>>>>>>>  - _acme-challenge_on0ikkqoklpbadex.example.org 300 IN CNAME "
>>>>>>> example.org.letsencrypt.acme-delegate.cloudflare.com", for Google
>>>>>>> Trust Service
>>>>>>>
>>>>>>> They would have to create two separate CNAME records (due to
>>>>>>> different DNS hosts and values for every CA).
>>>>>>>
>>>>>>> In contrast, if the DNS host suffix is generated from the account
>>>>>>> public key, Cloudflare users would only need to create one CNAME record 
>>>>>>> for
>>>>>>> delegation. This streamlines the process, enhanced security(publickey is
>>>>>>> far secure than an url string) and reduces configuration overhead for 
>>>>>>> users.
>>>>>>>
>>>>>>> Thoughts?
>>>>>>>
>>>>>>
>>>>>> --
>>>>>> You received this message because you are subscribed to the Google
>>>>>> Groups "[email protected]" group.
>>>>>> To unsubscribe from this group and stop receiving emails from it,
>>>>>> send an email to [email protected].
>>>>>> To view this discussion visit
>>>>>> https://groups.google.com/a/mozilla.org/d/msgid/dev-security-policy/c8a84911-53fa-418f-b742-9109157c1997n%40mozilla.org
>>>>>> <https://groups.google.com/a/mozilla.org/d/msgid/dev-security-policy/c8a84911-53fa-418f-b742-9109157c1997n%40mozilla.org?utm_medium=email&utm_source=footer>
>>>>>> .
>>>>>>
>>>>>>
>>>>>> --
>>> You received this message because you are subscribed to the Google
>>> Groups "[email protected]" group.
>>> To unsubscribe from this group and stop receiving emails from it, send
>>> an email to [email protected].
>>>
>> To view this discussion visit
>>> https://groups.google.com/a/mozilla.org/d/msgid/dev-security-policy/7ea62291-2e4c-4500-a4b2-d0d7ed7a43d7n%40mozilla.org
>>> <https://groups.google.com/a/mozilla.org/d/msgid/dev-security-policy/7ea62291-2e4c-4500-a4b2-d0d7ed7a43d7n%40mozilla.org?utm_medium=email&utm_source=footer>
>>> .
>>>
>>

-- 
You received this message because you are subscribed to the Google Groups 
"[email protected]" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion visit 
https://groups.google.com/a/mozilla.org/d/msgid/dev-security-policy/CAOG%3DJU%2BxOsriCYiwuxS8bUjGO5cmP5rAb-Ljd46XYOArQOYQgQ%40mail.gmail.com.

Reply via email to