-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathrfc8644.xml
More file actions
982 lines (752 loc) · 39.3 KB
/
rfc8644.xml
File metadata and controls
982 lines (752 loc) · 39.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
<?xml version="1.0" encoding="US-ASCII"?>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
]>
<?rfc toc="yes"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="yes"?>
<?rfc compact="yes"?>
<?rfc subcompact="no"?>
<rfc submissionType="IETF" category="std" consensus="yes" number="8644"
ipr="trust200902" obsoletes="6844">
<front>
<title abbrev="CAA">DNS Certification Authority Authorization (CAA) Resource Record</title>
<author initials="P." surname="Hallam-Baker" fullname="Phillip Hallam-Baker">
<organization>Venture Cryptography</organization>
<address>
<email>phill@hallambaker.com</email>
</address>
</author>
<author initials="R." surname="Stradling" fullname="Rob Stradling">
<organization abbrev="Sectigo">Sectigo Ltd.</organization>
<address>
<email>rob@sectigo.com</email>
</address>
</author>
<author initials="J." surname="Hoffman-Andrews" fullname="Jacob Hoffman-Andrews">
<organization>Let's Encrypt</organization>
<address>
<email>jsha@letsencrypt.org</email>
</address>
</author>
<date year="2019" month="August"/>
<!-- [rfced] Please insert any keywords (beyond those that appear in
the title) for use on https://www.rfc-editor.org/search. -->
<keyword>example</keyword>
<abstract>
<t>The Certification Authority Authorization (CAA) DNS Resource Record
allows a DNS domain name holder to specify one or more Certification
Authorities (CAs) authorized to issue certificates for that domain name.
CAA Resource Records allow a public CA to
implement additional controls to reduce the risk of unintended
certificate mis-issue. This document defines the syntax of the CAA
record and rules for processing CAA records by certificate issuers.</t>
<t>This document obsoletes RFC 6844.</t>
</abstract>
</front>
<middle>
<section anchor="introduction" title="Introduction">
<t>The Certification Authority Authorization (CAA) DNS Resource Record
allows a DNS domain name holder to specify the Certification
Authorities (CAs) authorized to issue certificates for that domain name.
Publication of CAA Resource Records allows a public CA to implement additional controls to reduce the risk of
unintended certificate mis-issue.</t>
<t>Like the TLSA record defined in DNS-Based Authentication of Named
Entities (DANE) <xref target="RFC6698"/>, CAA records are used as a part of a
mechanism for checking PKIX <xref target="RFC6698"/> certificate data. The distinction
between the two specifications is that CAA records specify an
authorization control to be performed by a certificate issuer before
issuing a certificate and TLSA records specify a verification
control to be performed by a relying party after the certificate is
issued.
<!-- [rfced] Section 1: Does "two specifications" refer to DANE and
PKIX, or something else?
Original:
The
distinction between the two specifications is that CAA records
specify an authorization control to be performed by a certificate
issuer before issue of a certificate and TLSA records specify a
verification control to be performed by a relying party after the
certificate is issued. -->
</t>
<t>Conformance with a published CAA record is a necessary, but not
sufficient, condition for the issuance of a certificate.</t>
<t>Criteria for the inclusion of embedded trust anchor certificates in
applications are outside the scope of this document. Typically, such
criteria require the CA to publish a Certification Practices Statement
(CPS) that specifies how the requirements of the Certificate Policy
(CP) are achieved. It is also common for a CA to engage an
independent third-party auditor to prepare an annual audit statement
of its performance against its CPS.</t>
<t>A set of CAA records describes only current grants of authority to
issue certificates for the corresponding DNS domain name. Since
certificates are valid for a period of time, it is possible
that a certificate that is not conformant with the CAA records
currently published was conformant with the CAA records published at
the time that the certificate was issued. Relying parties MUST
NOT use CAA records as part of certificate validation.</t>
<t>CAA records MAY be used by Certificate Evaluators as a possible
indicator of a security policy violation. Such use SHOULD take into
account the possibility that published CAA records changed between
the time a certificate was issued and the time at which the
certificate was observed by the Certificate Evaluator.</t>
</section>
<section anchor="definitions" title="Definitions">
<section anchor="requirements-language" title="Requirements Language">
<t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL",
"SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED",
"NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document
are to be interpreted as described in BCP 14
<xref target="RFC2119"/> <xref target="RFC8174"/> when,
and only when, they appear in all capitals, as shown here.</t>
</section>
<section anchor="defined-terms" title="Defined Terms">
<t>The following terms are used in this document:</t>
<t><list style="symbols">
<t>Certificate: An X.509 Certificate, as specified in <xref target="RFC5280"/>.</t>
<t>Certificate Evaluator: A party other than a Relying Party that
evaluates the trustworthiness of certificates issued by
Certification Authorities.</t>
<t>Certification Authority (CA): An Issuer that issues certificates in
accordance with a specified Certificate Policy.</t>
<t>Certificate Policy (CP): Specifies the criteria that a CA
undertakes to meet in its issue of certificates. See
<xref target="RFC3647"/>.</t>
<t>Certification Practices Statement (CPS): Specifies the means by
which the criteria of the CP are met. In most
cases, this will be the document against which the operations of
the CA are audited. See <xref target="RFC3647"/>.</t>
<t>Domain Name: The label assigned to a node in the Domain Name System.</t>
<t>Domain Name System (DNS): The Internet naming system specified in
<xref target="RFC1034"/> and <xref target="RFC1035"/>.</t>
<t>DNS Security (DNSSEC): Extensions to the DNS that provide
authentication services as specified in <xref target="RFC4033"/>, <xref target="RFC4034"/>,
<xref target="RFC4035"/>, <xref target="RFC5155"/>, and revisions.
<!-- [rfced] Section 2.2: Does "revisions" mean "any revisions to
these specifications," or something else?
Original:
DNS Security (DNSSEC): Extensions to the DNS that provide
authentication services as specified in [RFC4033], [RFC4034],
[RFC4035], [RFC5155], and revisions. -->
</t>
<t>Fully Qualified Domain Name (FQDN): A domain name that includes the labels of all
superior nodes in the DNS.</t>
<!-- [rfced] Sections 2.2 and subsequent: We see the alternating use
of "Fully Qualified Domain Name" (14 instances) and "FQDN"
(approx. 28 instances) after this point. As recommended at
https://www.rfc-editor.org/styleguide/part2/, we will use the
abbreviation after first expansion unless you object. -->
<t>Issuer: An entity that issues certificates. See <xref target="RFC5280"/>.</t>
<t>Property: The tag-value portion of a CAA Resource Record.</t>
<t>Property Tag: The tag portion of a CAA Resource Record.</t>
<t>Property Value: The value portion of a CAA Resource Record.</t>
<t>Relevant Resource Record Set (Relevant RRSet): A set of CAA
Resource Records resulting
from applying the algorithm in <xref target="relevant-resource-record-set"/> to a specific Fully Qualified Domain Name or
Wildcard Domain Name.</t>
<t>Relying Party: A party that makes use of an application whose
operation depends on the use of a certificate for making a security
decision. See <xref target="RFC5280"/>.</t>
<t>Resource Record (RR): A particular entry in the DNS, including the
owner name, class, type, time to live, and data, as defined in
<xref target="RFC1034"/> and <xref target="RFC2181"/>.</t>
<t>Resource Record Set (RRSet): A set of RRs of a
particular owner name, class, and type. The time to live on all
RRs within an RRSet is always the same, but the data may be
different among RRs in the RRSet.</t>
<!-- [rfced] Section 2.2: As the list in this section was almost in
alphabetical order, we moved the "Resource Record (RR)" and
"Resource Record Set (RRSet)" paragraphs so that they appear after
the "Relying Party" paragraph. Please let us know any objections.
Original:
...
Resource Record (RR): A particular entry in the DNS including the
owner name, class, type, time to live, and data, as defined in
[RFC1034] and [RFC2181].
Resource Record Set (RRSet): A set of RRs of a particular owner
name, class, and type. The time to live on all RRs within an
RRSet is always the same, but the data may be different among RRs
in the RRSet.
Relevant Resource Record Set (Relevant RRSet): A set of CAA Resource
Records resulting from applying the algorithm in Section 3 to a
specific Fully-Qualified Domain Name or Wildcard Domain Name.
Relying Party: A party that makes use of an application whose
operation depends on use of a certificate for making a security
decision. See [RFC5280].
Currently:
...
o Relevant Resource Record Set (Relevant RRSet): A set of CAA
Resource Records resulting from applying the algorithm in
Section 3 to a specific Fully Qualified Domain Name or Wildcard
Domain Name.
o Relying Party: A party that makes use of an application whose
operation depends on the use of a certificate for making a
security decision. See [RFC5280].
o Resource Record (RR): A particular entry in the DNS, including the
owner name, class, type, time to live, and data, as defined in
[RFC1034] and [RFC2181].
o Resource Record Set (RRSet): A set of RRs of a particular owner
name, class, and type. The time to live on all RRs within an
RRSet is always the same, but the data may be different among RRs
in the RRSet. -->
<t>Wildcard Domain Name: A domain name consisting of a single asterisk
character followed by a single "full stop" character ("*.") followed
by a Fully Qualified Domain Name.</t>
</list></t>
</section>
</section>
<section anchor="relevant-resource-record-set" title="Relevant Resource Record Set">
<t>Before issuing a certificate, a compliant CA MUST check for
publication of a Relevant RRSet. If such an RRSet
exists, a CA MUST NOT issue a certificate unless the CA
determines that either (1) the certificate request is consistent with
the applicable CAA RRset or (2) an exception specified
in the relevant CP or CPS applies. If the Relevant RRSet for a Fully Qualified Domain Name
or Wildcard Domain Name contains no Property Tags that restrict issuance
(for instance, if it contains only iodef Property Tags or only Property
Tags unrecognized by the CA), CAA does not restrict issuance.</t>
<t>A certificate request MAY specify more than one Fully Qualified Domain Name and MAY
specify Wildcard Domain Names. Issuers MUST verify authorization for all
the Fully Qualified Domain Names and Wildcard Domain Names specified in the request.</t>
<t>The search for a CAA RRSet climbs the DNS name tree from the
specified label up to, but not including, the DNS root '.'
until a CAA RRSet is found.</t>
<t>Given a request for a specific Fully Qualified Domain Name X or a request for a Wildcard Domain
Name *.X, the Relevant RRset RelevantCAASet(X) is determined as follows (in pseudocode):</t>
<t><list>
<t>Let CAA(X) be the RRSet returned by performing a CAA record query for the
Fully Qualified Domain Name X, according to the lookup algorithm
specified in RFC 1034, Section 4.3.2 (in particular, chasing
aliases). Let Parent(X) be the Fully Qualified Domain Name produced by
removing the leftmost label of X.</t>
<!-- [rfced] Section 3: Please confirm that the updated text
addresses Erratum 5065 (https://www.rfc-editor.org/errata/eid5065). -->
</list></t>
<figure><artwork><![CDATA[
RelevantCAASet(domain):
while domain is not ".":
if CAA(domain) is not Empty:
return CAA(domain)
domain = Parent(domain)
return Empty ]]></artwork></figure>
<t><list>
<t>For example, processing CAA for the Fully Qualified Domain Name "X.Y.Z" where there are
no CAA records at any level in the tree RelevantCAASet would have the
following steps:</t>
</list></t>
<figure><artwork><![CDATA[
CAA("X.Y.Z.") = Empty; domain = Parent("X.Y.Z.") = "Y.Z."
CAA("Y.Z.") = Empty; domain = Parent("Y.Z.") = "Z."
CAA("Z.") = Empty; domain = Parent("Z.") = "."
return Empty ]]></artwork></figure>
<t><list>
<t>Processing CAA for the Fully Qualified Domain Name "A.B.C" where there is a CAA record
"issue example.com" at "B.C" would terminate early upon finding the CAA
record:</t>
</list></t>
<figure><artwork><![CDATA[
CAA("A.B.C.") = Empty; domain = Parent("A.B.C.") = "B.C."
CAA("B.C.") = "issue example.com"
return "issue example.com" ]]></artwork></figure>
</section>
<section anchor="mechanism" title="Mechanism">
<section anchor="syntax" title="Syntax">
<t>A CAA RR contains a single Property consisting of a tag&nbhy;value
pair. A Fully Qualified Domain Name MAY have multiple CAA RRs associated with it, and a
given Property Tag MAY be specified more than once across those RRs.</t>
<t>The RDATA section for a CAA RR contains one Property. A Property
consists of the following:</t>
<figure><artwork><![CDATA[
+0-1-2-3-4-5-6-7-|0-1-2-3-4-5-6-7-|
| Flags | Tag Length = n |
+----------------|----------------+...+---------------+
| Tag char 0 | Tag char 1 |...| Tag char n-1 |
+----------------|----------------+...+---------------+
+----------------|----------------+.....+----------------+
| Value byte 0 | Value byte 1 |.....| Value byte m-1 |
+----------------|----------------+.....+----------------+
]]></artwork></figure>
<t>Where n is the length specified in the Tag Length field and m is the
number of remaining octets in the Value field. They are related by
(m = d - n - 2)
where d is the length of the RDATA section.</t>
<t>The fields are defined as follows:</t>
<t><list style="hanging">
<t hangText="Flags:">One octet containing the following field:
<list style="hanging">
<t hangText="Bit 0, Issuer Critical Flag:">If the value is set to '1', the
Property is critical. A CA MUST NOT issue
certificates for any FQDN if the Relevant RRSet for
that FQDN contains a CAA critical
Property for an unknown or unsupported Property Tag.
<!-- [rfced] Section 4.1: It appears that the word "if" was missing
from this sentence. We added it. If this is not correct, please
clarify "for any FQDN the Relevant RRSet for that FQDN."
Original:
A Certification Authority MUST NOT issue certificates
for any FQDN the Relevant RRSet for that FQDN contains a CAA critical
Property for an unknown or unsupported Property Tag.
Currently:
A CA MUST NOT issue certificates for any
FQDN if the Relevant RRSet for that FQDN contains a CAA critical
Property for an unknown or unsupported Property Tag. -->
</t>
</list></t>
</list></t>
<t>Note that according to the conventions set out in <xref target="RFC1035"/>, bit 0
is the Most Significant Bit and bit 7 is the Least Significant
Bit. Thus, according to those conventions, the Flags value 1 means that bit 7 is
set, while a value of 128 means that bit 0 is set.</t>
<t>All other bit positions are reserved for future use.</t>
<t>To ensure compatibility with future extensions to CAA, DNS records
compliant with this version of the CAA specification MUST clear
(set to "0") all reserved flags bits.
<!-- [rfced] Section 4.1: Should "flags bits" be "flag bits"
(per the next sentence) or "Flags bits" (per "the Flags value 1"
used two paragraphs earlier) here?
Original (the next sentence is included for context):
To ensure compatibility with future extensions to CAA, DNS records
compliant with this version of the CAA specification MUST clear (set
to "0") all reserved flags bits. Applications that interpret CAA
records MUST ignore the value of all reserved flag bits. -->
Applications that interpret
CAA records MUST ignore the value of all reserved flag bits.</t>
<t><list style="hanging">
<t hangText="Tag Length:">A single octet containing an unsigned integer specifying
the tag length in octets. The tag length MUST be at least 1.</t>
<t hangText="Tag:">The Property identifier -- a sequence of ASCII characters.</t>
</list></t>
<t>Tags MAY contain ASCII characters 'a' through 'z', 'A'
through 'Z', and the numbers 0 through 9. Tags MUST NOT
contain any other characters. Matching of tags is case
insensitive.</t>
<t>Tags submitted for registration by IANA MUST NOT contain any
characters other than the (lowercase) ASCII characters 'a'
through 'z' and the numbers 0 through 9.</t>
<t><list style="hanging">
<t hangText="Value:">A sequence of octets representing the Property Value.
Property Values are encoded as binary values and MAY employ
sub&nbhy;formats.</t>
</list></t>
<t>The length of the value field is specified implicitly as the
remaining length of the enclosing RDATA section.</t>
<section anchor="canonical-presentation-format" title="Canonical Presentation Format">
<t>The canonical presentation format of the CAA record is:</t>
<figure><artwork><![CDATA[
CAA <flags> <tag> <value>
]]></artwork></figure>
<t>Where:</t>
<t><list style="hanging">
<t hangText="Flags:">An unsigned integer between 0 and 255.</t>
<t hangText="Tag:">A non-zero-length sequence of ASCII letters and numbers in lowercase.</t>
<t hangText="Value:">The value field, expressed as either (1) a contiguous set of characters
without interior spaces or (2) a quoted string. See the
<character-string> format specified in <xref target="RFC1035"></xref>, Section 5.1,
but note that the value field contains no length byte and is not
limited to 255 characters.</t>
</list></t>
</section>
</section>
<section anchor="caa-issue-property" title="CAA issue Property">
<t>If the issue Property Tag is present in the Relevant RRSet for a
Fully Qualified Domain Name, it is a request that Issuers:</t>
<t><list style="numbers">
<t>Perform CAA issue restriction processing for the FQDN, and</t>
<t>Grant authorization to issue certificates containing that FQDN
to the holder of the issuer-domain-name
or a party acting under the explicit authority of the holder of the
issuer-domain-name.</t>
</list></t>
<t>The CAA issue Property Value has the following sub&nbhy;syntax (specified
in ABNF as per <xref target="RFC5234"/>).</t>
<figure><artwork><![CDATA[
issue-value = *WSP [issuer-domain-name *WSP]
[";" *WSP [parameters *WSP]]
issuer-domain-name = label *("." label)
label = (ALPHA / DIGIT) *( *("-") (ALPHA / DIGIT))
parameters = (parameter *WSP ";" *WSP parameters) / parameter
parameter = tag *WSP "=" *WSP value
tag = (ALPHA / DIGIT) *( *("-") (ALPHA / DIGIT))
value = *(%x21-3A / %x3C-7E)
]]></artwork></figure>
<!-- [rfced] Section 4.2: This line was too long (73 characters,
whereas our limit is 72). We added a carriage return accordingly.
Please let us know if the line break should be somewhere else.
Original:
issue-value = *WSP [issuer-domain-name *WSP] [";" *WSP [parameters *WSP]]
Currently:
issue-value = *WSP [issuer-domain-name *WSP]
[";" *WSP [parameters *WSP]] -->
<t>For consistency with other aspects of DNS administration, FQDN
values are specified in letter-digit-hyphen Label (LDH-Label) form.</t>
<t>The following CAA record set requests that no
certificates be issued for the FQDN 'certs.example.com' by any
Issuer other than ca1.example.net or ca2.example.org.</t>
<figure><artwork><![CDATA[
certs.example.com CAA 0 issue "ca1.example.net"
certs.example.com CAA 0 issue "ca2.example.org"
]]></artwork></figure>
<t>Because the presence of an issue Property Tag in the Relevant RRSet
for an FQDN restricts issuance, FQDN owners can use an issue
Property Tag with no issuer-domain-name to request no issuance.</t>
<t>For example, the following RRSet requests that no
certificates be issued for the FQDN 'nocerts.example.com' by any
Issuer.</t>
<figure><artwork><![CDATA[
nocerts.example.com CAA 0 issue ";"
]]></artwork></figure>
<t>An issue Property Tag where the issue-value does not match the ABNF
grammar MUST be treated the same as one specifying an empty issuer&nbhy;domain-name. For
example, the following malformed CAA RRSet forbids issuance:</t>
<figure><artwork><![CDATA[
malformed.example.com CAA 0 issue "%%%%%"
]]></artwork></figure>
<t>CAA authorizations are additive; thus, the result of specifying both
an empty issuer-domain-name and a non-empty issuer-domain-name is the
same as specifying just the non-empty issuer-domain-name.
<!-- [rfced] Section 4.2: Please confirm that the updated text
addresses Erratum 5244 (https://www.rfc-editor.org/errata/eid5244). -->
</t>
<t>An Issuer MAY choose to specify parameters that further
constrain the issue of certificates by that Issuer -- for example,
specifying that certificates are to be subject to specific validation
policies, billed to certain accounts, or issued under specific trust
anchors.</t>
<t>For example, if ca1.example.net has requested that its customer
accountable.example.com specify their account number "230123" in each
of the customer's CAA records using the (CA-defined) "account" parameter,
it would look like this:</t>
<figure><artwork><![CDATA[
accountable.example.com CAA 0 issue "ca1.example.net; account=230123"
]]></artwork></figure>
<t>The semantics of parameters to the issue Property Tag are determined by
the Issuer alone.</t>
</section>
<section anchor="caa-issuewild-property" title="CAA issuewild Property">
<t>The issuewild Property Tag has the same syntax and semantics as the issue
Property Tag except that it only grants authorization to
issue certificates that specify a Wildcard Domain Name and each issuewild
Property takes precedence over each issue Property when specified.
Specifically:</t>
<t>Each issuewild Property MUST be ignored when processing a request for
a Fully Qualified Domain Name that is not a Wildcard Domain Name.</t>
<t>If at least one issuewild Property is specified in the Relevant
RRSet for a Wildcard Domain Name, each issue Property MUST
be ignored when processing a request for that Wildcard Domain Name.</t>
<t>For example, the following RRSet requests that <spanx style="emph">only</spanx>
ca1.example.net issue certificates for "wild.example.com" or
"sub.wild.example.com", and that <spanx style="emph">only</spanx> ca2.example.org issue certificates for
"*.wild.example.com" or "*.sub.wild.example.com". Note that this presumes
that there are no CAA RRs for sub.wild.example.com.</t>
<figure><artwork><![CDATA[
wild.example.com CAA 0 issue "ca1.example.net"
wild.example.com CAA 0 issuewild "ca2.example.org"
]]></artwork></figure>
<t>The following RRSet requests that <spanx style="emph">only</spanx> ca1.example.net issue
certificates for "wild2.example.com", "*.wild2.example.com", or
"*.sub.wild2.example.com".</t>
<figure><artwork><![CDATA[
wild2.example.com CAA 0 issue "ca1.example.net"
]]></artwork></figure>
<t>The following RRSet requests that <spanx style="emph">only</spanx> ca2.example.org issue
certificates for "*.wild3.example.com" or "*.sub.wild3.example.com". It
does not permit any Issuer to issue for "wild3.example.com" or
"sub.wild3.example.com".</t>
<figure><artwork><![CDATA[
wild3.example.com CAA 0 issuewild "ca2.example.org"
wild3.example.com CAA 0 issue ";"
]]></artwork></figure>
<t>The following RRSet requests that <spanx style="emph">only</spanx> ca2.example.org issue
certificates for "*.wild3.example.com" or "*.sub.wild3.example.com". It
permits any Issuer to issue for "wild3.example.com" or "sub.wild3.example.com".</t>
<figure><artwork><![CDATA[
wild3.example.com CAA 0 issuewild "ca2.example.org"
]]></artwork></figure>
</section>
<section anchor="caa-iodef-property" title="CAA iodef Property">
<t>The iodef Property specifies a means of reporting certificate issue
requests or cases of certificate issue for domains for which the Property
appears in the Relevant RRSet, when those requests or issuances
violate the security policy of the Issuer or the FQDN holder.</t>
<t>The Incident Object Description Exchange Format (IODEF) <xref target="RFC7970"/> is
used to present the incident report in machine-readable form.</t>
<t>The iodef Property Tag takes a URL as its Property Value. The URL scheme type
determines the method used for reporting:</t>
<t><list style="hanging">
<t hangText="mailto:">The IODEF incident report is reported as a MIME email
attachment to an SMTP email that is submitted to the mail address
specified. The mail message sent SHOULD contain a brief text
message to alert the recipient to the nature of the attachment.</t>
<t hangText="http or https:">The IODEF report is submitted as a web service
request to the HTTP address specified using the protocol specified
in <xref target="RFC6546"/>.</t>
</list></t>
<t>These are the only supported URL schemes.</t>
<t>The following RRSet specifies
that reports may be made by means of email with the IODEF data as an
attachment, a web service <xref target="RFC6546"></xref>, or both:</t>
<figure><artwork><![CDATA[
report.example.com CAA 0 issue "ca1.example.net"
report.example.com CAA 0 iodef "mailto:security@example.com"
report.example.com CAA 0 iodef "http://iodef.example.com/"
]]></artwork></figure>
</section>
<section anchor="critical-flag" title="Critical Flag">
<t>The critical flag is intended to permit future versions of CAA to
introduce new semantics that MUST be understood for correct
processing of the record, preventing conforming CAs that do not
recognize the new semantics from issuing certificates for the
indicated FQDNs.</t>
<t>In the following example, the Property with a Property Tag of
'tbs' is flagged as critical.
Neither the ca1.example.net CA nor any other Issuer is authorized to
issue for "new.example.com" (or any other domains for which this is
the Relevant RRSet) unless the Issuer has implemented the
processing rules for the 'tbs' Property Tag.</t>
<figure><artwork><![CDATA[
new.example.com CAA 0 issue "ca1.example.net"
new.example.com CAA 128 tbs "Unknown"
]]></artwork></figure>
</section>
</section>
<section anchor="security-considerations" title="Security Considerations">
<t>CAA records assert a security policy that the holder of an FQDN
wishes to be observed by Issuers. The effectiveness of
CAA records as an access control mechanism is thus dependent on
observance of CAA constraints by Issuers.</t>
<t>The objective of the CAA record properties described in this document
is to reduce the risk of certificate mis-issue rather than avoid
reliance on a certificate that has been mis-issued. DANE <xref target="RFC6698"/>
describes a mechanism for avoiding reliance on mis-issued
certificates.</t>
<section anchor="use-of-dns-security" title="Use of DNS Security">
<t>The use of DNSSEC to authenticate CAA RRs is strongly RECOMMENDED but not
required. An Issuer MUST NOT issue certificates if doing so would
conflict with the Relevant RRSet, irrespective of
whether the corresponding DNS records are signed.</t>
<t>DNSSEC provides a proof of non-existence for both DNS Fully Qualified Domain Names and
RRSets within FQDNs. DNSSEC verification thus enables an Issuer to
determine whether the answer to a CAA record query (1) is empty because
the RRSet is empty or (2) is non-empty but the response has been
suppressed.</t>
<t>The use of DNSSEC allows an Issuer to acquire and archive a proof that
they were authorized to issue certificates for the FQDN.
Verification of such archives may be an audit requirement to verify
CAA record-processing compliance. Publication of such archives may
be a transparency requirement to verify CAA record-processing
compliance.</t>
</section>
<section anchor="non-compliance-by-certification-authority" title="Non-compliance by Certification Authority">
<t>CAA records offer CAs a cost-effective means of mitigating the risk
of certificate mis-issue: the cost of implementing CAA checks is very
small, and the potential costs of a mis-issue event include the
removal of an embedded trust anchor.</t>
</section>
<section anchor="mis-issue-by-authorized-certification-authority" title="Mis-Issue by Authorized Certification Authority">
<t>The use of CAA records does not prevent mis-issue by an authorized
CA, i.e., a CA that is authorized to issue
certificates for the FQDN in question by CAA records.</t>
<t>FQDN holders SHOULD verify that the CAs they authorize to
issue certificates for their FQDNs employ appropriate controls to
ensure that certificates are issued only to authorized parties within
their organization.</t>
<t>Such controls are most appropriately determined by the FQDN
holder and the authorized CA(s) directly and are thus outside the scope of
this document.</t>
</section>
<section anchor="suppression-or-spoofing-of-caa-records" title="Suppression or Spoofing of CAA Records">
<t>Suppression of a CAA record or insertion of a bogus CAA record
could enable an attacker to obtain a certificate from an Issuer that
was not authorized to issue for an affected FQDN.</t>
<t>Where possible, Issuers SHOULD perform DNSSEC validation to detect
missing or modified CAA record sets.</t>
<t>In cases where DNSSEC is not deployed for a corresponding FQDN, an
Issuer SHOULD attempt to mitigate this risk by employing appropriate
DNS security controls. For example, all portions of the DNS lookup
process SHOULD be performed against the authoritative nameserver.
Data cached by third parties MUST NOT be relied on as the sole source of DNS CAA
information but MAY be used to
support additional anti&nbhy;spoofing or anti-suppression controls.</t>
</section>
<section anchor="denial-of-service" title="Denial of Service">
<t>Introduction of a malformed or malicious CAA RR could, in theory,
enable a Denial-of-Service (DoS) attack. This could happen by modification of
authoritative DNS records or by spoofing inflight DNS responses.</t>
<t>This specific threat is not considered to add significantly to the
risk of running an insecure DNS service.</t>
<t>An attacker could, in principle, perform a DoS attack against an
Issuer by requesting a certificate with a maliciously long DNS name.
In practice, the DNS protocol imposes a maximum name length, and CAA
processing does not exacerbate the existing need to mitigate DoS
attacks to any meaningful degree.</t>
</section>
<section anchor="abuse-of-the-critical-flag" title="Abuse of the Critical Flag">
<t>A CA could make use of the critical flag to
trick customers into publishing records that prevent competing CAs
from issuing certificates even though the
customer intends to authorize multiple providers. This could happen if the
customers were setting CAA records based on data provided by the CA rather than
generating those records themselves.</t>
<t>In practice, such an attack would be of minimal effect, since any
competent competitor that found itself unable to issue certificates
due to lack of support for a Property marked critical should
investigate the cause and report the reason to the customer. The
customer will thus discover that they had been deceived.</t>
</section>
</section>
<section anchor="deployment-considerations" title="Deployment Considerations">
<t>A CA implementing CAA may find that they receive errors looking up CAA records.
The following are some common causes of such errors, so that CAs may provide
guidance to their subscribers on fixing the underlying problems.</t>
<section anchor="blocked-queries-or-responses" title="Blocked Queries or Responses">
<t>Some middleboxes -- in particular, anti-DDoS appliances -- may be configured to
drop DNS packets of unknown types, or they may start dropping such packets when
they consider themselves under attack. This generally manifests as a timed-out
DNS query or as a SERVFAIL at a local recursive resolver.</t>
</section>
<section anchor="rejected-queries-and-malformed-responses" title="Rejected Queries and Malformed Responses">
<t>Some authoritative nameservers respond with REJECTED or NOTIMP when queried
for an RR type they do not recognize. At least one authoritative
resolver produces a malformed response (with the QR (Query/Response) bit set to "0") when queried
for unknown RR types. Per RFC 1034, the correct response for
unknown RR types is NOERROR.
<!-- [rfced] Section 6.2: Please let us know if any updates are
needed regarding the following:
a) For ease of the reader, we changed "QR bit" to QR (Query/Response)
bit." Please let us know if this is incorrect.
b) We could not find any mention of "NOERROR" in RFC 1034 (but we see
"A name error (NE)"). Will this sentence be clear to readers?
Original:
At least
one authoritative resolver produces a malformed response (with the QR
bit set to 0) when queried for unknown Resource Record types. Per
RFC 1034, the correct response for unknown Resource Record types is
NOERROR.
Currently:
At least one
authoritative resolver produces a malformed response (with the QR
(Query/Response) bit set to "0") when queried for unknown RR types.
Per RFC 1034, the correct response for unknown RR types is NOERROR. -->
</t>
</section>
<section anchor="delegation-to-private-nameservers" title="Delegation to Private Nameservers">
<t>Some FQDN administrators make the contents of a subdomain unresolvable on the
public Internet by delegating that subdomain to a nameserver whose IP address is
private. A CA processing CAA records for such subdomains will receive
SERVFAIL from its recursive resolver. The CA MAY interpret that as preventing
issuance. FQDN administrators wishing to issue certificates for private
FQDNs SHOULD use split-horizon DNS with a publicly available nameserver, so
that CAs can receive a valid, empty CAA response for those FQDNs.</t>
</section>
<section anchor="bogus-dnssec-responses" title="Bogus DNSSEC Responses">
<t>Queries for CAA RRs are different from most DNS RR types, because
a signed, empty response to a query for CAA RRs is meaningfully different
from a bogus response. A signed, empty response indicates that there is
definitely no CAA policy set at a given label. A bogus response may mean
either a misconfigured zone or an attacker tampering with records. DNSSEC
implementations may have bugs with signatures on empty responses that go
unnoticed, because for more common RR types like A and AAAA,
the difference to an end user between empty and bogus is irrelevant; they
both mean a site is unavailable.</t>
<t>In particular, at least two authoritative resolvers that implement live signing
had bugs when returning empty RRsets for DNSSEC-signed zones, in
combination with mixed-case queries. Mixed&nbhy;case queries, also known as DNS 0x20,
are used by some recursive resolvers to increase resilience against DNS
poisoning attacks. DNSSEC-signing authoritative resolvers are expected to copy
the same capitalization from the query into their ANSWER section but also to sign the
response as if they had used all lowercase. In particular, PowerDNS versions
prior to 4.0.4 had this bug.</t>
</section>
</section>
<section anchor="differences-versus-rfc6844" title="Differences from RFC 6844">
<t>This document obsoletes RFC 6844. The most important change is to
the "Certification Authority Processing" section (now called
"Relevant Resource Record Set," as noted below). RFC 6844 specified an
algorithm that performed DNS tree-climbing not only on the FQDN
being processed but also on all CNAMEs and DNAMEs encountered along
the way. This made the processing algorithm very inefficient when used
on FQDNs that utilize many CNAMEs and would have made it difficult
for hosting providers to set CAA policies on their own FQDNs without
setting potentially unwanted CAA policies on their customers' FQDNs.
This document specifies a simplified processing algorithm that only
performs tree-climbing on the FQDN being processed, and it leaves the
processing of CNAMEs and DNAMEs up to the CA's recursive resolver.</t>
<t>This document also includes a "Deployment Considerations" section
detailing experience gained with practical deployment of CAA enforcement
among CAs in the WebPKI.</t>
<t>This document clarifies the ABNF grammar for the issue and issuewild tags
and resolves some inconsistencies with the document text. In particular,
it specifies that parameters are separated with semicolons. It also allows
hyphens in Property Tags.</t>
<t>This document also clarifies the processing of a CAA RRset that is not empty
but that does not contain any issue or issuewild tags.</t>
<t>This document removes the section titled "The CAA RR Type," merging it with
"Mechanism" because the definitions were mainly duplicates. It moves the "Use of
DNS Security" section into Security Considerations. It renames "Certification
Authority Processing" to "Relevant Resource Record Set" and emphasizes the use
of that term to more clearly define which domains are affected by a given RRset.</t>
</section>
<section anchor="iana-considerations" title="IANA Considerations">
<t>IANA has added this document as
a reference for the "Certification Authority Restriction Flags" and
"Certification Authority Restriction Properties" registries and updated
references to <xref target="RFC6844"/> within those registries to refer instead to
this document. IANA has also updated the CAA TYPE in the
"Resource Record (RR) TYPEs" subregistry of the "Domain Name System (DNS) Parameters" registry with a reference
to this document.</t>
</section>
</middle>
<back>
<references title='Normative References'>
<?rfc include="reference.RFC.6698"?>
<?rfc include="reference.RFC.2119"?>
<?rfc include="reference.RFC.8174"?>
<?rfc include="reference.RFC.5280"?>
<?rfc include="reference.RFC.1034"?>
<?rfc include="reference.RFC.1035"?>
<?rfc include="reference.RFC.4033"?>
<?rfc include="reference.RFC.4034"?>
<?rfc include="reference.RFC.4035"?>
<?rfc include="reference.RFC.5155"?>
<?rfc include="reference.RFC.2181"?>
<?rfc include="reference.RFC.5234"?>
<?rfc include="reference.RFC.7970"?>
<?rfc include="reference.RFC.6546"?>
<?rfc include="reference.RFC.6844"?>
</references>
<references title='Informative References'>
<?rfc include="reference.RFC.3647"?>
</references>
<section anchor="acknowledgements" title="Acknowledgements" numbered="no">
<t>The authors would like to thank the following people who contributed
to the design and documentation of this work item: Corey Bonnell, Chris Evans,
Stephen Farrell, Jeff Hodges, Paul Hoffman, Tim Hollebeek, Stephen Kent, Adam
Langley, Ben Laurie, James Manger, Chris Palmer, Scott Schmit, Sean Turner, and
Ben Wilson.</t>
</section>
</back>
<!-- [rfced] Please let us know if any changes are needed for the
following:
a) The following terms were used inconsistently in this document.
We chose to use the latter forms. Please let us know any objections.
name server (1 instance) / nameserver (5 instances)
Tag length field / Tag Length (field)
b) The following terms appear to be used inconsistently in this
document. Please let us know which form is preferred.
issuer / Issuer (e.g., we see "certificate issuers" but "Issuer"
used everywhere else in this document)
relying party / Relying Party
CAA record set / CAA Resource Record set
RRSet / RRset (We see that "RRset" is used more often in post-6000
published RFCs.)
value field / Value field
IODEF incident report / IODEF report (Are these the same
thing, or two different terms?)
c) Would you like quoting (single versus double) to be consistent?
Current quoting is mostly double, but we see (for example)
set to '1'
set to "0"
'.'
"."
-->
</rfc>