draft-ietf-radext-dynamic-discovery-06.txt | draft-ietf-radext-dynamic-discovery-07.txt | |||
---|---|---|---|---|
RADIUS Extensions Working Group S. Winter | RADIUS Extensions Working Group S. Winter | |||
Internet-Draft RESTENA | Internet-Draft RESTENA | |||
Intended status: Experimental M. McCauley | Intended status: Experimental M. McCauley | |||
Expires: August 29, 2013 OSC | Expires: January 05, 2014 OSC | |||
February 25, 2013 | July 04, 2013 | |||
NAI-based Dynamic Peer Discovery for RADIUS/TLS and RADIUS/DTLS | NAI-based Dynamic Peer Discovery for RADIUS/TLS and RADIUS/DTLS | |||
draft-ietf-radext-dynamic-discovery-06 | draft-ietf-radext-dynamic-discovery-07 | |||
Abstract | Abstract | |||
This document specifies a means to find authoritative RADIUS servers | This document specifies a means to find authoritative RADIUS servers | |||
for a given realm. It is used in conjunction with either RADIUS/TLS | for a given realm. It is used in conjunction with either RADIUS/TLS | |||
and RADIUS/DTLS. | and RADIUS/DTLS. | |||
Status of This Memo | Status of This Memo | |||
This Internet-Draft is submitted in full conformance with the | This Internet-Draft is submitted in full conformance with the | |||
skipping to change at page 1, line 33 | skipping to change at page 1, line 33 | |||
Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
Drafts is at http://datatracker.ietf.org/drafts/current/. | Drafts is at http://datatracker.ietf.org/drafts/current/. | |||
Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
This Internet-Draft will expire on August 29, 2013. | This Internet-Draft will expire on January 05, 2014. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2013 IETF Trust and the persons identified as the | Copyright (c) 2013 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
(http://trustee.ietf.org/license-info) in effect on the date of | (http://trustee.ietf.org/license-info) in effect on the date of | |||
publication of this document. Please review these documents | publication of this document. Please review these documents | |||
skipping to change at page 2, line 10 | skipping to change at page 2, line 10 | |||
to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
described in the Simplified BSD License. | described in the Simplified BSD License. | |||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | |||
1.1. Requirements Language . . . . . . . . . . . . . . . . . . 3 | 1.1. Requirements Language . . . . . . . . . . . . . . . . . . 3 | |||
1.2. Terminology . . . . . . . . . . . . . . . . . . . . . . . 3 | 1.2. Terminology . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
2. DNS-based NAPTR/SRV Peer Discovery . . . . . . . . . . . . . 3 | 2. Definitions . . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
2.1. Applicability . . . . . . . . . . . . . . . . . . . . . . 3 | 2.1. DNS RR definition . . . . . . . . . . . . . . . . . . . . 3 | |||
2.2. DNS RR definition . . . . . . . . . . . . . . . . . . . . 3 | 2.1.1. S-NAPTR . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
2.3. Realm to RADIUS server resolution algorithm . . . . . . . 6 | 2.1.2. SRV . . . . . . . . . . . . . . . . . . . . . . . . . 8 | |||
2.3.1. Input . . . . . . . . . . . . . . . . . . . . . . . . 6 | 2.1.3. Remarks . . . . . . . . . . . . . . . . . . . . . . . 8 | |||
2.3.2. Output . . . . . . . . . . . . . . . . . . . . . . . 7 | 2.2. Definition of the X.509 certificate property | |||
2.3.3. Algorithm . . . . . . . . . . . . . . . . . . . . . . 7 | SubjectAltName:otherName:NAIRealm . . . . . . . . . . . . 10 | |||
2.3.4. Validity of results . . . . . . . . . . . . . . . . . 8 | 3. DNS-based NAPTR/SRV Peer Discovery . . . . . . . . . . . . . 11 | |||
2.3.5. Delay considerations . . . . . . . . . . . . . . . . 9 | 3.1. Applicability . . . . . . . . . . . . . . . . . . . . . . 11 | |||
2.3.6. Example . . . . . . . . . . . . . . . . . . . . . . . 9 | 3.2. Configuration Variables . . . . . . . . . . . . . . . . . 11 | |||
3. Security Considerations . . . . . . . . . . . . . . . . . . . 11 | 3.3. Terms . . . . . . . . . . . . . . . . . . . . . . . . . . 11 | |||
4. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 11 | 3.4. Realm to RADIUS server resolution algorithm . . . . . . . 12 | |||
5. Normative References . . . . . . . . . . . . . . . . . . . . 12 | 3.4.1. Input . . . . . . . . . . . . . . . . . . . . . . . . 12 | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 13 | 3.4.2. Output . . . . . . . . . . . . . . . . . . . . . . . 13 | |||
3.4.3. Algorithm . . . . . . . . . . . . . . . . . . . . . . 13 | ||||
3.4.4. Validity of results . . . . . . . . . . . . . . . . . 15 | ||||
3.4.5. Delay considerations . . . . . . . . . . . . . . . . 16 | ||||
3.4.6. Example . . . . . . . . . . . . . . . . . . . . . . . 16 | ||||
4. Security Considerations . . . . . . . . . . . . . . . . . . . 19 | ||||
5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 19 | ||||
6. Normative References . . . . . . . . . . . . . . . . . . . . 20 | ||||
Appendix A. Appendix A: ASN.1 Syntax of NAIRealm . . . . . . . . 21 | ||||
1. Introduction | 1. Introduction | |||
RADIUS in all its current transport variants (RADIUS/UDP, RADIUS/TLS, | RADIUS in all its current transport variants (RADIUS/UDP, RADIUS/TLS, | |||
RADIUS/DTLS) requires manual configuration of all peers (clients, | RADIUS/DTLS) requires manual configuration of all peers (clients, | |||
servers). | servers). | |||
Where RADIUS forwarding servers are in use, the number of realms to | Where RADIUS forwarding servers are in use, the number of realms to | |||
be forwarded and the corresponding number of servers to configure may | be forwarded and the corresponding number of servers to configure may | |||
be significant. Where new realms with new servers are added or | be significant. Where new realms with new servers are added or | |||
skipping to change at page 2, line 49 | skipping to change at page 3, line 10 | |||
independently working branches, each with their own forwarding | independently working branches, each with their own forwarding | |||
servers, and who add or change their realm lists at their own | servers, and who add or change their realm lists at their own | |||
discretion, there is additional complexity in synchronising the | discretion, there is additional complexity in synchronising the | |||
changed data across all branches. | changed data across all branches. | |||
These situations can benefit significantly from a distributed | These situations can benefit significantly from a distributed | |||
mechanism for storing realm and server reachability information. | mechanism for storing realm and server reachability information. | |||
This document describes one such mechanism: storage of realm-to- | This document describes one such mechanism: storage of realm-to- | |||
server mappings in DNS. | server mappings in DNS. | |||
This document does not specify how to verify that server information | This document also specifies various approaches for verifying that | |||
which was retrieved from DNS was from an authorised party; e.g. an | server information which was retrieved from DNS was from an | |||
organisation which is not at all part of a given roaming consortium | authorised party; e.g. an organisation which is not at all part of a | |||
may alter its own DNS records to yield a result for its own realm. | given roaming consortium may alter its own DNS records to yield a | |||
result for its own realm. | ||||
RADIUS/TLS and RADIUS/DTLS have their own ways how to verify that a | ||||
contacted peer is authorised (e.g. by presenting PKIX certificates | ||||
from a agreed-upon CA). | ||||
1.1. Requirements Language | 1.1. Requirements Language | |||
In this document, several words are used to signify the requirements | In this document, several words are used to signify the requirements | |||
of the specification. The key words "MUST", "MUST NOT", "REQUIRED", | of the specification. The key words "MUST", "MUST NOT", "REQUIRED", | |||
"SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", | "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", | |||
and "OPTIONAL" in this document are to be interpreted as described in | and "OPTIONAL" in this document are to be interpreted as described in | |||
RFC 2119. [RFC2119] | RFC 2119. [RFC2119] | |||
1.2. Terminology | 1.2. Terminology | |||
RADIUS/TLS Client: a RADIUS/TLS [RFC6614] instance which initiates a | RADIUS/TLS Client: a RADIUS/TLS [RFC6614] instance which initiates a | |||
new connection. | new connection. | |||
RADIUS/TLS Server: a RADIUS/TLS [RFC6614] instance which listens on a | RADIUS/TLS Server: a RADIUS/TLS [RFC6614] instance which listens on a | |||
RADIUS/TLS port and accepts new connections | RADIUS/TLS port and accepts new connections | |||
RADIUS/TLS node: a RADIUS/TLS client or server | RADIUS/TLS node: a RADIUS/TLS client or server | |||
2. DNS-based NAPTR/SRV Peer Discovery | 2. Definitions | |||
2.1. Applicability | ||||
Dynamic server discovery as defined in this document is only | ||||
applicable for AAA transactions where a RADIUS entity which acts as a | ||||
forwarding server for one or more realms receives a request with a | ||||
realm for which it is not authoritative, and which no explicit next | ||||
hop is configured. Furthermore, it is only applicable for new user | ||||
sessions, i.e. for the initial Access-Request. Subsequent messages | ||||
concerning this session, for example Access-Challenges and Access- | ||||
Accepts use the previously-established communication channel between | ||||
client and server. | ||||
2.2. DNS RR definition | 2.1. DNS RR definition | |||
DNS definitions of RADIUS/TLS servers can be either S-NAPTR records | DNS definitions of RADIUS/TLS servers can be either S-NAPTR records | |||
(see [RFC3958]) or SRV records. When both are defined, the | (see [RFC3958]) or SRV records. When both are defined, the | |||
resolution algorithm prefers S-NAPTR results (see Section 2.3 below). | resolution algorithm prefers S-NAPTR results (see Section 3.4 below). | |||
2.1.1. S-NAPTR | ||||
2.1.1.1. Registration of Application Service and Protocol Tags | ||||
This specification defines three S-NAPTR service tags: | This specification defines three S-NAPTR service tags: | |||
+-----------------+-----------------------------------------+ | +-----------------+-----------------------------------------+ | |||
| Service Tag | Use | | | Service Tag | Use | | |||
+-----------------+-----------------------------------------+ | +-----------------+-----------------------------------------+ | |||
| aaa+auth | RADIUS Authentication, i.e. traffic as | | | aaa+auth | RADIUS Authentication, i.e. traffic as | | |||
| | defined in [RFC2865] | | | | defined in [RFC2865] | | |||
| - - - - - - - - | - - - - - - - - - - - - - - - - - - - - | | | - - - - - - - - | - - - - - - - - - - - - - - - - - - - - | | |||
| aaa+acct | RADIUS Accounting, i.e. traffic as | | | aaa+acct | RADIUS Accounting, i.e. traffic as | | |||
skipping to change at page 4, line 35 | skipping to change at page 4, line 34 | |||
| | in [I-D.ietf-radext-dtls] | | | | in [I-D.ietf-radext-dtls] | | |||
+-----------------+-----------------------------------------+ | +-----------------+-----------------------------------------+ | |||
Figure 2: List of Protocol Tags | Figure 2: List of Protocol Tags | |||
Note well: | Note well: | |||
The S-NAPTR service and protocols are unrelated to the IANA | The S-NAPTR service and protocols are unrelated to the IANA | |||
Service Name and Transport Protocol Number registry | Service Name and Transport Protocol Number registry | |||
The delimiter '.' in the protocol tags is only a separator for | The delimiter '.' in the protocol tags is only a separator for | |||
human reading convenience - not for structure or namespacing; it | human reading convenience - not for structure or namespacing; it | |||
MUST NOT be parsed in any way by the querying application or | MUST NOT be parsed in any way by the querying application or | |||
resolver. | resolver. | |||
The use of the separator '.' is common also in other protocols' | The use of the separator '.' is common also in other protocols' | |||
protocol tags. This is coincidence and does not imply a shared | protocol tags. This is coincidence and does not imply a shared | |||
semantics with such protocols. | semantics with such protocols. | |||
This specification defines two SRV prefixes (i.e. two values for the | 2.1.1.2. Definition of Conditions for Retry/Failure | |||
"_service._proto" part of an SRV RR): | ||||
RADIUS is a time-critical protocol; RADIUS clients which do not | ||||
receive an answer after a configurable, but short, amount of time, | ||||
will consider the request failed. Due to this, there is little | ||||
leeway for extensive retries. | ||||
As a general rule, only error conditions which generate an immediate | ||||
response from the other end are eligible for a retry of a discovered | ||||
target. Any error condition involving time-outs, or the absence of a | ||||
reply for more than one second during the connection setup phase is | ||||
to be considered a failure; the next target in the set of discovered | ||||
NAPTR targets is to be tried. | ||||
Note that [RFC3958] already defines that a failure to identify the | ||||
server as being authoritative for the realm is always considered a | ||||
failure; so even if a discovered target returns a wrong credential | ||||
instantly, it is not eligible for retry. | ||||
Furthermore, the contacted RADIUS/TLS server verifies during | ||||
connection setup whether or not it finds the connecting RADIUS/TLS | ||||
client authorized or not. If the connecting RADIUS/TLS client is not | ||||
found acceptable, the server will close the TLS connection | ||||
immediately with an appropriate alert. Such TLS handshake failures | ||||
are permanently fatal and not eligible for retry. | ||||
2.1.1.3. Server Identification and Handshake | ||||
After the algorithm in this document has been executed, a RADIUS/TLS | ||||
session as per [RFC6614] is established. Since the algorithm does | ||||
not allow to derive confidential keying material between the RADIUS/ | ||||
TLS client (i.e. the server which executes the discovery algorithm) | ||||
and the RADIUS/TLS server which was discovered, TLS-PSK ciphersuites | ||||
can not be used for the subsequent TLS handshake in the RADIUS/TLS | ||||
conversation. Only TLS ciphersuites using X.509 certificates can be | ||||
used with this algorithm. | ||||
There are numerous ways to define which certificates are acceptable | ||||
for use in this context. This document defines one mandatory-to- | ||||
implement mechanism which allows to verify whether the contacted host | ||||
is authoritative for a NAI realm or not. It also gives one example | ||||
of another mechanism which is currently in wide-spread deployment, | ||||
and one possible approach based on DNSSEC which is yet unimplemented. | ||||
2.1.1.3.1. Mandatory-to-implement mechanism: Trust Roots + NAIRealm | ||||
Verification of authority to provide AAA services over RADIUS/TLS is | ||||
a two-step process. | ||||
Step 1 is the verification of certificate wellformedness and validity | ||||
as per [RFC5280] and whether it was issued from a root certificate | ||||
which is deemed trustworthy by the RADIUS/TLS client. | ||||
Step 2 is: compare the value of algorithm's variable "R" after the | ||||
execution of step 3 of the discovery algorithm in Section 3.4.3 below | ||||
(i.e. after a consortium name mangling, but before conversion to a | ||||
form usable by the name resolution library) to all values of the | ||||
contacted RADIUS/TLS server's X.509 certificate property | ||||
"subjectAlternativeName:otherName:NAIRealm" as defined in | ||||
Section 2.2. The comparison is a byte-by-byte comparison, except for | ||||
dot-separated parts of the value whose content is a single "*" | ||||
character; such labels match all strings in the same part of the NAI | ||||
realm. If at least one of the sAN:otherName:NAIRealm values matches | ||||
the NAI realm, the server is considered authorized; if none matches, | ||||
the server is considered unauthorized. | ||||
Examples: | ||||
+-----------------+---------------------------------------------+ | ||||
| NAI realm | sAN:otherName:NAIRealm | MATCH? | | ||||
+-----------------+---------------------------------------------+ | ||||
| foo.example | foo.example | YES | | ||||
| foo.example | *.example | YES | | ||||
| bar.foo.example | *.example | NO | | ||||
| bar.foo.example | bar.*.example | YES | | ||||
| bar.foo.example | *.*.example | YES | | ||||
| sub.bar.foo.example | *.*.example | NO | | ||||
| sub.bar.foo.example | sub.bar.foo.example | YES | | ||||
+-----------------+---------------------------------------------+ | ||||
Figure 3: Examples for NAI realm vs. certificate matching | ||||
2.1.1.3.2. Other mechanism: Trust Roots + policyOID | ||||
Verification of authority to provide AAA services over RADIUS/TLS is | ||||
a two-step process. | ||||
Step 1 is the verification of certificate wellformedness and validity | ||||
as per [RFC5280] and whether it was issued from a root certificate | ||||
which is deemed trustworthy by the RADIUS/TLS client. | ||||
Step 2 is: compare the values of the contacted RADIUS/TLS server's | ||||
X.509 certificate's extensions of type "Policy OID" to a list of | ||||
configured acceptable Policy OIDs for the roaming consortium. If one | ||||
of the configured OIDs is found in the certificate's Policy OID | ||||
extensions, then the server is considered authorized; if there is no | ||||
match, the server is considered unauthorized. | ||||
This mechanism is inferior to the mandatory-to-implement mechanism in | ||||
the previous section because all authorized servers are validated by | ||||
the same OID value; the mechanism is not fine-grained enough to | ||||
express authority for one specific realm inside the consortium. If | ||||
the consortium contains members which are hostile against other | ||||
members, this weakness can be exploited by one RADIUS/TLS server | ||||
impersonating another if DNS responses can be spoofed by the hostile | ||||
member. | ||||
It should be noted that these shortcomings can be mitigated by using | ||||
the RADIUS infrastructure only with authentication payloads which | ||||
provide mutual authentication; that way, the final EAP server that | ||||
was reached can be validated by the EAP peer, and any improper | ||||
redirections to a different server will be detected. | ||||
2.1.1.3.3. Other mechanism: DNSSEC / DANE | ||||
Where DNSSEC is used, the results of the algorithm can be trusted; | ||||
i.e. the entity which executes the algorithm can be certain that the | ||||
realm that triggered the discovery is actually served by the server | ||||
that was discovered via DNS. However, this does not guarantee that | ||||
the server is also authorized (i.e. a recognised member of the | ||||
roaming consortium). | ||||
The authorization can be sketched using DNSSEC+DANE as follows: if | ||||
DANE/TLSA records of all authorized servers are put into a DNSSEC | ||||
zone with a common, consortium-specific branch of the DNS tree, then | ||||
the entity executing the algorithm can retrieve TLSA RRs for the | ||||
label "realm.commonroot" and verify that the presented server | ||||
certificate during the RADIUS/TLS handshake matches the information | ||||
in the TLSA record. | ||||
Example: | ||||
Realm = "example.com" | ||||
Common Branch = "idp.roaming-consortium.example. | ||||
label for TLSA query = "example.com.idp.roaming- | ||||
consortium.example. | ||||
result of discovery algorithm for realm "example.com" = | ||||
192.0.2.1:2083 | ||||
( TLS certificate of 192.0.2.1:2083 matches TLSA RR ? "PASS" : | ||||
"FAIL" ) | ||||
2.1.1.3.4. Remark | ||||
Note that RADIUS/TLS connections always mutually authenticate the | ||||
RADIUS server and the RADIUS client. This specification provides an | ||||
algorithm for a RADIUS client to contact and verify authorization of | ||||
a RADIUS server only. During connection setup, the RADIUS server | ||||
also needs to verify whether it considers the connecting RADIUS | ||||
client authorized; this is outside the scope of this specification. | ||||
2.1.2. SRV | ||||
This specification defines two SRV prefixes (i.e. two values for the | ||||
"_service._proto" part of an SRV RR as per [RFC2782]): | ||||
+-----------------+-----------------------------------------+ | +-----------------+-----------------------------------------+ | |||
| SRV Label | Use | | | SRV Label | Use | | |||
+-----------------+-----------------------------------------+ | +-----------------+-----------------------------------------+ | |||
| _radiustls._tcp | RADIUS transported over TLS as defined | | | _radiustls._tcp | RADIUS transported over TLS as defined | | |||
| | in [RFC6614] | | | | in [RFC6614] | | |||
| - - - - - - - - | - - - - - - - - - - - - - - - - - - - - | | | - - - - - - - - | - - - - - - - - - - - - - - - - - - - - | | |||
| _radiustls._udp | RADIUS transported over DTLS as defined | | | _radiustls._udp | RADIUS transported over DTLS as defined | | |||
| | in [I-D.ietf-radext-dtls] | | | | in [I-D.ietf-radext-dtls] | | |||
+-----------------+-----------------------------------------+ | +-----------------+-----------------------------------------+ | |||
Figure 3: List of SRV Labels | Figure 4: List of SRV Labels | |||
Just like NAPTR records, the lookup and subsequent follow-up of SRV | ||||
records may yield more than one server to contact in a prioritised | ||||
list. [RFC2782] does not specify rules regarding "Definition of | ||||
Conditions for Retry/Failure", nor "Server Identification and | ||||
Handshake". This specification defines that the rules for these two | ||||
topics as defined in Section 2.1.1.2 and Section 2.1.1.3 SHALL be | ||||
used both for targets retrieved via an initial NAPTR RR as well as | ||||
for targets retrieved via an initial SRV RR (i.e. in the absence of | ||||
NAPTR RRs). | ||||
2.1.3. Remarks | ||||
It is expected that in most cases, the SRV and/or NAPTR label used | It is expected that in most cases, the SRV and/or NAPTR label used | |||
for the records is the DNS A-label representation of the literal | for the records is the DNS A-label representation of the literal | |||
realm name for which the server is the authoritative RADIUS server | realm name for which the server is the authoritative RADIUS server | |||
(i.e. the realm name after conversion according to section 5 of | (i.e. the realm name after conversion according to section 5 of | |||
[RFC5891]). | [RFC5891]). | |||
However, arbitrary other SRV and/or NAPTR labels may be used if, for | However, arbitrary other labels or service tags may be used if, for | |||
example, a roaming consortium uses realm names which are not | example, a roaming consortium uses realm names which are not | |||
associated to DNS names or special-purpose consortia where a globally | associated to DNS names or special-purpose consortia where a globally | |||
valid discovery is not a use case. Such other labels require a | valid discovery is not a use case. Such other labels require a | |||
consortium-wide agreement about the transformation from realm name to | consortium-wide agreement about the transformation from realm name to | |||
lookup label. | lookup label, and/or which service tag to use. | |||
Examples: | Examples: | |||
a. A general-purpose RADIUS server for realm example.com might have | a. A general-purpose RADIUS server for realm example.com might have | |||
DNS entries as follows: | DNS entries as follows: | |||
example.com. IN NAPTR 50 50 "s" "aaa+auth:radius.tls" "" | example.com. IN NAPTR 50 50 "s" "aaa+auth:radius.tls" "" | |||
_radiustls._tcp.foobar.example.com. | _radiustls._tcp.foobar.example.com. | |||
_radiustls._tcp.foobar.example.com. IN SRV 0 10 2083 | _radiustls._tcp.foobar.example.com. IN SRV 0 10 2083 | |||
radsec.example.com. | radsec.example.com. | |||
b. The consortium "foo" provides roaming services for its members | b. The consortium "foo" provides roaming services for its members | |||
only. The realms used are of the form enterprise-name.example. | only. The realms used are of the form enterprise-name.example. | |||
The consortium operates a special purpose DNS server for the | The consortium operates a special purpose DNS server for the | |||
(private) TLD "example" which all RADIUS servers use to resolve | (private) TLD "example" which all RADIUS servers use to resolve | |||
realm names. "Bad, Inc." is part of the consortium. On the | realm names. "Bad, Inc." is part of the consortium. On the | |||
consortium's DNS server, realm bad.example might have the | consortium's DNS server, realm bad.example might have the | |||
following DNS entries: | following DNS entries: | |||
bad.example IN NAPTR 50 50 "a" "aaa+auth:radius.dtls" "" | bad.example IN NAPTR 50 50 "a" "aaa+auth:radius.dtls" "" | |||
very.bad.example | very.bad.example | |||
c. The eduroam consortium uses realms based on DNS, but provides its | c. The eduroam consortium uses realms based on DNS, but provides its | |||
services to a closed community only. However, a AAA domain | services to a closed community only. However, a AAA domain | |||
participating in eduroam may also want to expose AAA services to | participating in eduroam may also want to expose AAA services to | |||
other, general-purpose, applications (on the same or other RADIUS | other, general-purpose, applications (on the same or other RADIUS | |||
skipping to change at page 6, line 23 | skipping to change at page 10, line 5 | |||
example.org. IN NAPTR 50 50 "s" "aaa+auth:radius.tls" "" | example.org. IN NAPTR 50 50 "s" "aaa+auth:radius.tls" "" | |||
_radiustls._tcp.aaa.example.org | _radiustls._tcp.aaa.example.org | |||
_radiustls._tcp.eduroam.example.org. IN SRV 0 10 2083 aaa- | _radiustls._tcp.eduroam.example.org. IN SRV 0 10 2083 aaa- | |||
eduroam.example.org. | eduroam.example.org. | |||
_radiustls._tcp.aaa.example.org. IN SRV 0 10 2083 aaa- | _radiustls._tcp.aaa.example.org. IN SRV 0 10 2083 aaa- | |||
default.example.org. | default.example.org. | |||
2.3. Realm to RADIUS server resolution algorithm | 2.2. Definition of the X.509 certificate property | |||
SubjectAltName:otherName:NAIRealm | ||||
This algorithm can be used to discover RADIUS servers (for RADIUS | This specification retrieves IP addresses and port numbers from the | |||
Authentication and RADIUS Accounting) or to discover RADIUS DynAuth | Domain Name System which are subsequently used to authenticate users | |||
servers. | via the RADIUS/TLS protocol. Since the Domain Name System is not | |||
necessarily trustworthy (e.g. if DNSSEC is not deployed for the | ||||
queried domain name), it is important to verify that the server which | ||||
was contacted is authorized to service requests for the user which | ||||
triggered the discovery process. | ||||
2.3.1. Input | The input to the algorithm is a NAI realm as specified in | |||
Section 3.4.1. As a consequence, the X.509 certificate of the server | ||||
which is ultimately contacted for user authentication needs to be | ||||
able to express that it is authorized to handle requests for that | ||||
realm. | ||||
Current subjectAltName fields do not semantically allow to express an | ||||
NAI realm; the field subjectAltName:dNSName is syntactically a good | ||||
match but would inappropriately conflate DNS names and NAI realm | ||||
names. Thus, this specification defines a new subjectAltName field | ||||
to hold either a single NAI realm name or a wildcard name matching a | ||||
set of NAI realms. | ||||
The subjectAltName:otherName:sRVName field certifies that a | ||||
certificate holder is authorized to provide a service; this can be | ||||
compared to the target of DNS label's SRV resource record. If the | ||||
Domain Name System is insecure, it is required that the label of the | ||||
SRV record itself is known-correct. In this specification, that | ||||
label is not known-correct; it is potentially derived from a | ||||
(potentially untrusted) NAPTR resource record of another label. If | ||||
DNS is not secured with DNSSEC, the NAPTR resource record may have | ||||
been altered by an attacker with access to the Domain Name System | ||||
resolution, and thus the label to lookup the SRV record for may | ||||
already be tainted. This makes subjectAltName:otherName:sRVName not | ||||
a trusted comparison item. | ||||
Further to this, this specification's NAPTR entries may be of type | ||||
"A" which do not involve resolution of any SRV records, which again | ||||
makes subjectAltName:otherName:sRVName unsuited for this purpose. | ||||
This section defines the NAIRealm name as a form of otherName from | ||||
the GeneralName structure in SubjectAltName defined in [RFC5280]. | ||||
id-on-nai OBJECT IDENTIFIER ::= { id-on XXX } | ||||
NAIRealm ::= UTF8String (SIZE (1..MAX)) | ||||
The NAIRealm, if present, MUST contain an NAI realm as defined in | ||||
[I-D.ietf-radext-nai]. It MAY substitute labels on all dot-separated | ||||
parts of the NAI with the single character "*" to indicate a wildcard | ||||
match for "all labels in this part". Further features of regular | ||||
expressions, such as a number of characters followed by a * to | ||||
indicate a common prefix inside the part, are not permitted. | ||||
This subjectAltName MAY occur more than once in a certificate. | ||||
Appendix A contains the ASN.1 definition of the above objects. | ||||
3. DNS-based NAPTR/SRV Peer Discovery | ||||
3.1. Applicability | ||||
Dynamic server discovery as defined in this document is only | ||||
applicable for AAA transactions where a RADIUS entity which acts as a | ||||
forwarding server for one or more realms receives a request with a | ||||
realm for which it is not authoritative, and which no explicit next | ||||
hop is configured. It is only applicable for | ||||
a. new user sessions, i.e. for the initial Access-Request. | ||||
Subsequent messages concerning this session, for example Access- | ||||
Challenges and Access-Accepts use the previously-established | ||||
communication channel between client and server. | ||||
b. RADIUS DynAuth server discovery | ||||
3.2. Configuration Variables | ||||
The algorithm contains various variables for timeouts. These | ||||
variables are named here and reasonable default values are provided. | ||||
Implementations wishing to deviate from these defaults should make | ||||
they understand the implications of changes. | ||||
DNS_TIMEOUT: maximum amount of time to wait for the complete set | ||||
of all DNS queries to complete: Default = 3 seconds | ||||
MIN_EFF_TTL: minimum DNS TTL of discovered targets: Default = 60 | ||||
seconds | ||||
BACKOFF_TIME: if no conclusive DNS response was retrieved after | ||||
DNS_TIMEOUT, do not attempt dynamic discovery before BACKOFF_TIME | ||||
has elapsed. Default = 600 seconds | ||||
3.3. Terms | ||||
Positive DNS response: a response which contains the RR that was | ||||
queried for. | ||||
Negative DNS response: a response which does not contain the RR that | ||||
was queried for, but contains an SOA record along with a TTL | ||||
indicating cache duration for this negative result. | ||||
DNS Error: Where the algorithm states "name resolution returns with | ||||
an error", this shall mean that either the DNS request timed out, or | ||||
a DNS response which is neither a positive nor a negative response | ||||
(e.g. SERVFAIL). | ||||
Effective TTL: The validity period for discovered RADIUS/TLS target | ||||
hosts. Calculated as: Effective TTL (set of DNS TTL values) = max { | ||||
MIN_EFF_TTL, min { DNS TTL values } } | ||||
SRV lookup: for the purpose of this specification, SRV lookup | ||||
procedures are defined as per [RFC2782], but excluding that RFCs "A" | ||||
fallback as defined in its section "Usage Rules", final "else" | ||||
clause. | ||||
3.4. Realm to RADIUS server resolution algorithm | ||||
3.4.1. Input | ||||
For RADIUS Authentication and RADIUS Accounting server discovery, | For RADIUS Authentication and RADIUS Accounting server discovery, | |||
input I to the algorithm is the RADIUS User-Name attribute with | input I to the algorithm is the RADIUS User-Name attribute with | |||
content of the form "user@realm"; the literal @ sign being the | content of the form "user@realm"; the literal @ sign being the | |||
separator between a local user identifier within a realm and its | separator between a local user identifier within a realm and its | |||
realm. The use of multiple literal @ signs in a User-Name is | realm. The use of multiple literal @ signs in a User-Name is | |||
strongly discouraged; but if present, the last @ sign is to be | strongly discouraged; but if present, the last @ sign is to be | |||
considered the separator. All previous instances of the @ sign are | considered the separator. All previous instances of the @ sign are | |||
to be considered part of the local user identifier. | to be considered part of the local user identifier. | |||
skipping to change at page 7, line 25 | skipping to change at page 13, line 23 | |||
UTF-8 realms which end with a . ("dot") character. | UTF-8 realms which end with a . ("dot") character. | |||
For the last bullet point, "trailing dot", special precautions should | For the last bullet point, "trailing dot", special precautions should | |||
be taken to avoid problems when resolving servers with the algorithm | be taken to avoid problems when resolving servers with the algorithm | |||
below: they may resolve to a RADIUS server even if the peer RADIUS | below: they may resolve to a RADIUS server even if the peer RADIUS | |||
server only is configured to handle the realm without the trailing | server only is configured to handle the realm without the trailing | |||
dot. If that RADIUS server again uses NAI discovery to determine the | dot. If that RADIUS server again uses NAI discovery to determine the | |||
authoritative server, the server will forward the request to | authoritative server, the server will forward the request to | |||
localhost, resulting in a tight endless loop. | localhost, resulting in a tight endless loop. | |||
2.3.2. Output | 3.4.2. Output | |||
Output O of the algorithm is a set of tuples {hostname; port; order/ | Output O of the algorithm is a two-tuple consisting of: O-1) a set of | |||
preference; TTL} - the set can be empty. | tuples {hostname; port; order/preference; Effective TTL} - the set | |||
can be empty; and O-2) an integer: if the set in the first part of | ||||
the tuple is empty, the integer contains the Effective TTL for | ||||
backoff timeout, if the set is not empty, the integer is set to 0 | ||||
(and not used). | ||||
2.3.3. Algorithm | 3.4.3. Algorithm | |||
The algorithm to determine the RADIUS server to contact is as | The algorithm to determine the RADIUS server to contact is as | |||
follows: | follows: | |||
1. Determine P = (position of last "@" character) in I. | 1. Determine P = (position of last "@" character) in I. | |||
2. generate R = (substring from P+1 to end of I) | 2. generate R = (substring from P+1 to end of I) | |||
3. Optional: modify R according to agreed consortium procedures | 3. modify R according to agreed consortium procedures if applicable | |||
4. Using the host's name resolution library, perform a NAPTR query | 4. convert R to a representation usable by the name resolution | |||
for R (see "Delay considerations" below). The name resolution | library if needed | |||
library may need to convert R to a different respresentation, | ||||
depending on the resolution backend used. If no result, | ||||
continue at step 9. If name resolution returns with error, O = | ||||
{ empty set } and terminate. | ||||
5. Extract NAPTR records with service tag "aaa+auth", "aaa+acct", | 5. Initialize TIMER = 0; start TIMER. If TIMER reaches | |||
DNS_TIMEOUT, continue at step 20. | ||||
6. Using the host's name resolution library, perform a NAPTR query | ||||
for R (see "Delay considerations" below). If the result is a | ||||
negative DNS response, O-2 = Effective TTL ( TTL value of the | ||||
SOA record ) and continue at step 13. If name resolution | ||||
returns with error, O-1 = { empty set }, O-2 = BACKOFF_TIME and | ||||
terminate. | ||||
7. Extract NAPTR records with service tag "aaa+auth", "aaa+acct", | ||||
"aaa+dynauth" as appropriate. Keep note of the remaining TTL of | "aaa+dynauth" as appropriate. Keep note of the remaining TTL of | |||
each of the discovered NAPTR records. | each of the discovered NAPTR records. | |||
6. If no records found, continue at step 9. | 8. If no records found, continue at step 13. | |||
7. Evaluate NAPTR result(s) for desired protocol tag, perform | 9. For the extracted NAPTRs, perform successive resolution as | |||
subsequent lookup steps until lookup yields one or more | defined in [RFC3958], section 2.2.4, with the additional | |||
hostnames. O' = (set of {hostname; port; order/preference; | reservation that all records are to be immediately pursued | |||
min{all TTLs that led to this result} } for all lookup results). | through terminal lookup, i.e. have resulted in hostnames. | |||
Keep note of the remaining TTL of each of the discovered records | Failure to achieve terminal lookup for individual records is | |||
(e.g. SRV and AAAA). | non-fatal. | |||
8. Proceed with step 15. | 10. If the set of hostnames is empty, O-1 = { empty set }, O-2 = | |||
BACKOFF_TIME and terminate. | ||||
9. Generate R' = (prefix R with "_radiustls._tcp." or | 11. O' = (set of {hostname; port; order/preference; Effective TTL ( | |||
"_radiustls._udp") | all DNS TTLs that led to this hostname ) } for all terminal | |||
lookup results). | ||||
10. Using the host's name resolution library, perform SRV lookup | 12. Proceed with step 18. | |||
with R' as label (see "Delay considerations" below). Keep note | ||||
of the TTL of each of the discovered SRV records. | ||||
11. If name resolution returns with error, O = { empty set } and | 13. Generate R' = (prefix R with "_radiustls._tcp." or | |||
terminate. | "_radiustls._udp.") | |||
12. If no result, O = { empty set } and terminate. | 14. Using the host's name resolution library, perform SRV lookup | |||
with R' as label (see "Delay considerations" below). | ||||
13. O' = (set of {hostname; port; order/preference; min{all TTLs | 15. If name resolution returns with error, O-1 = { empty set }, O-2 | |||
that led to this result} } for all hostnames). | = BACKOFF_TIME and terminate. | |||
14. Generate O by resoving hostnames to corresponding A and/or AAAA | 16. If the result is a negative DNS response, O-1 = { empty set }, | |||
addresses: O = (set of {IP address; port; order/preference; | O-2 = min { O-2, Effective TTL ( TTL value of the SOA record ) } | |||
min{all TTLs that led to this result}} for all hostnames ). | and terminate. | |||
15. For each element in O, test if the original request which | 17. O' = (set of {hostname; port; order/preference; Effective TTL ( | |||
all DNS TTLs that led to this result ) } for all hostnames). | ||||
18. Generate O-1 by resolving hostnames in O' into corresponding A | ||||
and/or AAAA addresses: O-1 = (set of {IP address; port; order/ | ||||
preference; Effective TTL ( all DNS TTLs that led to this result | ||||
) } for all hostnames ), O-2 = 0. | ||||
19. For each element in O-1, test if the original request which | ||||
triggered dynamic discovery was received on {IP address; port}. | triggered dynamic discovery was received on {IP address; port}. | |||
If yes, O = { empty set }, log error, Terminate. If no, O is | If yes, O-1 = { empty set }, O-2 = BACKOFF_TIME, log error, | |||
the result of dynamic discovery. Terminate. | Terminate (see next section for a rationale). If no, O is the | |||
result of dynamic discovery. Terminate. | ||||
2.3.4. Validity of results | 20. O-1 = { empty set }, O-2 = BACKOFF_TIME, log error, Terminate. | |||
3.4.4. Validity of results | ||||
The dynamic discovery algorithm is used by servers which do not have | ||||
sufficient configuration information to process an incoming request | ||||
on their own. If the discovery algorithm result contains the | ||||
server's own listening address (IP address and port), then this will | ||||
either lead to a tight loop (if that DNS entry has topmost priority, | ||||
the server would forward the request to itself, triggering dynamic | ||||
discovery again in a perpetual loop), or lead to a potential loop | ||||
with intermediate hops in between (the server could forward to | ||||
another host with a higher priority, which might use DNS itself and | ||||
forward the packet back to the first server). The underlying reason | ||||
that enables these loops is that the server executing the discovery | ||||
algorithm is seriously misconfigured in that it does not recognise | ||||
the request as one that is to be processed by itself. RADIUS has no | ||||
built-in loop detection, so any such loops would remain undetected. | ||||
So, if step 18 of the algorithm discovers such a possible-loop | ||||
situation, the algorithm should be aborted and an error logged. | ||||
After executing the above algorithm, the RADIUS server establishes a | After executing the above algorithm, the RADIUS server establishes a | |||
connection to a home server from the result set. This connection can | connection to a home server from the result set. This connection can | |||
potentially remain open for an indefinite amount of time. This | potentially remain open for an indefinite amount of time. This | |||
conflicts with the possibility of changing device and network | conflicts with the possibility of changing device and network | |||
configurations on the receiving end. Typically, TTL values for | configurations on the receiving end. Typically, TTL values for | |||
records in the name resolution system are used to indicate how long | records in the name resolution system are used to indicate how long | |||
it is safe to rely on the results of the name resolution. When a | it is safe to rely on the results of the name resolution. If these | |||
connection is open and the smallest of the TTL values which were used | TTLs are very low, thrashing of connections becomes possible; the | |||
for discovering the server has not expired, subsequent new user | Effective TTL mitigates that risk. When a connection is open and the | |||
sessions for the realm which corresponds to that open connection | smallest of the Effective TTL value which was learned during | |||
SHOULD re-use the existing connection and SHOULD NOT re-execute the | discovering the server has not expired, subsequent new user sessions | |||
dynamic discovery algorithm nor open a new connection. To allow for | for the realm which corresponds to that open connection SHOULD re-use | |||
a change of configuration, a RADIUS server SHOULD re-execute the | the existing connection and SHOULD NOT re-execute the dynamic | |||
dynamic discovery algorithm after the lowest of the TTL values that | discovery algorithm nor open a new connection. To allow for a change | |||
are associated with this connection have expired. The server MAY | of configuration, a RADIUS server SHOULD re-execute the dynamic | |||
keep the session open during this re-assessment to avoid closure and | discovery algorithm after the Effective TTL that is associated with | |||
immediate re-opening of the connection should the result not have | this connection has expired. The server MAY keep the session open | |||
changed. | during this re-assessment to avoid closure and immediate re-opening | |||
of the connection should the result not have changed. | ||||
Should the algorithm above terminate with an empty set (but no | ||||
error), the RADIUS server SHOULD NOT attempt another execution of | ||||
this algorithm for the same target realm before the negative TTL has | ||||
expired. | ||||
Should the algorithm above terminate due to an error with no TTL | Should the algorithm above terminate with O-1 = empty set, the RADIUS | |||
value known (e.g. DNS SERVFAIL), the RADIUS server SHOULD NOT | server SHOULD NOT attempt another execution of this algorithm for the | |||
attempt another execution of this algorithm for the same target realm | same target realm before the timeout O-2 has passed. | |||
before a configurable timeout interval has passed. | ||||
2.3.5. Delay considerations | 3.4.5. Delay considerations | |||
The host's name resolution library may need to contact outside | The host's name resolution library may need to contact outside | |||
entities to perform the name resolution (e.g. authoritative name | entities to perform the name resolution (e.g. authoritative name | |||
servers for a domain), and since the NAI discovery algorithm is based | servers for a domain), and since the NAI discovery algorithm is based | |||
on uncontrollable user input, the destination of the lookups is out | on uncontrollable user input, the destination of the lookups is out | |||
of control of the server that performs NAI discovery. If such | of control of the server that performs NAI discovery. If such | |||
outside entities are misconfigured or unreachable, the algorithm | outside entities are misconfigured or unreachable, the algorithm | |||
above may need an unacceptably long time to terminate. Many RADIUS | above may need an unacceptably long time to terminate. Many RADIUS | |||
implementations time out after five seconds of delay between Request | implementations time out after five seconds of delay between Request | |||
and Response. It is not useful to wait until the host name | and Response. It is not useful to wait until the host name | |||
resolution library signals a time-out of its name resolution | resolution library signals a time-out of its name resolution | |||
algorithms; instead, implementations of NAI discovery SHOULD | algorithms. The algorithm therefore control execution time with | |||
terminate the algorithm after the fixed upper bound of time of three | TIMER. Execution of the NAI discovery algorithm SHOULD be non- | |||
seconds. If no final output of the algorithm is available after this | blocking (i.e. allow other requests to be processed in parallel to | |||
timeout, the RADIUS server MUST assume the empty set as a result and | the execution of the algorithm). | |||
treat the pending request according to its static configuration | ||||
(e.g., fallback to a default route to a home server). Execution of | ||||
the NAI discovery algorithm SHOULD be non-blocking (i.e. allow other | ||||
requests to be processed in parallel to the execution of the | ||||
algorithm). | ||||
2.3.6. Example | 3.4.6. Example | |||
Example: Assume | Assume | |||
a user from the Technical University of Munich, Germany, has a | a user from the Technical University of Munich, Germany, has a | |||
RADIUS User-Name of "foobar@tu-m[U+00FC]nchen.example". | RADIUS User-Name of "foobar@tu-m[U+00FC]nchen.example". | |||
The name resolution library on the RADIUS forwarding server does | The name resolution library on the RADIUS forwarding server does | |||
not have the realm tu-m[U+00FC]nchen.example in its forwarding | not have the realm tu-m[U+00FC]nchen.example in its forwarding | |||
configuration, but uses DNS for name resolution and has configured | configuration, but uses DNS for name resolution and has configured | |||
the use of Dynamic Discovery to discover RADIUS servers. | the use of Dynamic Discovery to discover RADIUS servers. | |||
It is IPv6-enabled and prefers AAAA records over A records. | It is IPv6-enabled and prefers AAAA records over A records. | |||
It is listening for incoming RADIUS/TLS requests on 192.37.5.1, | It is listening for incoming RADIUS/TLS requests on 192.0.2.1, TCP | |||
TCP/2083. | /2083. | |||
May the configuration variables be | ||||
DNS_TIMEOUT = 3 seconds | ||||
MIN_EFF_TTL = 60 seconds | ||||
BACKOFF_TIME = 3600 seconds | ||||
If DNS contains the following records: | If DNS contains the following records: | |||
xn--tu-mnchen-t9a.example. IN NAPTR 50 50 "s" | xn--tu-mnchen-t9a.example. IN NAPTR 50 50 "s" | |||
"aaa+auth:radius.tls" "" _radiustls._tcp.xn--tu-mnchen- | "aaa+auth:radius.tls" "" _myradius._tcp.xn--tu-mnchen-t9a.example. | |||
t9a.example. | ||||
xn--tu-mnchen-t9a.example. IN NAPTR 50 50 "s" | xn--tu-mnchen-t9a.example. IN NAPTR 50 50 "s" | |||
"fooservice:bar.dccp" "" _abc._def.xn--tu-mnchen-t9a.example. | "fooservice:bar.dccp" "" _abc123._def.xn--tu-mnchen-t9a.example. | |||
_radiustls._tcp.xn--tu-mnchen-t9a.example. IN SRV 0 10 2083 | _myradius._tcp.xn--tu-mnchen-t9a.example. IN SRV 0 10 2083 | |||
radsec.xn--tu-mnchen-t9a.example. | radsecserver.xn--tu-mnchen-t9a.example. | |||
_radiustls._tcp.xn--tu-mnchen-t9a.example. IN SRV 0 20 2083 | _myradius._tcp.xn--tu-mnchen-t9a.example. IN SRV 0 20 2083 | |||
backup.xn--tu-mnchen-t9a.example. | backupserver.xn--tu-mnchen-t9a.example. | |||
radsec.xn--tu-mnchen-t9a.example. IN AAAA | radsecserver.xn--tu-mnchen-t9a.example. IN AAAA | |||
2001:0DB8::202:44ff:fe0a:f704 | 2001:0DB8::202:44ff:fe0a:f704 | |||
radsec.xn--tu-mnchen-t9a.example. IN A 192.0.2.3 | radsecserver.xn--tu-mnchen-t9a.example. IN A 192.0.2.3 | |||
backup.xn--tu-mnchen-t9a.example. IN A 192.0.2.7 | backupserver.xn--tu-mnchen-t9a.example. IN A 192.0.2.7 | |||
Then the algorithm executes as follows, with I = | Then the algorithm executes as follows, with I = | |||
"foobar@tu-m[U+00FC]nchen.example", and no consortium name mangling | "foobar@tu-m[U+00FC]nchen.example", and no consortium name mangling | |||
in use: | in use: | |||
1. P = 7 | 1. P = 7 | |||
2. R = "tu-m[U+00FC]nchen.example" | 2. R = "tu-m[U+00FC]nchen.example" | |||
3. NOOP | 3. NOOP | |||
4. [name resolution library converts R to xn--tu-mnchen- | 4. name resolution library converts R to xn--tu-mnchen-t9a.example | |||
t9a.example] Query result: ( 50 50 "s" "aaa+auth:radius.tls" "" | ||||
_radiustls._tcp.xn--tu-mnchen-t9a.example. ; 50 50 "s" | ||||
"fooservice:bar.dccp" "" _abc._def.xn--tu-mnchen-t9a.example. ) | ||||
5. Result: 50 50 "s" "aaa+auth:radius.tls" "" _radiustls._tcp.xn | 5. TIMER starts. | |||
--tu-mnchen-t9a.example. | ||||
6. NOOP | 6. Result: | |||
7. O' = {(radsec.xn--tu-mnchen-t9a.example.; 2083; 10; TTL | (TTL = 47) 50 50 "s" "aaa+auth:radius.tls" "" | |||
A),(backup.xn--tu-mnchen-t9a. example.;2083; 20; TTL B)} | _myradius._tcp.xn--tu-mnchen-t9a.example. | |||
8. Go to step 15. | (TTL = 522) 50 50 "s" "fooservice:bar.dccp" "" | |||
_abc123._def.xn--tu-mnchen-t9a.example. | ||||
9. (not executed) | 7. Result: | |||
10. (not executed) | (TTL = 47) 50 50 "s" "aaa+auth:radius.tls" "" | |||
_myradius._tcp.xn--tu-mnchen-t9a.example. | ||||
11. (not executed) | 8. NOOP | |||
9. Successive resolution performs SRV query for label | ||||
_myradius._tcp.xn--tu-mnchen-t9a.example, which results in | ||||
12. (not executed) | (TTL 499) 0 10 2083 radsec.xn--tu-mnchen-t9a.example. | |||
(TTL 2200) 0 20 2083 backup.xn--tu-mnchen-t9a.example. | ||||
10. NOOP | ||||
11. O' = { | ||||
(radsec.xn--tu-mnchen-t9a.example.; 2083; 10; 60), | ||||
(backup.xn--tu-mnchen-t9a.example.; 2083; 20; 60) | ||||
} // minimum TTL is 47, up'ed to MIN_EFF_TTL | ||||
12. Continuing at 18. | ||||
13. (not executed) | 13. (not executed) | |||
14. O = {(2001:0DB8::202:44ff:fe0a:f704; 2083; 10; TTL | 14. (not executed) | |||
A),(192.0.2.7; 2083; 20; TTL B)} | ||||
15. O = {(2001:0DB8::202:44ff:fe0a:f704; 2083; 10; TTL | 15. (not executed) | |||
A),(192.0.2.7; 2083; 20; TTL B)}. Terminate. | ||||
16. (not executed) | ||||
17. (not executed) | ||||
18. O-1 = { | ||||
(2001:0DB8::202:44ff:fe0a:f704; 2083; 10; 60), | ||||
(192.0.2.7; 2083; 20; 60) | ||||
}; O-2 = 0 | ||||
19. No match with own listening address; terminate with tuple (O-1, | ||||
O-2) from previous step. | ||||
The implementation will then attempt to connect to two servers, with | The implementation will then attempt to connect to two servers, with | |||
preference to radsec.xn--tu-mnchen-t9a.example.:2083, using either | preference to [2001:0DB8::202:44ff:fe0a:f704]:2083. | |||
the AAAA or A addresses depending on the host configuration and its | ||||
IP stack's capabilities. | ||||
3. Security Considerations | 4. Security Considerations | |||
When using DNS without DNSSEC security extensions, the replies to | The results from the execution of this algorithm are only trustworthy | |||
NAPTR, SRV and A/AAAA requests as described in section Section 2 can | if each of the lookup steps by the name resolution library were | |||
not be trusted. RADIUS transports have an out-of-DNS-band means to | cryptographically secured; i.e. if DNSSEC validation was turned on | |||
verify that the discovery attempt led to the intended target: | during the resolution AND all of the records were in a DNSSEC signed | |||
certificate verification or TLS-PSK keys. | zone AND validation of all those records was successful. | |||
4. IANA Considerations | When using DNS without DNSSEC security extensions for at least one of | |||
the replies to NAPTR, SRV and A/AAAA requests as described in section | ||||
Section 3, the result O can not be trusted. Even if it can be | ||||
trusted (i.e. DNSSEC is in use), actual authorization of the | ||||
discovered server to provide service for the given realm needs to be | ||||
verified. A mechanism from section Section 2.1.1.3 or equivalent | ||||
MUST be used to verify authorization. | ||||
The algorithm has a configurable completion time-out DNS_TIMEOUT | ||||
defaulting to three seconds for RADIUS' operational reasons. The | ||||
lookup of DNS resource records based on unverified user input is an | ||||
attack vector for DoS attacks: an attacker might intentionally craft | ||||
bogus DNS zones which take a very long time to reply (e.g. due to a | ||||
particularly byzantine tree structure, or artificial delays in | ||||
responses). | ||||
To mitigate this DoS vector, implementations SHOULD consider rate- | ||||
limiting either their amount of new executions of the dynamic | ||||
discovery algorithm as a whole, or the amount of intermediate | ||||
responses to track, or at least the number of pending DNS queries. | ||||
Implementations MAY choose lower values than the default for | ||||
DNS_TIMEOUT to limit the impact of DoS attacks via that vector. They | ||||
MAY also continue their attempt to resolve DNS records even after | ||||
DNS_TIMEOUT has passed; a subsequent request for the same realm might | ||||
benefit from retrieving the results anyway. The amount of time to | ||||
spent waiting for a result will influence the impact of a possible | ||||
DoS attack; the waiting time value is implementation dependent and | ||||
outside the scope of this specification. | ||||
5. IANA Considerations | ||||
This document requests IANA registration of the following entries in | This document requests IANA registration of the following entries in | |||
existing registries: | existing registries: | |||
o S-NAPTR Application Service Tags registry | o S-NAPTR Application Service Tags registry | |||
* aaa+auth | * aaa+auth | |||
* aaa+acct | ||||
* aaa+acct | ||||
* aaa+dynauth | * aaa+dynauth | |||
o S-NAPTR Application Protocol Tags registry | o S-NAPTR Application Protocol Tags registry | |||
* radius.tls | * radius.tls | |||
* radius.dtls | * radius.dtls | |||
This document reserves the use of the "_radiustls" and "_radiusdtls" | This document reserves the use of the "_radiustls" and "_radiusdtls" | |||
Service labels. | Service labels. | |||
This document requests the creation of a new IANA registry named | This document requests the creation of a new IANA registry named | |||
"RADIUS/TLS SRV Protocol Registry" with the following initial | "RADIUS/TLS SRV Protocol Registry" with the following initial | |||
entries: | entries: | |||
o _tcp | o _tcp | |||
o _udp | o _udp | |||
5. Normative References | 6. Normative References | |||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
Requirement Levels", BCP 14, RFC 2119, March 1997. | Requirement Levels", BCP 14, RFC 2119, March 1997. | |||
[RFC2782] Gulbrandsen, A., Vixie, P., and L. Esibov, "A DNS RR for | ||||
specifying the location of services (DNS SRV)", RFC 2782, | ||||
February 2000. | ||||
[RFC2865] Rigney, C., Willens, S., Rubens, A., and W. Simpson, | [RFC2865] Rigney, C., Willens, S., Rubens, A., and W. Simpson, | |||
"Remote Authentication Dial In User Service (RADIUS)", RFC | "Remote Authentication Dial In User Service (RADIUS)", RFC | |||
2865, June 2000. | 2865, June 2000. | |||
[RFC2866] Rigney, C., "RADIUS Accounting", RFC 2866, June 2000. | [RFC2866] Rigney, C., "RADIUS Accounting", RFC 2866, June 2000. | |||
[RFC3958] Daigle, L. and A. Newton, "Domain-Based Application | [RFC3958] Daigle, L. and A. Newton, "Domain-Based Application | |||
Service Location Using SRV RRs and the Dynamic Delegation | Service Location Using SRV RRs and the Dynamic Delegation | |||
Discovery Service (DDDS)", RFC 3958, January 2005. | Discovery Service (DDDS)", RFC 3958, January 2005. | |||
[RFC5176] Chiba, M., Dommety, G., Eklund, M., Mitton, D., and B. | [RFC5176] Chiba, M., Dommety, G., Eklund, M., Mitton, D., and B. | |||
Aboba, "Dynamic Authorization Extensions to Remote | Aboba, "Dynamic Authorization Extensions to Remote | |||
Authentication Dial In User Service (RADIUS)", RFC 5176, | Authentication Dial In User Service (RADIUS)", RFC 5176, | |||
January 2008. | January 2008. | |||
[RFC5280] Cooper, D., Santesson, S., Farrell, S., Boeyen, S., | ||||
Housley, R., and W. Polk, "Internet X.509 Public Key | ||||
Infrastructure Certificate and Certificate Revocation List | ||||
(CRL) Profile", RFC 5280, May 2008. | ||||
[RFC5580] Tschofenig, H., Adrangi, F., Jones, M., Lior, A., and B. | [RFC5580] Tschofenig, H., Adrangi, F., Jones, M., Lior, A., and B. | |||
Aboba, "Carrying Location Objects in RADIUS and Diameter", | Aboba, "Carrying Location Objects in RADIUS and Diameter", | |||
RFC 5580, August 2009. | RFC 5580, August 2009. | |||
[RFC5891] Klensin, J., "Internationalized Domain Names in | [RFC5891] Klensin, J., "Internationalized Domain Names in | |||
Applications (IDNA): Protocol", RFC 5891, August 2010. | Applications (IDNA): Protocol", RFC 5891, August 2010. | |||
[I-D.ietf-radext-dtls] | [I-D.ietf-radext-dtls] | |||
DeKok, A., "DTLS as a Transport Layer for RADIUS", draft- | DeKok, A., "DTLS as a Transport Layer for RADIUS", draft- | |||
ietf-radext-dtls-02 (work in progress), July 2012. | ietf-radext-dtls-05 (work in progress), April 2013. | |||
[RFC6614] Winter, S., McCauley, M., Venaas, S., and K. Wierenga, | [RFC6614] Winter, S., McCauley, M., Venaas, S., and K. Wierenga, | |||
"Transport Layer Security (TLS) Encryption for RADIUS", | "Transport Layer Security (TLS) Encryption for RADIUS", | |||
RFC 6614, May 2012. | RFC 6614, May 2012. | |||
[I-D.ietf-radext-nai] | ||||
DeKok, A., "The Network Access Identifier", draft-ietf- | ||||
radext-nai-03 (work in progress), May 2013. | ||||
Appendix A. Appendix A: ASN.1 Syntax of NAIRealm | ||||
PKIXServiceNameSAN93 {iso(1) identified-organization(3) dod(6) | ||||
internet(1) security(5) mechanisms(5) pkix(7) id-mod(0) | ||||
id-mod-dns-srv-name-93(40) } | ||||
DEFINITIONS EXPLICIT TAGS ::= | ||||
BEGIN | ||||
-- EXPORTS ALL -- | ||||
IMPORTS | ||||
id-pkix | ||||
FROM PKIX1Explicit88 { iso(1) identified-organization(3) | ||||
dod(6) internet(1) security(5) mechanisms(5) pkix(7) | ||||
id-mod(0) id-pkix1-explicit(18) } ; | ||||
-- from RFC 5280 | ||||
-- In the GeneralName definition using the 1993 ASN.1 syntax | ||||
-- includes: | ||||
OTHER-NAME ::= TYPE-IDENTIFIER | ||||
-- Service Name Object Identifier | ||||
id-on OBJECT IDENTIFIER ::= { id-pkix 8 } | ||||
id-on-nai OBJECT IDENTIFIER ::= { id-on XXX } | ||||
-- Service Name | ||||
naiRealm OTHER-NAME ::= { NAIRealm IDENTIFIED BY { id-on-nai }} | ||||
NAIRealm ::= UTF8String (SIZE (1..MAX)) | ||||
END | ||||
Authors' Addresses | Authors' Addresses | |||
Stefan Winter | Stefan Winter | |||
Fondation RESTENA | Fondation RESTENA | |||
6, rue Richard Coudenhove-Kalergi | 6, rue Richard Coudenhove-Kalergi | |||
Luxembourg 1359 | Luxembourg 1359 | |||
LUXEMBOURG | LUXEMBOURG | |||
Phone: +352 424409 1 | Phone: +352 424409 1 | |||
Fax: +352 422473 | Fax: +352 422473 | |||
End of changes. 74 change blocks. | ||||
169 lines changed or deleted | 586 lines changed or added | |||
This html diff was produced by rfcdiff 1.41. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |