You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
**What this does not test.** The whole point of delegation is that a token scoped
@@ -255,7 +265,7 @@ These fail fast and are cheap, so run them on every change:
255
265
|---|---|
256
266
| tls-alpn-01 + a wildcard domain | Refused before any ACME call, citing RFC 8737 |
257
267
| Delegation, CAA in the delegated zone changed to forbid the CA | Blocked before any ACME attempt — proves the published CAA is reachable through the CNAME |
258
-
| Delegation with no CAA record at all | Blocked — unlike normal issuance, where "no CAA" means unrestricted and passes |
268
+
| Delegation with no CAA record at all | Proceeds, reporting `no CAA record set; issuance is unrestricted` — see below |
259
269
| Delegation, later pass, gateway CNAME broken | Renewal proceeds — that record is for serving, and dns-01 does not use it |
260
270
| A CAA record with `validationmethods=dns-01`, mode tls-alpn-01 | Blocked with the restriction quoted back |
261
271
| TXT holding the wrong value | Reported as `want <x>, saw <y>`, not "missing" |
@@ -264,6 +274,26 @@ These fail fast and are cheap, so run them on every change:
264
274
The last one is worth keeping: it is the cross-tenant impersonation defence, and
265
275
it is observable rather than merely argued.
266
276
277
+
**Why "no CAA at all" is not a blocking case.** It used to be. When the operator
278
+
had to create the CAA record, its absence was the state that mattered: nothing
279
+
then stopped anyone else who could satisfy the delegated challenge, and the
280
+
container held no token to create it. Once the container began publishing the
281
+
delegated CAA itself, absence stopped meaning that — it means "not published
282
+
yet", and the next pass fixes it — so the gate was removed along with
283
+
`ALLOW_MISSING_CAA`and dnsguide's `--caa-required`. `check_caa` now follows
284
+
RFC 8659 for delegation as it always did elsewhere: an absent CAA record set
285
+
forbids nothing.
286
+
287
+
The neighbouring row still holds, and it is the one that carries the weight: a
288
+
CAA in the delegated zone that forbids the CA **does** block, before any ACME
289
+
attempt, which is what proves the published record is reachable through the
290
+
operator's CNAME. Expect the reason quoted back, e.g. `issue allows
291
+
'example.com', not letsencrypt.org`.
292
+
293
+
Note also that the first pass on a fresh deployment necessarily runs before any
294
+
CAA exists: the record names the ACME account, so the account has to exist
295
+
first. `process_domain` issues, writes the CAA, then issues again.
296
+
267
297
## Traps
268
298
269
299
**Start from a clean zone.** Records left over from an earlier run change which
0 commit comments