From: Acme <acme-boun...@ietf.org> On Behalf Of Aaron Gable
Sent: 02 September 2021 08:31
To: Michael Richardson <mcr+i...@sandelman.ca>
Cc: Ryan Sleevi <ryan-i...@sleevi.com>; Deb Cooley <deco...@nsa.gov>; 
acme@ietf.org
Subject: Re: [Acme] working group call for adoption

On Wed, Sep 1, 2021 at 5:28 PM Michael Richardson 
<mcr+i...@sandelman.ca<mailto:mcr%2bi...@sandelman.ca>> wrote:
Yes, but not necessarily across TLS connections.

One connects, gets a challenge, sets it up (DNS or HTTP/S), waits for the
authorization check to complete, and sends an order.

I don't know what letsencrypt does, but my understanding is that I could do
all of this on the same connection, and afterward, aside from the certificate
that I append to a database, there is no other moving parts.

I do not believe this is an accurate description of the ACME protocol, and 
certainly not of any implementation of it that I'm aware of (but I may be 
wrong!).

It is true that one could imagine an ACME server which never performs 
authorization re-use. It would not support pre-authorization, as it always 
creates new authorizations for every name in each new order. Such a server 
would be able to support the extensions to the newOrder endpoint proposed by 
this draft, but would not be able to support the extensions to newAuthz 
proposed by this draft or proposed by my message above.

That said, even such a server is required to keep state about its 
authorizations for arbitrarily long periods of time: the authorizations are 
created (including the `wildcard` boolean) when the client requests a newOrder; 
they are served when the client requests details about the authorizations for 
the order; they are updated when the client fulfills challenges; and they must 
be examined by the server when the client requests to finalize the order. Each 
of these requests is a separate HTTP/TLS connection from the client to the 
server, and they may be seconds, hours, or even days apart, depending on the 
`expires` timestamp that the server populates in the order object.

Aaron
[ofriel] Thanks for the all the comments Aaron.

In my mind, the newAuthz proposal in this draft is the more useful and most 
likely to be implemented approach vs. the extension to newOrder. Consider an RA 
that wants to get device certs for thousands of devices e.g. 
foo.type-a-sensors.example.org and bar.type-b-sensors.example.org, The RA would 
likely do a preAuthz for the domains it owns (e.g. example.org) rather than 
wait for a device to send an enrol request for a specific identifier (e.g. 
foo.type-a-sensors.example.org) and the RA then send a newOrder containing 
“identifiers”: [ {“value”: “foo.type-a-sensors.example.org”, 
“domainNamespace”:“example.org”} ]. I think this would also make the RA code 
simpler.

So on balance, I do not think having the “domainNamespace”: “<FQDN>” extension 
to the newOrder would likely be used much, and am fine with dropping that. This 
use case did come up in discussions no the mailer over the past year, but 
simplifying this and removing that newOrder extension is OK. It would also 
avoid adding this complexity to both RA and ACME server code.

CA/B guidelines states the following in “3.2.2.4 Validation of Domain 
Authorization or Control” for multiple methods (including DNS):

“Note: Once the FQDN has been validated using this method, the CA MAY also issue
Certificates for other FQDNs that end with all the Domain Labels of the 
validated FQDN.
This method is suitable for validating Wildcard Domain Names.”

meaning that this covers both the wildcard cert and any subdomain certs in the 
full domain namespace under that FQDN.

Is there any value in explicitly distinguishing between an authorization for a 
wildcard vs. an authorization for an entire domain namespace? An RFC8555 
wildcard authorization for example.org only allows the *.example.org cert to be 
issued. Whereas, what we have proposed is that a domainNamespace authorization 
for example.org enables a cert with any identifier in the entire subordinate 
domain namespace to be issued. e.g. foo.type-a-sensors.example.org and 
bar.type-b-sensors.example.org. For sure, for the device cert enrolment and RA 
use cases we have in mind, the device and RA most definitely do not want a 
wildcard cert, they want a unique cert per device.

Assuming there is value in this, then the proposed changes to the APIs and 
objects are actually pretty minimal:

domainNamespace bool in authz object
domainNamespace bool in newAuthz request
domainNamespace bool in directory metadata to advertise the server supports this
domainNamespace string (an FQDN) in newOrder request (which I think we don’t 
really need, the pre-authorization workflow seems the really useful one here)

Cheers,
Owen
_______________________________________________
Acme mailing list
Acme@ietf.org
https://www.ietf.org/mailman/listinfo/acme

Reply via email to