forked from tlswg/dnssec-chain-extension
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathdraft-dukhovni-tls-dnssec-chain-04.txt
2016 lines (1529 loc) · 88.4 KB
/
draft-dukhovni-tls-dnssec-chain-04.txt
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
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
Network Working Group V. Dukhovni
Internet-Draft Two Sigma
Intended status: Experimental S. Huque
Expires: 30 October 2021 Salesforce
W. Toorop
NLnet Labs
P. Wouters
No Hats
M. Shore
Fastly
28 April 2021
TLS DNSSEC Chain Extension
draft-dukhovni-tls-dnssec-chain-04
Abstract
This document describes an experimental TLS extension for in-band
transport of the complete set of DNSSEC validated records needed to
perform DANE authentication of a TLS server without the need to
perform separate out-of-band DNS lookups. When the requisite DNS
records do not exist, the extension conveys a validated denial of
existence proof.
This experimental extension is developed outside the IETF and is
published here to guide implementation of the extension and to ensure
interoperability among implementations.
Status of This Memo
This Internet-Draft is submitted in full conformance with the
provisions of BCP 78 and BCP 79.
Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet-
Drafts is at https://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress."
This Internet-Draft will expire on 30 October 2021.
Dukhovni, et al. Expires 30 October 2021 [Page 1]
Internet-Draft tls-dnssec-chain April 2021
Copyright Notice
Copyright (c) 2021 IETF Trust and the persons identified as the
document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents (https://trustee.ietf.org/
license-info) in effect on the date of publication of this document.
Please review these documents carefully, as they describe your rights
and restrictions with respect to this document.
Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3
1.1. Scope of the experiment . . . . . . . . . . . . . . . . . 4
1.2. Requirements Notation . . . . . . . . . . . . . . . . . . 4
2. DNSSEC Authentication Chain Extension . . . . . . . . . . . . 4
2.1. Protocol, TLS 1.2 . . . . . . . . . . . . . . . . . . . . 5
2.2. Protocol, TLS 1.3 . . . . . . . . . . . . . . . . . . . . 6
2.3. DNSSEC Authentication Chain Data . . . . . . . . . . . . 6
2.3.1. Authenticated Denial of Existence . . . . . . . . . . 9
3. Construction of Serialized Authentication Chains . . . . . . 9
4. Caching and Regeneration of the Authentication Chain . . . . 10
5. Expired signatures in the Authentication Chain . . . . . . . 11
6. Verification . . . . . . . . . . . . . . . . . . . . . . . . 11
7. Extension Pinning . . . . . . . . . . . . . . . . . . . . . . 12
8. Trust Anchor Maintenance . . . . . . . . . . . . . . . . . . 13
9. Virtual Hosting . . . . . . . . . . . . . . . . . . . . . . . 14
10. Operational Considerations . . . . . . . . . . . . . . . . . 15
11. Security Considerations . . . . . . . . . . . . . . . . . . . 16
12. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 16
13. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 16
14. Normative References . . . . . . . . . . . . . . . . . . . . 17
15. Informative References . . . . . . . . . . . . . . . . . . . 18
Appendix A. Test Vectors . . . . . . . . . . . . . . . . . . . . 19
A.1. _443._tcp.www.example.com . . . . . . . . . . . . . . . . 21
A.2. _25._tcp.example.com NSEC wildcard . . . . . . . . . . . 25
A.3. _25._tcp.example.org NSEC3 wildcard . . . . . . . . . . . 26
A.4. _443._tcp.www.example.org CNAME . . . . . . . . . . . . . 28
A.5. _443._tcp.www.example.net DNAME . . . . . . . . . . . . . 29
A.6. _25._tcp.smtp.example.com NSEC Denial of Existence . . . 31
A.7. _25._tcp.smtp.example.org NSEC3 Denial of Existence . . . 33
A.8. _443._tcp.www.insecure.example NSEC3 opt-out insecure
delegation . . . . . . . . . . . . . . . . . . . . . . . 34
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 35
Dukhovni, et al. Expires 30 October 2021 [Page 2]
Internet-Draft tls-dnssec-chain April 2021
1. Introduction
This document describes an experimental TLS [RFC5246][RFC8446]
extension for in-band transport of the complete set of DNSSEC
[RFC4033][RFC4034][RFC4035] validated Resource Records (RRs) that
enable a TLS client to perform DANE Authentication [RFC6698][RFC7671]
of a TLS server without the need to perform out-of-band DNS lookups.
Retrieval of the required DNS records may be unavailable to the
client [HAMPERING], or may incur undesirable additional latency.
The extension described here allows a TLS client to request that the
TLS server return the DNSSEC authentication chain corresponding to
its DNSSEC-validated DANE TLSA Resource Record set (RRset), or
authenticated denial of existence of such an RRset (as described in
Section 2.3.1). If the server supports this extension it performs
the appropriate DNS queries, builds the authentication chain, and
returns it to the client. The server will typically use a previously
cached authentication chain, but it will need to rebuild it
periodically as described in Section 4. The client then
authenticates the chain using a pre-configured DNSSEC trust anchor.
In the absence of TLSA records, this extension conveys the required
authenticated denial of existence. Such proofs are needed to
securely signal that specified TLSA records are not available so that
TLS clients can safely fall back to WebPKI based authentication if
allowed by local policy. These proofs are also needed to avoid
downgrade from opportunistic authenticated TLS (when DANE TLSA
records are present) to unauthenticated opportunistic TLS (in the
absence of DANE). Denial of existence records are also used by the
TLS client to clear no longer relevant extension pins, as described
in Section 7.
This extension supports DANE authentication of either X.509
certificates or raw public keys as described in the DANE
specification [RFC6698][RFC7671] and [RFC7250].
This extension also mitigates against an unknown key share (UKS)
attack [I-D.barnes-dane-uks] when using raw public keys, since the
server commits to its DNS name (normally found in its certificate)
via the content of the returned TLSA RRset.
This experimental extension is developed outside the IETF and is
published here to guide implementation of the extension and to ensure
interoperability among implementations.
Dukhovni, et al. Expires 30 October 2021 [Page 3]
Internet-Draft tls-dnssec-chain April 2021
1.1. Scope of the experiment
The mechanism described in this document, is intended to be done with
applications on the wider internet. One application of TLS well
suited for the TLS DNSSEC Chain extension is DNS over TLS [RFC7858].
In fact, one of the authentication methods for DNS over TLS _is_ the
mechanism described in this document, as specified in Section 8.2.2
of [RFC8310].
The need for the mechanism when DANE authenticating DNS over TLS
resolver is obvious, since DNS may not be available to perform the
required DNS lookups. Other applications of TLS would benefit from
using this mechanism as well. The client sides of those applications
would not be required to be used on end-points with a working DNSSEC
resolver in order for them to use DANE authentication of the TLS
service. Therefore we invite other TLS services to try out this
mechanism as well.
In the TLS working group, concerns have been raised that the pinning
technique, as described in Section 7 would complicate deployability
of the TLS DNSSEC Chain extension. The goal of the experiment is to
study these complications in real world deployments. This experiment
hopefully will give the TLS working group some insight into whether
or not this is a problem.
If the experiment is successful, it is expected that the findings of
the experiment will result in an updated document for standards track
approval.
1.2. Requirements Notation
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 [RFC2119] [RFC8174] when, and only when, they appear in all
capitals, as shown here.
2. DNSSEC Authentication Chain Extension
Dukhovni, et al. Expires 30 October 2021 [Page 4]
Internet-Draft tls-dnssec-chain April 2021
2.1. Protocol, TLS 1.2
A client MAY include an extension of type "dnssec_chain" in the
(extended) ClientHello. The "extension_data" field of this extension
consists of the server's 16-bit TCP port number in network (big-
endian) byte order. Clients sending this extension MUST also send
the Server Name Identification (SNI, [RFC6066]) extension. Together,
these make it possible for the server to determine which
authenticated TLSA RRset chain needs to be used for the
"dnssec_chain" extension.
When a server that implements (and is configured to enable the use
of) this extension receives a "dnssec_chain" extension in the
ClientHello, it MUST first check whether the requested TLSA RRset
(based on the port number in this extension and hostname in the SNI
extension) is associated with the server. If the extension, the SNI
hostname or the port number is unsupported, the server's extended
ServerHello message MUST NOT include the "dnssec_chain" extension.
Otherwise, the server's extended ServerHello message MUST contain a
serialized authentication chain using the format described below. If
the server does not have access to the requested DNS chain - for
example due to a misconfiguration or expired chain - the server MUST
omit the extension rather than send an incomplete chain. Clients
that are expecting this extension MUST interpret this as a downgrade
attack and MUST abort the TLS session. Therefore, servers MUST send
denial of existence proofs, unless, for the particular application
protocol or service, clients are expected to continue even in the
absence of such a proof. As with all TLS extensions, if the server
does not support this extension it will not return any authentication
chain.
The set of supported combinations of port number and SNI name may be
configured explicitly by server administrators, or could be inferred
from the available certificates combined with a list of supported
ports. It is important to note that the client's notional port
number may be different from the actual port on which the server is
receiving connections.
Differences between the client's notional port number and the actual
port at the server could be a result of intermediate systems
performing network address translation, or perhaps a result of a
redirect via HTTPS or SVCB records (both defined in
[I-D.ietf-dnsop-svcb-https]).
Though a DNS zone's HTTPS or SVCB records may be signed, a client
using this protocol might not have direct access to a validating
resolver, and might not be able to check the authenticity of the
Dukhovni, et al. Expires 30 October 2021 [Page 5]
Internet-Draft tls-dnssec-chain April 2021
target port number or hostname. In order to avoid downgrade attacks
via forged DNS records, the SNI name and port number inside the
client extension MUST be based on the original SNI name and port and
MUST NOT be taken from the encountered HTTPS or SVCB record. The
client supporting this document and HTTPS / SVCB records, MUST still
use the HTTPS or SVCB records to select the target transport
endpoint. Servers supporting this extension that are targets of
HTTPS or SVCB records MUST be provisioned to process client
extensions based on the client's logical service endpoint's SNI and
port as it is prior to HTTPS or SVCB indirection.
2.2. Protocol, TLS 1.3
In TLS 1.3 [RFC8446], the server adds its "dnssec_chain" extension to
the extension block of the Certificate message containing the end
entity certificate being validated, rather than to the extended
ServerHello message.
The extension protocol behavior otherwise follows that specified for
TLS version 1.2 [RFC5246].
2.3. DNSSEC Authentication Chain Data
The "extension_data" field of the client's "dnssec_chain" extension
MUST contain the server's 16-bit TCP port number in network (big-
endian) byte order:
struct {
uint16 PortNumber;
} DnssecChainExtension;
The "extension_data" field of the server's "dnssec_chain" extension
MUST contain a DNSSEC Authentication Chain encoded in the following
form:
struct {
uint16 ExtSupportLifetime;
opaque AuthenticationChain<1..2^16-1>
} DnssecChainExtension;
The ExtSupportLifetime value is the number of hours for which the TLS
server has committed itself to serving this extension. A value of
zero prohibits the client from unilaterally requiring ongoing use of
the extension based on prior observation of its use (extension
pinning). This is further described in Section 7.
Dukhovni, et al. Expires 30 October 2021 [Page 6]
Internet-Draft tls-dnssec-chain April 2021
The AuthenticationChain is composed of a sequence of uncompressed
wire format DNS RRs (including all requisite RRSIG [RFC4034] RRs) in
no particular order. The format of the Resource Record is described
in [RFC1035], Section 3.2.1.
RR = { owner, type, class, TTL, RDATA length, RDATA }
The order of returned RRs is unspecified and a TLS client MUST NOT
assume any ordering of RRs.
Use of native DNS wire format records enables easier generation of
the data structure on the server and easier verification of the data
on client by means of existing DNS library functions.
The returned RRsets MUST contain either the requested TLSA RRset, or
else the associated denial of existence proof. In either case, the
chain of RRs MUST be accompanied with the full set of DNS records
needed to authenticate the TLSA record set or its denial of existence
up the DNS hierarchy to either the Root Zone or another trust anchor
mutually configured by the TLS server and client.
When some subtree in the chain is subject to redirection via DNAME
records, the associated inferred CNAME records need not be included,
they can be inferred by the DNS validation code in the client. Any
applicable ordinary CNAME records that are not synthesized from DNAME
records MUST be included along with their RRSIGs.
In case of a server-side DNS problem, servers may be unable to
construct the authentication chain and would then have no choice but
to omit the extension.
In the case of a denial of existence response, the authentication
chain MUST include all DNSSEC signed records from the trust-anchor
zone to a proof of non-existence of either the (possibly redirected
via aliases) TLSA records or else of an insecure delegation above or
at the (possibly redirected) owner name of the requested TLSA RRset.
Names that are aliased via CNAME and/or DNAME records may involve
multiple branches of the DNS tree. In this case, the authentication
chain structure needs to include DS and DNSKEY record sets that cover
all the necessary branches.
The returned chain should also include the DNSKEY RRSets of all
relevant trust anchors (typically just the root DNS zone). Though
the same trust anchors are presumably also preconfigured in the TLS
client, including them in the response from the server permits TLS
clients to use the automated trust anchor rollover mechanism defined
in [RFC5011] to update their configured trust anchors.
Dukhovni, et al. Expires 30 October 2021 [Page 7]
Internet-Draft tls-dnssec-chain April 2021
Barring prior knowledge of particular trust anchors that the server
shares with its clients, the chain constructed by the server MUST be
extended as close as possible to the root zone. Truncation of the
chain at some intermediate trust anchor is generally only appropriate
inside private networks where all clients and the server are expected
to be configured with DNS trust anchors for one or more non-root
domains.
The following is an example of the records in the AuthenticationChain
structure for the HTTPS server at "www.example.com", where there are
zone cuts at "com." and "example.com." (record data are omitted here
for brevity):
_443._tcp.www.example.com. TLSA
RRSIG(_443._tcp.www.example.com. TLSA)
example.com. DNSKEY
RRSIG(example.com. DNSKEY)
example.com. DS
RRSIG(example.com. DS)
com. DNSKEY
RRSIG(com. DNSKEY)
com. DS
RRSIG(com. DS)
. DNSKEY
RRSIG(. DNSKEY)
The following is an example of denial of existence for a TLSA RRset
at "_443._tcp.www.example.com". The NSEC record in this example
asserts the non-existence of both the requested RRset and any
potentially relevant wildcard records.
www.example.com. IN NSEC example.com. A NSEC RRSIG
RRSIG(www.example.com. NSEC)
example.com. DNSKEY
RRSIG(example.com. DNSKEY)
example.com. DS
RRSIG(example.com. DS)
com. DNSKEY
RRSIG(com. DNSKEY)
com. DS
RRSIG(com. DS)
. DNSKEY
RRSIG(. DNSKEY)
The following is an example of (hypothetical) insecure delegation of
"example.com" from the ".com" zone. This example shows NSEC3 records
with opt-out.
Dukhovni, et al. Expires 30 October 2021 [Page 8]
Internet-Draft tls-dnssec-chain April 2021
; covers example.com
onib9mgub9h0rml3cdf5bgrj59dkjhvj.com. NSEC3 (1 1 0 -
onib9mgub9h0rml3cdf5bgrj59dkjhvl NS DS RRSIG)
RRSIG(onib9mgub9h0rml3cdf5bgrj59dkjhvj.com. NSEC3)
; covers *.com
3rl2r262eg0n1ap5olhae7mah2ah09hi.com. NSEC3 (1 1 0 -
3rl2r262eg0n1ap5olhae7mah2ah09hk NS DS RRSIG)
RRSIG(3rl2r262eg0n1ap5olhae7mah2ah09hj.com. NSEC3)
; closest-encloser "com"
ck0pojmg874ljref7efn8430qvit8bsm.com. NSEC3 (1 1 0 -
ck0pojmg874ljref7efn8430qvit8bsm.com
NS SOA RRSIG DNSKEY NSEC3PARAM)
RRSIG(ck0pojmg874ljref7efn8430qvit8bsm.com. NSEC3)
com. DNSKEY
RRSIG(com. DNSKEY)
com. DS
RRSIG(com. DS)
. DNSKEY
RRSIG(. DNSKEY)
2.3.1. Authenticated Denial of Existence
TLS servers supporting this extension that do not have a signed TLSA
record MUST instead return a DNSSEC chain that provides authenticated
denial of existence. A TLS client receiving proof of authenticated
denial of existence MUST use an alternative method to verify the TLS
server identity or close the connection. Such an alternative could
be the classic WebPKI model of preinstalled root CA's.
Authenticated denial chains include NSEC or NSEC3 records that
demonstrate one of the following facts:
* The TLSA record (after any DNSSEC validated alias redirection)
does not exist.
* There is no signed delegation to a DNS zone which is either an
ancestor of, or the same as, the TLSA record name (after any
DNSSEC validated alias redirection).
3. Construction of Serialized Authentication Chains
This section describes a possible procedure for the server to use to
build the serialized DNSSEC chain.
When the goal is to perform DANE authentication [RFC6698][RFC7671] of
the server, the DNS record set to be serialized is a TLSA record set
corresponding to the server's domain name, protocol, and port number.
Dukhovni, et al. Expires 30 October 2021 [Page 9]
Internet-Draft tls-dnssec-chain April 2021
The domain name of the server MUST be that included in the TLS
"server_name" (SNI) extension [RFC6066]. If the server does not
recognize the SNI name as one if its own names, but wishes to proceed
with the handshake rather than to abort the connection, the server
MUST NOT send a "dnssec_chain" extension to the client.
The name in client's SNI extension MUST NOT be CNAME-expanded by the
server. The TLSA base domain (Section 3 of [RFC6698]) SHALL be the
hostname from the client's SNI extension and the guidance in
Section 7 of [RFC7671] does not apply. See Section 9 for further
discussion.
The TLSA record to be queried is constructed by prepending
underscore-prefixed port number and transport name labels to the
domain name as described in [RFC6698]. The port number is taken from
the client's "dnssec_chain" extension. The transport name is "tcp"
for TLS servers, and "udp" for DTLS servers. The port number label
is the left-most label, followed by the transport name label,
followed by the server domain name (from SNI).
The components of the authentication chain are typically built by
starting at the target record set and its corresponding RRSIG. Then
traversing the DNS tree upwards towards the trust anchor zone
(normally the DNS root). For each zone cut, the DNSKEY and DS RRsets
and their signatures are added. However, see Section 2.3 for
specific processing needed for aliases. If DNS response messages
contain any domain names utilizing name compression [RFC1035], then
they MUST be uncompressed prior to inclusion in the chain.
Implementations of EDNS Chain Query Requests as specified in
[RFC7901] may offer an easier way to obtain all of the chain data in
one transaction with an upstream DNSSEC aware recursive server.
4. Caching and Regeneration of the Authentication Chain
DNS records have Time To Live (TTL) parameters, and DNSSEC signatures
have validity periods (specifically signature expiration times).
After the TLS server constructs the serialized authentication chain,
it SHOULD cache and reuse it in multiple TLS connection handshakes.
However, it SHOULD refresh and rebuild the chain as TTL values
require. A server implementation could carefully track TTL
parameters and requery component records in the chain
correspondingly. Alternatively, it could be configured to rebuild
the entire chain at some predefined periodic interval that does not
exceed the DNS TTLs of the component records in the chain. If a
record in the chain has a very short TTL (eg 0 up to a few seconds),
the server MAY decide to serve the authentication chain a few seconds
past the minimum TTL in the chain. This allows an implementation to
Dukhovni, et al. Expires 30 October 2021 [Page 10]
Internet-Draft tls-dnssec-chain April 2021
dedicate a process or single thread to building the authentication
chain and re-use it for more than a single waiting TLS client before
needing to rebuild the authentication chain.
5. Expired signatures in the Authentication Chain
A server MAY look at the signature expiration of RRSIG records.
While these should never expire before the TTL of the corresponding
DNS record is reached, if this situation is encountered nevertheless,
the server MAY lower the TTL to prevent serving expired RRSIGs if
possible. If the signatures are already expired, the server MUST
still include these records into the authentication chain. This
allows the TLS client to either support a grace period for staleness,
or allows the TLS client to give a detailed error, either as log
message or to a potential interactive user of the TLS connection.
The TLS client SHOULD handle expired RRSIGs similar to how it handles
expired PKIX certificates.
6. Verification
A TLS client performing DANE based verification might not need to use
this extension. For example, the TLS client could perform native DNS
lookups and perform DANE verification without this extension. Or it
could fetch authentication chains via another protocol. If the TLS
client already possesses a valid TLSA record, it MAY omit using this
extension. However, if it includes this extension, it MUST use the
TLS server reply to update the extension pinning status of the TLS
server's extension lifetime. See Section 7.
A TLS client making use of this specification, and which receives a
valid DNSSEC authentication chain extension from a server, MUST use
this information to perform DANE authentication of the server. In
order to perform the validation, it uses the mechanism specified by
the DNSSEC protocol [RFC4035][RFC5155]. This mechanism is sometimes
implemented in a DNSSEC validation engine or library.
If the authentication chain validates, the client then performs DANE
authentication of the server according to the DANE TLS protocol
[RFC6698][RFC7671].
Clients MAY cache the server's validated TLSA RRset to amortize the
cost of receiving and validating the chain over multiple connections.
The period of such caching MUST NOT exceed the TTL associated with
those records. A client that possesses a validated and unexpired
TLSA RRset or the full chain in its cache does not need to send the
"dnssec_chain" extension for subsequent connections to the same TLS
server. It can use the cached information to perform DANE
authentication.
Dukhovni, et al. Expires 30 October 2021 [Page 11]
Internet-Draft tls-dnssec-chain April 2021
Note that when a client and server perform TLS session resumption the
server sends no "dnssec_chain". This is particularly clear with TLS
1.3, where the certificate message to which the chain might be
attached is also not sent on resumption.
7. Extension Pinning
TLS applications can be designed to unconditionally mandate this
extension. Such TLS clients requesting this extension would abort a
connection to a TLS server that does not respond with a validatable
extension reply.
However, in a mixed-use deployment of WebPKI and DANE, there is the
possibility that the security of a TLS client is downgraded from DANE
to WebPKI. This can happen when a TLS client connection is
intercepted and redirected to a rogue TLS server presenting a TLS
certificate that is considered valid from a WebPKI point of view, but
one that does not match the legitimate server's TLSA records. By
omitting this extension, such a rogue TLS server could downgrade the
TLS client to validate the mis-issued certificate using only the
WebPKI and not via DANE, provided the TLS client is also not able to
fetch the TLSA records directly from DNS.
The ExtSupportLifetime element of the extension provides a counter-
measure against such downgrade attacks. It's value represents the
number of hours that the TLS server (or cluster of servers serving
the same Server Name) commit to serving this extension in the future.
This is referred to as the "pinning time" or "extension pin" of the
extension. A non-zero extension pin value received MUST ONLY be used
if the extension also contains a valid TLSA authentication chain that
matches the server's certificate chain (the server passes DANE
authentication based on the enclosed TLSA RRset).
Any existing extension pin for the server instance (name and port)
MUST be cleared on receipt of a valid denial of existence for the
associated TLSA RRset. The same also applies if the client obtained
the denial of existence proof via another method, such as through
direct DNS queries. Based on the TLS client's local policy, it MAY
then terminate the connection or MAY continue using WebPKI based
server authentication.
Extension pins MUST also be cleared upon the completion of a DANE
authenticated handshake with a server that returns a "dnssec_chain"
extension with a zero ExtSupportLifetime.
Upon completion of a full validated handshake with a server that
returns a "dnssec_chain" extension with a non-zero ExtSupport
lifetime, the client MUST update any existing pin lifetime for the
Dukhovni, et al. Expires 30 October 2021 [Page 12]
Internet-Draft tls-dnssec-chain April 2021
service (name and port) to a value that is no longer than that
indicated by the server. The client MAY, subject to local policy,
create a previously non-existent pin, again for a lifetime that is
not longer than that indicated by the server.
The extension support lifetime is not constrained by any DNS TTLs or
RRSIG expirations in the returned chain. The extension support
lifetime is the time for which the TLS server is committing itself to
serve the extension; it is not a validity time for the returned chain
data. During this period the DNSSEC chain may be updated.
Therefore, the ExtSupportLifetime value is not constrained by any DNS
TTLs or RRSIG expirations in the returned chain.
Clients MAY implement support for a subset of DANE certificate
usages. For example, clients may support only DANE-EE(3) and DANE-
TA(2) [RFC7218], only PKIX-EE(1) and PKIX-TA(0) or all four. Clients
that implement DANE-EE(3) and DANE-TA(2) MUST implement the relevant
updates in [RFC7671].
For a non-zero saved value of the ExtSupportLifetime element of the
extension, TLS clients MUST mandate ("pin") the use of this extension
by the corresponding TLS servers for the time period specified by the
pinning value. If during this time, the TLS client does not have a
valid TLSA record and connects to a TLS server using this extension
for the associated name and port, and it does not obtain a valid
authentication chain in this extension, it MUST either abort the
connection or delay communication with the server via the TLS session
until it is able to obtain valid TLSA records (or non-existence
proof) out of band, such as via direct DNS lookups. If attempts to
obtain the TLSA RRset out of band fail, the client MUST abort the TLS
session.
Note that requiring the extension is NOT the same as requiring the
use of DANE TLSA records or even DNSSEC. A DNS zone operator may at
any time delete the TLSA records, or even remove the DS records to
disable the secure delegation of the server's DNS zone. The TLS
server will, when it updates its cached TLSA authentication chain,
replace the chain with the corresponding denial of existence chain.
The server's only obligation is continued support for this extension.
8. Trust Anchor Maintenance
The trust anchor may change periodically, e.g. when the operator of
the trust anchor zone performs a DNSSEC key rollover. TLS clients
using this specification MUST implement a mechanism to keep their
trust anchors up to date. They could use the method defined in
[RFC5011] to perform trust anchor updates inband in TLS, by tracking
the introduction of new keys seen in the trust anchor DNSKEY RRset.
Dukhovni, et al. Expires 30 October 2021 [Page 13]
Internet-Draft tls-dnssec-chain April 2021
However, alternative mechanisms external to TLS may also be utilized.
Some operating systems may have a system-wide service to maintain and
keep the root trust anchor up to date. In such cases, the TLS client
application could simply reference that as its trust anchor,
periodically checking whether it has changed. Some applications may
prefer to implement trust anchor updates as part of their automated
software updates.
9. Virtual Hosting
Delivery of application services is often provided by a third party
on behalf of the domain owner (hosting customer). Since the domain
owner may want to be able to move the service between providers, non-
zero support lifetimes for this extension should only be enabled by
mutual agreement between the provider and domain owner.
When CNAME records are employed to redirect network connections to
the provider's network, as mentioned in Section 3 the server uses the
client's SNI hostname as the TLSA base domain without CNAME
expansion. When the certificate chain for the service is managed by
the provider, it is impractical to coordinate certificate changes by
the provider with updates in the hosting customer's DNS. Therefore,
the TLSA RRset for the hosted domain is best configured as a CNAME
from the customer's domain to a TLSA RRset that is managed by the
provider as part of delivering the hosted service. For example:
; Customer DNS
www.example.com. IN CNAME node1.provider.example.
_443._tcp.www.example.com. IN CNAME _dane443.node1.provider.example.
; Provider DNS
node1.provider.example. IN A 192.0.2.1
_dane443.node1.provider.example. IN TLSA 1 1 1 ...
Clients that obtain TLSA records directly from DNS, bypassing this
extension, may however perform CNAME-expansion as in Section 7 of
[RFC7671], and if TLSA records are associated with the fully-expanded
name, may use that name as the TLSA base domain and SNI name for the
TLS handshake.
To avoid confusion, it is RECOMMENDED that server operators not
publish TLSA RRs (_port._tcp. + base domain) based on the expanded
CNAMEs used to locate their network addresses. Instead, the server
operator SHOULD publish TLSA RRs at an alternative DNS node (as in
the example above), to which the hosting customer will publish a
CNAME alias. This results in all clients (whether they obtain TLSA
records from DNS directly, or employ this extension) seeing the same
TLSA records and sending the same SNI name.
Dukhovni, et al. Expires 30 October 2021 [Page 14]
Internet-Draft tls-dnssec-chain April 2021
10. Operational Considerations
When DANE is being introduced incrementally into an existing PKIX
environment, there may be scenarios in which DANE authentication for
a server fails but PKIX succeeds, or vice versa. What happens here
depends on TLS client policy. If DANE authentication fails, the
client may decide to fall back to traditional PKIX authentication.
In order to do so efficiently within the same TLS handshake, the TLS
server needs to have provided the full X.509 certificate chain. When
TLS servers only support DANE-EE or DANE-TA modes, they have the
option to send a much smaller certificate chain: just the EE
certificate for the former, and a short certificate chain from the
DANE trust anchor to the EE certificate for the latter. If the TLS
server supports both DANE and traditional PKIX, and wants to allow
efficient PKIX fallback within the same handshake, they should always
provide the full X.509 certificate chain.
When a TLS server operator wishes to no longer deploy this extension,
it must properly decommission its use. If a non-zero pin lifetime is
presently advertised, it must first be changed to 0. The extension
can be disabled once all previously advertised pin lifetimes have
expired. Removal of TLSA records or even DNSSEC signing of the zone
can be done at any time, but the server MUST still be able to return
the associated denial of existence proofs to any clients that have
unexpired pins.
TLS clients MAY reduce the received extension pin value to a maximum
set by local policy. This can mitigate a theoretical yet unlikely
attack where a compromised TLS server is modified to advertise a pin
value set to the maximum of 7 years. Care should be taken not to set
a local maximum that is too short as that would reduce the downgrade
attack protection that the extension pin offers.
If the hosting provider intends to use end-entity TLSA records
(certificate usage PKIX-EE(1) or DANE-EE(3)) then the simplest
approach is to use the same key-pair for all the certificates at a
given hosting node, and publish "1 1 1" or "3 1 1" RRs matching the
common public key. Since key rollover cannot be simultaneous across
multiple certificate updates, there will be times when multiple "1 1
1" (or "3 1 1") records will be required to match all the extant
certificates. Multiple TLSA records are in any case needed a few
TTLs before certificate updates as explained in Section 8 of
[RFC7671].
If the hosting provider intends to use trust-anchor TLSA records
(certificate usage PKIX-TA(0) or DANE-TA(2)) then the same TLSA
record can match all end-entity certificates issues by the
certification authority in question, and continues to work across
Dukhovni, et al. Expires 30 October 2021 [Page 15]
Internet-Draft tls-dnssec-chain April 2021
end-entity certificate updates, so long as the issuer certificate or
public keys remains unchanged. This can be easier to implement, at
the cost of greater reliance on the security of the selected
certification authority.
The provider can of course publish separate TLSA records for each
customer, which increases the number of such RRsets that need to be
managed, but makes each one independent of the rest.
11. Security Considerations
The security considerations of the normatively referenced RFCs all
pertain to this extension. Since the server is delivering a chain of
DNS records and signatures to the client, it MUST rebuild the chain
in accordance with TTL and signature expiration of the chain
components as described in Section 4. TLS clients need roughly
accurate time in order to properly authenticate these signatures.
This could be achieved by running a time synchronization protocol
like NTP [RFC5905] or SNTP [RFC5905], which are already widely used
today. TLS clients MUST support a mechanism to track and roll over
the trust anchor key, or be able to avail themselves of a service
that does this, as described in Section 8. Security considerations
related to mandating the use of this extension are described in
Section 7.
12. IANA Considerations
This document defines one new entry in the TLS ExtensionType Values
registry:
+-------+----------------+---------+-------------+-----------------+
| Value | Extension Name | TLS 1.3 | Recommended | Reference |
+-------+----------------+---------+-------------+-----------------+
| TBD | dnssec_chain | CH | No | [this document] |
+-------+----------------+---------+-------------+-----------------+
Table 1
13. Acknowledgments
Many thanks to Adam Langley for laying the groundwork for this
extension in [I-D.agl-dane-serializechain]. The original idea is his
but our acknowledgment in no way implies his endorsement. This
document also benefited from discussions with and review from the
following people: Daniel Kahn Gillmor, Jeff Hodges, Allison Mankin,
Patrick McManus, Rick van Rein, Ilari Liusvaara, Eric Rescorla, Gowri
Visweswaran, Duane Wessels, Nico Williams, and Richard Barnes.
Dukhovni, et al. Expires 30 October 2021 [Page 16]
Internet-Draft tls-dnssec-chain April 2021
14. Normative References
[I-D.ietf-dnsop-svcb-https]
Schwartz, B., Bishop, M., and E. Nygren, "Service binding
and parameter specification via the DNS (DNS SVCB and
HTTPS RRs)", Work in Progress, Internet-Draft, draft-ietf-
dnsop-svcb-https-05, 21 April 2021,
<https://tools.ietf.org/html/draft-ietf-dnsop-svcb-https-
05>.
[RFC1035] Mockapetris, P., "Domain names - implementation and
specification", STD 13, RFC 1035, DOI 10.17487/RFC1035,
November 1987, <https://www.rfc-editor.org/info/rfc1035>.
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119,
DOI 10.17487/RFC2119, March 1997,
<https://www.rfc-editor.org/info/rfc2119>.
[RFC4033] Arends, R., Austein, R., Larson, M., Massey, D., and S.
Rose, "DNS Security Introduction and Requirements",
RFC 4033, DOI 10.17487/RFC4033, March 2005,
<https://www.rfc-editor.org/info/rfc4033>.
[RFC4034] Arends, R., Austein, R., Larson, M., Massey, D., and S.
Rose, "Resource Records for the DNS Security Extensions",
RFC 4034, DOI 10.17487/RFC4034, March 2005,
<https://www.rfc-editor.org/info/rfc4034>.
[RFC4035] Arends, R., Austein, R., Larson, M., Massey, D., and S.
Rose, "Protocol Modifications for the DNS Security
Extensions", RFC 4035, DOI 10.17487/RFC4035, March 2005,
<https://www.rfc-editor.org/info/rfc4035>.
[RFC5155] Laurie, B., Sisson, G., Arends, R., and D. Blacka, "DNS
Security (DNSSEC) Hashed Authenticated Denial of
Existence", RFC 5155, DOI 10.17487/RFC5155, March 2008,
<https://www.rfc-editor.org/info/rfc5155>.
[RFC5246] Dierks, T. and E. Rescorla, "The Transport Layer Security
(TLS) Protocol Version 1.2", RFC 5246,
DOI 10.17487/RFC5246, August 2008,
<https://www.rfc-editor.org/info/rfc5246>.
[RFC6066] Eastlake 3rd, D., "Transport Layer Security (TLS)
Extensions: Extension Definitions", RFC 6066,
DOI 10.17487/RFC6066, January 2011,
<https://www.rfc-editor.org/info/rfc6066>.
Dukhovni, et al. Expires 30 October 2021 [Page 17]
Internet-Draft tls-dnssec-chain April 2021
[RFC6698] Hoffman, P. and J. Schlyter, "The DNS-Based Authentication
of Named Entities (DANE) Transport Layer Security (TLS)
Protocol: TLSA", RFC 6698, DOI 10.17487/RFC6698, August
2012, <https://www.rfc-editor.org/info/rfc6698>.
[RFC7218] Gudmundsson, O., "Adding Acronyms to Simplify
Conversations about DNS-Based Authentication of Named
Entities (DANE)", RFC 7218, DOI 10.17487/RFC7218, April
2014, <https://www.rfc-editor.org/info/rfc7218>.
[RFC7671] Dukhovni, V. and W. Hardaker, "The DNS-Based
Authentication of Named Entities (DANE) Protocol: Updates
and Operational Guidance", RFC 7671, DOI 10.17487/RFC7671,
October 2015, <https://www.rfc-editor.org/info/rfc7671>.
[RFC7858] Hu, Z., Zhu, L., Heidemann, J., Mankin, A., Wessels, D.,
and P. Hoffman, "Specification for DNS over Transport
Layer Security (TLS)", RFC 7858, DOI 10.17487/RFC7858, May
2016, <https://www.rfc-editor.org/info/rfc7858>.
[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC
2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174,
May 2017, <https://www.rfc-editor.org/info/rfc8174>.
[RFC8310] Dickinson, S., Gillmor, D., and T. Reddy, "Usage Profiles
for DNS over TLS and DNS over DTLS", RFC 8310,
DOI 10.17487/RFC8310, March 2018,
<https://www.rfc-editor.org/info/rfc8310>.
[RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol
Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018,
<https://www.rfc-editor.org/info/rfc8446>.
15. Informative References
[HAMPERING]
Gorjon, X. and W. Toorop, "Discovery method for a DNSSEC
validating stub resolver", 14 July 2015,
<http://www.nlnetlabs.nl/downloads/publications/
os3-2015-rp2-xavier-torrent-gorjon.pdf>.
[I-D.agl-dane-serializechain]
Langley, A., "Serializing DNS Records with DNSSEC
Authentication", Work in Progress, Internet-Draft, draft-