Skip to content

Conversation

@jsha
Copy link
Contributor

@jsha jsha commented Oct 30, 2025

Simplify the definition of ADN and move the algorithm in 3.2.2.4. Choosing an ADN is a precursor to doing validation. Every validation operates on an ADN.

Simplify the language in each method around pruning labels and wildcard issuance. Add corresponding language about following CNAMEs when choosing the ADN, and around onion issuance.

Require record keeping when choosing the ADN.

Replace retired methods with language saying they are retired.

Define Base Domain Name as a function of any given FQDN.

Move the definition of Domain Contact into the only remaining method that uses it (3.2.2.4.12 Validating Applicant as a Domain Contact). Note that this method does not allow CNAME lookups when choosing the ADN, because it previously relied on Base Domain Name, which previously had the language "applied-for FQDN".

Use "ADN" consistently in method definitions instead of "FQDN" (which is insufficiently precise as to whether it's the applied-for FQDN or the ADN).

Clean up the language in the onion section around ADNs.

Here's a table of the methods and what ADN operations can happen on them according to this PR (plus onion issuance):

Method Wildcard Prune CNAME Onion
3.2.2.4.4 Constructed Email to Domain Contact ✔️ ✔️ ✔️ -
3.2.2.4.7 DNS Change ✔️ ✔️ ✔️ -
3.2.2.4.8 IP Address - - - -
3.2.2.4.12 Validating Applicant as a Domain Contact ✔️ ✔️ - -
3.2.2.4.13 Email to DNS CAA Contact ✔️ ✔️ ✔️ -
3.2.2.4.14 Email to DNS TXT Contact ✔️ ✔️ ✔️ -
3.2.2.4.16 Phone Contact with DNS TXT Record Phone Contact ✔️ ✔️ ✔️ -
3.2.2.4.17 Phone Contact with DNS CAA Phone Contact ✔️ ✔️ ✔️ -
3.2.2.4.18 Agreed-Upon Change to Website v2 - - - ✔️
3.2.2.4.19 Agreed-Upon Change to Website - ACME - - - ✔️
3.2.2.4.20 TLS Using ALPN - - - ✔️
3.2.2.4.21 DNS Labeled with Account ID - ACME ✔️ ✔️ - -
3.2.2.4.22 DNS TXT Record with Persistent Value ✔️ ✔️ - -
Appendix B.2.b ✔️ ✔️ - ✔️

This is a more in-depth follow-up to #619. It's bigger than I had hoped, but pulling on one thread pulls on many others.

Simplify the definition of ADN and move the algorithm in 3.2.2.4.

Define Base Domain Name as a function of any given FQDN.

Move the definition of Domain Contact into the only remaining method that uses it.

Simplify the language in each method around pruning labels and wildcard
issuance. Add corresponding language about following CNAMEs when choosing the
ADN, and around onion issuance.

Use "ADN" consistently in method definitions instead of "FQDN" (which is
insufficiently precise as to whether it's the applied-for FQDN or the ADN).

Clean up the language in the onion section around ADNs.

Replace retired methods with language saying they are retired.
@jsha jsha requested a review from a team as a code owner October 30, 2025 22:44
@aarongable aarongable changed the title Clarify Authorization Domain Name SC-XXX: Clarify Authorization Domain Name (alternative to #619) Nov 6, 2025
@jsha
Copy link
Contributor Author

jsha commented Nov 7, 2025

I pushed a change breaking out the ADN algorithm into two parts: one where the input is an FQDN and one where the input is a Wildcard Domain Name. The goal of this update is to forbid CNAME lookups when choosing the ADN, if the input was a Wildcard Domain Name.

The intuition is that CNAMEs delegate control of a single FQDN and do not imply anything about control of subdomains. When validating *.www.example.com, the fact that www.example.com is CNAMEd to website.example.com doesn't imply that the admins of website.example.com control blog.www.example.com.

@jsha
Copy link
Contributor Author

jsha commented Nov 7, 2025

Updated once more to reflect CNAME-or-prune semantics. I described my thinking in cabforum/definitions#5 (comment). This allowed simplifying things somewhat. I also reverted some of the new description of pruning to use more of the old language, which was fine.

@cardonator
Copy link

Maybe it's just me and my reading comprehension skills, but I do have a couple comments after reading the proposed verbiage here. If this is way off base, feel free to ignore!

First, it seems like the intersection of allowances with the algorithm for choosing an ADN is complex and leaves room for ambiguity. For example, perhaps under 4 it would be worth explicitly stating that following CNAMEs is not allowed for selecting ADNs on Wildcard Domains regardless of if the method allows it or not.

Second, further down in the text, there are references to ADNs that aren't clear whether they should be referring to an ADN that was selected from following a CNAME or not. An example of what I mean follows.

Under 3.2.2.4.7, we see this heading:

Confirming the Applicant's control over the ADN by confirming the presence of a Random Value or Request Token in a DNS CNAME, TXT or CAA record returned in a query for either 
   1. the Authorization Domain Name; or 
   2. the Authorization Domain Name prefixed with a Domain Label that begins with an underscore character.

Under the ADN selection algorithm provided, however, this ADN could be my domain, a base domain of my domain, or a CNAME that one of those domains pointed to. Is this meant to allow the following condition?

testing.payments.mydomain.com (no value)
payments.mydomain.com (pruned) CNAME customernumber.vendordomain.com
customernumber.vendordomain.com (no value)
_dns.customernumber.vendordomain.com TXT myrandomvalue

Similarly, under 3.2.2.4.4 the ADN is referenced multiple times as the target of the constructed email domains, suggesting in the above example that the emails would/should be send to the target of the CNAME domain (but in this case I assume no pruning would be allowed, therefore the emails would necessarily be to addresses like admin@customernumber.vendordomain.com).

Again, if I'm just way off base here and these elements seem clear and unambiguous to others, then I can be safely ignored. I simply wanted to point out some items that I had questioned as I was reading through the proposed change.

@jsha
Copy link
Contributor Author

jsha commented Nov 18, 2025

First, it seems like the intersection of allowances with the algorithm for choosing an ADN is complex and leaves room for ambiguity. For example, perhaps under 4 it would be worth explicitly stating that following CNAMEs is not allowed for selecting ADNs on Wildcard Domains regardless of if the method allows it or not.

Good point. I'll have a think about the clearest way to express this. Ideally the validation methods would say something like "this has property foo", and the ADN selection algorithm would specify things that are allowable for validations with property foo; but the way I currently express that ("This method allows pruning domain labels when choosing the ADN.") could certainly be interpreted to convey a permission independent of what the algorithm says.

Second, further down in the text, there are references to ADNs that aren't clear whether they should be referring to an ADN that was selected from following a CNAME or not. An example of what I mean follows.

My goal in writing this is that, once the ADN is selected, the validation method shouldn't have any dependency on how it was selected (i.e. whether a CNAME was followed).

Under 3.2.2.4.7, we see this heading:
Under the ADN selection algorithm provided, however, this ADN could be my domain, a base domain of my domain, or a CNAME that one of those domains pointed to. Is this meant to allow the following condition?

testing.payments.mydomain.com (no value)
payments.mydomain.com (pruned) CNAME customernumber.vendordomain.com
customernumber.vendordomain.com (no value)
_dns.customernumber.vendordomain.com TXT myrandomvalue

This example uses prune-then-CNAME, which IMO should not be allowed because it doesn't follow the actual semantics of control in DNS. The operator of vendordomain.com does not actually control testing.payments.mydomain.com, because the CNAME at the parent domain payments.mydomain.com does not actually impact name resolutions for testing.payments.mydomain.com.

Perhaps you meant to ask about a situation like this?

payments.example.com CNAME customernumber.vendordomain.com
customernumber.vendordomain.com (no value)
_dns.customernumber.vendordomain.com TXT myrandomvalue

In this example, the CA would be selecting customernumber.vendordomain.com as the ADN, and then prefixing the ADN with a label (_dns). Since PR specifically says that "3.2.2.4.7 DNS Change" does not allow CNAME lookups when choosing the ADN, that wouldn't be allowed.

The idea being that it's better for CNAME following to happen automatically as part of the normal DNS operations that occur during validation. So in this example, there could be customernumber.vendordomain.com TXT myrandomvalue, and a DNS lookup of payments.example.com with QTYPE TXT would find that record (because DNS resolution follows CNAMEs).

Similarly, under 3.2.2.4.4 the ADN is referenced multiple times as the target of the constructed email domains, suggesting in the above example that the emails would/should be send to the target of the CNAME domain (but in this case I assume no pruning would be allowed, therefore the emails would necessarily be to addresses like admin@customernumber.vendordomain.com).

This is why CNAME-then-prune is convenient for subscribers. In my example above, if the validation method is "3.2.2.4.4 Constructed Email to Domain Contact," the CA would be allowed to first follow the single CNAME, resulting in customernumber.vendordomain.com, and subsequently prune a label to choose vendordomain.com as the ADN. The CA would then email, e.g. admin@vendordomain.com.

@jsha
Copy link
Contributor Author

jsha commented Nov 19, 2025

@cardonator thanks again for the feedback. To clear up the question of CNAME following during validation of a wildcard certificate, I moved the prose allowances ("This method allows CNAME lookups when choosing the ADN") into a table right next to the ADN algorithm.

I also gave "3.2.2.4.7 DNS Change" a checkmark in the CNAME column - after thinking about the underscore-prefixed variant, I concluded that disallowing CNAMEs for this method would rule out some validations that were previously allowed and that were semantically valid in terms of how DNS assigns control.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants