The specification as it stands seems to be a bit vague on the subject of

challenge retries.

It suggests that a challenge should be retried automatically by the server, and

that the challenge should remain in the "processing" state for this time. It

also states that the "invalid" state should be used after the server has given

up. It also states that the client should be explicitly able to request

retries.

This doesn't make sense. The implication is that "invalid" is a final state,

and the challenge cannot move back to "processing" after becoming "invalid". If

a server doesn't wish to make automatic retries, it has "given up" and the

specification thus dictates that the challenge move to "invalid", but this

makes it impossible to retry the challenge. This precludes an implementation

where the server e.g. only makes retries at the request of the client. For a

server which does make retries automatically, it also means the client's

ability to request retries ends when the server ceases to make retries

automatically, even though this is largely an internal detail of the server and

not really an exposed aspect of the API.

The language around how processing/invalid challenges interact with

authorizations is also unclear to me. The specification doesn't say anything

about whether a challenge becoming permanently "invalid" precludes attempting

another challenge in the same authorization.

Retries were added in the first place because the aggregation of multiple

authorizations into orders means quite a lot of progress in the issuance

process may be lost by a single challenge failure. But there still seem to be

issues with the specification as currently written: an authorization which

becomes "invalid" does so permanently and thus scuppers the entire order, which

may have a hundred authorizations.

IMO, challenges and authorizations should be evergreen, barring exceptional

events like administrative intervention. It would make more sense for

challenges to revert to "pending" when the server has given up. The attempts

are still recorded as challenge errors. The "invalid" state would only be used

administratively or if it is determined (for some reason) that completion of

the challenge is permanently impossible (no such cases arise in the current

HTTP/DNS challenges).

Separately, it's unclear what happens to an authorization when a challenge

becomes "invalid":

>If there is an error while the authorization is still pending, then the

>authorization transitions to the "invalid" state.

The meaning of "an error" here is unclear. Is the intention here that a

challenge becoming "invalid" precludes attempting any other challenge in that

authorization? This seems like a bad idea and will result in the creation of

excessive duplicate orders/authorizations. I'd argue an authorization should

become invalid iff all of its challenges become invalid.


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

Reply via email to