RFC 7585

Dynamic Peer Discovery for RADIUS/TLS and RADIUS/DTLS Based on the Network Access Identifier (NAI)

πŸ“… published October 2015, from ietf

RFC 7585: Dynamic Peer Discovery for RADIUS/TLS and RADIUS/DTLS Based on the Network Access Identifier (NAI) πŸ’–

okay bestie, the title block is giving everything πŸŽ€ This is an IETF Request for Comments, number 7585. The authors are S. Winter from RESTENA and M. McCauley from AirSpayce, and it was published in October 2015. It's in the Experimental category, so it's for trying things out and evaluating them, not a Standards Track spec πŸ§ͺ The ISSN is 2070-1721. The title block doesn't list anything it obsoletes or updates, so it isn't replacing or changing any other RFC πŸ¦‹

Abstract ✨

this doc explains how to find the authoritative RADIUS servers for a given realm πŸ” It's meant to be used with either RADIUS over Transport Layer Security (RADIUS/TLS) or RADIUS over Datagram Transport Layer Security (RADIUS/DTLS) πŸ’…

Status of This Memo πŸ“œ

bestie, this one is important. This document is not an Internet Standards Track specification. It's published so people can examine it, implement it experimentally, and evaluate it πŸ§ͺ

It defines an Experimental Protocol for the Internet community 🌈 It's a product of the Internet Engineering Task Force (IETF) and represents the consensus of the IETF community. It went through public review and the Internet Engineering Steering Group (IESG) approved it for publication. Not every IESG-approved document is eligible for any level of Internet Standard, so check Section 2 of RFC 5741 if you want the details πŸ€“

If you want the current status, any errata, or a way to send feedback, go to http://www.rfc-editor.org/info/rfc7585 πŸ’Œ

Copyright (c) 2015 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 (http://trustee.ietf.org/license-info) as they stood on the publication date. Please actually read these, because they spell out your rights and restrictions for this document πŸ™ˆ Any Code Components pulled out of this document must include Simplified BSD License text, as described in Section 4.e of the Trust Legal Provisions. They're provided without warranty, as described in the Simplified BSD License πŸ“

Table of Contents πŸ“š

   1.  Introduction  . . . . . . . . . . . . . . . . . . . . . . . .   3
     1.1.  Requirements Language . . . . . . . . . . . . . . . . . .   5
     1.2.  Terminology . . . . . . . . . . . . . . . . . . . . . . .   6
     1.3.  Document Status . . . . . . . . . . . . . . . . . . . . .   6
   2.  Definitions . . . . . . . . . . . . . . . . . . . . . . . . .   7
     2.1.  DNS Resource Record (RR) Definition . . . . . . . . . . .   7
       2.1.1.  S-NAPTR . . . . . . . . . . . . . . . . . . . . . . .   7
       2.1.2.  SRV . . . . . . . . . . . . . . . . . . . . . . . . .  12
       2.1.3.  Optional Name Mangling  . . . . . . . . . . . . . . .  12
     2.2.  Definition of the X.509 Certificate Property
           SubjectAltName:otherName:NAIRealm . . . . . . . . . . . .  14
   3.  DNS-Based NAPTR/SRV Peer Discovery  . . . . . . . . . . . . .  16
     3.1.  Applicability . . . . . . . . . . . . . . . . . . . . . .  16
     3.2.  Configuration Variables . . . . . . . . . . . . . . . . .  16
     3.3.  Terms . . . . . . . . . . . . . . . . . . . . . . . . . .  16
     3.4.  Realm to RADIUS Server Resolution Algorithm . . . . . . .  17
       3.4.1.  Input . . . . . . . . . . . . . . . . . . . . . . . .  17
       3.4.2.  Output  . . . . . . . . . . . . . . . . . . . . . . .  18
       3.4.3.  Algorithm . . . . . . . . . . . . . . . . . . . . . .  18
       3.4.4.  Validity of Results . . . . . . . . . . . . . . . . .  20
       3.4.5.  Delay Considerations  . . . . . . . . . . . . . . . .  21
       3.4.6.  Example . . . . . . . . . . . . . . . . . . . . . . .  21
   4.  Operations and Manageability Considerations . . . . . . . . .  24
   5.  Security Considerations . . . . . . . . . . . . . . . . . . .  25
   6.  Privacy Considerations  . . . . . . . . . . . . . . . . . . .  26
   7.  IANA Considerations . . . . . . . . . . . . . . . . . . . . .  27
   8.  References  . . . . . . . . . . . . . . . . . . . . . . . . .  29
     8.1.  Normative References  . . . . . . . . . . . . . . . . . .  29
     8.2.  Informative References  . . . . . . . . . . . . . . . . .  30
   Appendix A.  ASN.1 Syntax of NAIRealm . . . . . . . . . . . . . .  31
   Authors' Addresses  . . . . . . . . . . . . . . . . . . . . . . .  32

1. Introduction ✨

okay so RADIUS in every transport flavour (RADIUS/UDP, RADIUS/TCP, RADIUS/TLS, and RADIUS/DTLS) needs every peer, clients and servers alike, configured by hand 😩

When more than one administrative entity works together on RADIUS authentication for their own customers (a "roaming consortium"), the Network Access Identifier (NAI) [RFC7542] is the suggested way to tell users apart across those entities. The part of a username to the right of the "@" delimiter in an NAI is called the user's "realm" 🧚 When there are lots of realms and RADIUS forwarding servers, the number of realms to forward and the matching number of servers to configure can get big fast. If new realms and servers keep getting added or existing server details keep changing, one giant monolithic config file for all of it can become too cumbersome to be useful πŸ’€

It gets messier when a roaming consortium is made of branches that work independently (say, departments and national subsidiaries), each with their own forwarding servers, and each adding or changing their realm lists whenever they like. Keeping the changed data in sync across all of those branches is its own headache πŸ™ˆ

When realms can be split up (for example by their top-level domain (TLD) ending), requests can be forwarded through a hierarchy of RADIUS servers, where each server handles its own slice of the realm space 🌸 Figure 1 shows what that hierarchical routing looks like.

                                    +-------+
                                    |       |
                                    |   .   |
                                    |       |
                                    +---+---+
                                      / | \
                    +----------------/  |  \---------------------+
                    |                   |                        |
                    |                   |                        |
                    |                   |                        |
                 +--+---+            +--+--+                +----+---+
                 |      |            |     |                |        |
                 | .edu |    . . .   | .nl |      . . .     | .ac.uk |
                 |      |            |     |                |        |
                 +--+---+            +--+--+                +----+---+
                  / | \                 | \                      |
                 /  |  \                |  \                     |
                /   |   \               |   \                    |
         +-----+    |    +-----+        |    +------+            |
         |          |          |        |           |            |
         |          |          |        |           |            |
     +---+---+ +----+---+ +----+---+ +--+---+ +-----+----+ +-----+-----+
     |       | |        | |        | |      | |          | |           |
     |utk.edu| |utah.edu| |case.edu| |hva.nl| |surfnet.nl| |soton.ac.uk|
     |       | |        | |        | |      | |          | |           |
     +----+--+ +--------+ +--------+ +------+ +----+-----+ +-----------+
          |                                        |
          |                                        |
       +--+--+                                  +--+--+
       |     |                                  |     |
     +-+-----+-+                                |     |
     |         |                                +-----+
     +---------+
    user: paul@surfnet.nl             surfnet.nl Authentication server

Figure 1: RADIUS Hierarchy Based on Top-Level Domain Partitioning

But splitting by TLD isn't always possible πŸ₯Ί For example, in one real-life deployment, the administrative boundaries and RADIUS forwarding servers follow country borders, yet generic top-level domains like .edu don't line up with those borders (see [RFC7593] for details). Situations like this can really benefit from a distributed way to store realm and server reachability information πŸ’œ This document describes one such approach: storing realm-to-server mappings in DNS. With that in place, realm-based request forwarding can work without a static hierarchy like the one in the next figure:

                                    ---------
                                   /         \
                          ---------           ------------
                         /                                \
                         |    DNS                          -
               ----------|                                  \
              /          \          surfnet.nl NAPTR?       |
        (1)  /            ----       -> radius.surfnet.nl   /
            /                 \                            /
           /                   --------           ---------
          /                            \---------/
         |
         |   ---------------------------------------
         |  /              (2) RADIUS               \
         |  |                                       |
     +---+---+ +----+---+ +----+---+ +--+---+ +-----+----+ +-----+-----+
     |       | |        | |        | |      | |          | |           |
     |utk.edu| |utah.edu| |case.edu| |hva.nl| |surfnet.nl| |soton.ac.uk|
     |       | |        | |        | |      | |          | |           |
     +----+--+ +--------+ +--------+ +------+ +----+-----+ +-----------+
          |                                        |
          |                                        |
       +--+--+                                  +--+--+
       |     |                                  |     |
     +-+-----+-+                                |     |
     |         |                                +-----+
     +---------+
     user: paul@surfnet.nl             surfnet.nl Authentication server

Figure 2: RADIUS Hierarchy Based on Top-Level Domain Partitioning

This document also covers a bunch of ways to check that the server info pulled from DNS actually came from an authorized party πŸ” This matters because an organization that's not part of a given roaming consortium at all could just edit its own DNS records to produce a result for someone else's realm πŸ‘€

1.1. Requirements Language πŸ“

in this doc, a few words signal the requirements of the spec πŸ’… The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" are to be interpreted as described in RFC 2119 [RFC2119] 🫢

1.2. Terminology 🧠

  • RADIUS/TLS Client: a RADIUS/TLS [RFC6614] instance that starts a new connection πŸ¦‹
  • RADIUS/TLS Server: a RADIUS/TLS [RFC6614] instance that listens on a RADIUS/TLS port and accepts new connections 🌈
  • RADIUS/TLS Node: a RADIUS/TLS client or server ✨

[RFC7542] defines the terms NAI, realm, and consortium πŸŽ€

1.3. Document Status ✨

okay so this one is an Experimental RFC πŸ§ͺ which means it's still being tested, not a finished standard yet πŸ’–

the communities who are expected to use it are roaming consortia whose authentication services are built on the RADIUS protocol 🌸

the experiment doesn't have a set end date 🫢 once enough experience is collected on the choice points mentioned below, it's expected to be obsoleted by a Standards Track version of the protocol that trims down those choice points βœ‚οΈ the way that's giving clean-up arc 😭

if that removal of choice points obsoletes any tags or service names that were defined here and allocated by IANA, those items get returned to IANA as per the provisions in [RFC6335] πŸ¦‹

the document gives RADIUS a discovery mechanism that's super similar to what Diameter does [RFC6733] πŸ‘‘ so the basic approach, which uses Naming Authority Pointer (NAPTR) records in DNS domains that match NAI realms, is not really experimental at all πŸ’…

BUT the document also has a few choice points and extensions that go past what Diameter does, and these are the big ones:

  • provisions for working out whether a server is allowed to act for the users of a realm (Diameter says this is out of scope) πŸ”
  • way more in-depth guidance on DNS when it comes to timeouts, failure conditions, and changing Time-To-Live (TTL) information than the Diameter version has πŸ“
  • a partially correct routing error detection during DNS lookups 🌈

2. Definitions πŸ’…

2.1. DNS Resource Record (RR) Definition πŸŽ€

okay so DNS definitions of RADIUS/TLS servers can be either S-NAPTR records (see [RFC3958]) or SRV records ✨ when both are defined, the resolution algorithm prefers the 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 spec defines three S-NAPTR service tags, and they're giving very clear vibes πŸ’–

+-----------------+-----------------------------------------+
| Service Tag     | Use                                     |
+-----------------+-----------------------------------------+
| aaa+auth        | RADIUS Authentication, i.e., traffic as |
|                 | defined in [RFC2865]                    |
| - - - - - - - - | - - - - - - - - - - - - - - - - - - - - |
| aaa+acct        | RADIUS Accounting, i.e., traffic as     |
|                 | defined in [RFC2866]                    |
| - - - - - - - - | - - - - - - - - - - - - - - - - - - - - |
| aaa+dynauth     | RADIUS Dynamic Authorization, i.e.,     |
|                 | traffic as defined in [RFC5176]         |
+-----------------+-----------------------------------------+

                      Figure 3: List of Service Tags

this spec also defines two S-NAPTR protocol tags 🌸

+-----------------+-----------------------------------------+
| Protocol Tag    | Use                                     |
+-----------------+-----------------------------------------+
| radius.tls.tcp  | RADIUS transported over TLS as defined  |
|                 | in [RFC6614]                            |
| - - - - - - - - | - - - - - - - - - - - - - - - - - - - - |
| radius.dtls.udp | RADIUS transported over DTLS as defined |
|                 | in [RFC7360]                            |
+-----------------+-----------------------------------------+

                      Figure 4: List of Protocol Tags

Note well: πŸ™ˆ

  • the S-NAPTR service and protocols are totally unrelated to the IANA "Service Name and Transport Protocol Port Number Registry" 🚫
  • the "." in the protocol tags is only there to make things easier for humans to read πŸ“– it's not for structure or namespacing, so the querying application or resolver MUST NOT parse it in any way πŸ›‘
  • other protocols use "." in their protocol tags too, and that's pure coincidence πŸ€·β€β™€οΈ it doesn't mean they share any semantics πŸ’…

2.1.1.2. Definition of Conditions for Retry/Failure 😀

RADIUS is a time-critical protocol, so RADIUS clients that don't get an answer after a configurable but short amount of time will consider the request failed πŸ’€ because of that, there's basically no room for extensive retries πŸ™ˆ

as a general rule, only error conditions that produce an immediate response from the other end are eligible for a retry of a discovered target ✨ any error involving timeouts, or no reply for more than one second during the connection setup phase, counts as a failure, and then the next target in the set of discovered NAPTR targets gets tried πŸƒβ€β™€οΈ

note that [RFC3958] already says a failure to identify the server as authoritative for the realm is always a failure 🚨 so even if a discovered target instantly returns a wrong credential, it's still not eligible for a retry πŸ™…β€β™€οΈ

furthermore, the contacted RADIUS/TLS server checks during connection setup whether it finds the connecting RADIUS/TLS client authorized πŸ” if the client isn't acceptable, the server closes the TLS connection right away with an appropriate alert πŸšͺ those TLS handshake failures are permanently fatal and not eligible for retry, UNLESS the connecting client has more X.509 certificates to try 🎟️ in that case, a retry with the rest of its certificates SHOULD be attempted 🫢 the reason this matters is that not trying all the available client certificates could create a DoS for the end user whose authentication attempt triggered the discovery 😭 one of the neglected certificates might have led to a successful RADIUS connection and then successful end-user authentication πŸ’–

if the TLS session setup to a discovered target doesn't succeed, that target (identified by its IP address and port number) SHOULD be ignored from the result set of any later runs of the discovery algorithm 🧹 this holds at least until the target's Effective TTL (see Section 3.3) has expired, or until the entity running the algorithm changes its TLS context to either send a new client certificate or expect a different server certificate πŸ”„

2.1.1.3. Server Identification and Handshake πŸ”

after the algorithm in this document has been executed, a RADIUS/TLS session as per [RFC6614] gets established ✨ the discovery algorithm doesn't have any provisions for setting up confidential keying material between the RADIUS/TLS client (the server running the discovery algorithm) and the RADIUS/TLS server that was discovered πŸ”‘ so Pre-Shared Key (PSK) ciphersuites for TLS can't be used in the subsequent TLS handshake 🚫 only TLS ciphersuites using X.509 certificates work with this algorithm πŸ“œ

there are lots of ways to define which certificates are acceptable here πŸ€“ this document defines one mandatory-to-implement mechanism that lets you verify whether the contacted host is authoritative for an NAI realm or not πŸ’« it also gives one example of another mechanism that's already in widespread deployment, plus one possible DNSSEC-based approach that isn't implemented yet 🌱

for the approaches that use trust roots (see the next two sections), a typical deployment uses a dedicated trust store for RADIUS/TLS certificate authorities 🏰 especially one that's independent from the default "browser" trust stores 🌐 usually this is one or a few Certification Authorities (CAs), and they only issue certificates for the specific purpose of setting up RADIUS server-to-server trust 🀝 it's really important not to trust a big set of CAs that operate outside the control of the roaming consortium 🚩 their certificates with the properties that matter for authorization (like NAIRealm and policyOID below) are hard to verify 😬 so clients SHOULD NOT be preconfigured with a list of known public CAs by the vendor or manufacturer πŸ™…β€β™€οΈ instead, clients SHOULD start off with an empty CA list πŸ«™ a CA SHOULD be added only when an administrator configures it manually πŸ› οΈ

2.1.1.3.1. Mandatory-to-Implement Mechanism: Trust Roots + NAIRealm πŸ‘‘

verifying authority to provide Authentication, Authorization, and Accounting (AAA) services over RADIUS/TLS is a two-step process πŸŽ€

step 1 is verifying the certificate's well-formedness and validity as per [RFC5280], and checking whether it was issued from a root certificate the RADIUS/TLS client trusts πŸ”Ž

step 2 is comparing the value of the algorithm's variable "R" (taken after step 3 of the discovery algorithm in Section 3.4.3 below, so after the consortium name mangling but before it's converted into a form the name resolution library can use) to all the values of the contacted RADIUS/TLS server's X.509 certificate property subjectAlternativeName:otherName:NAIRealm, as defined in Section 2.2 🧩

2.1.1.3.2. Other Mechanism: Trust Roots + policyOID 🌷

verifying authority to provide AAA services over RADIUS/TLS is also a two-step process πŸ’…

step 1 is the same as before: verifying certificate well-formedness and validity as per [RFC5280], and whether it was issued from a root certificate the RADIUS/TLS client deems trustworthy πŸ”

step 2 is comparing 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, the server is considered authorized βœ… if there's no match, the server is considered unauthorized ❌

ngl this mechanism is inferior to the mandatory-to-implement one in the previous section 😀 all authorized servers get validated by the same OID value, so it isn't fine-grained enough to express authority for one specific realm inside the consortium πŸ™ƒ if the consortium has members that are hostile toward other members, this weakness can be exploited by one RADIUS/TLS server impersonating another, as long as the hostile member can spoof DNS responses πŸ‘€

the shortcomings in server identification can be partially mitigated by only using RADIUS infrastructure with authentication payloads that provide mutual authentication and credential protection πŸ›‘οΈ (that means Extensible Authentication Protocol (EAP) types passing the criteria of [RFC4017]) 🧚 mutual authentication stops the hostile server from mimicking the real EAP server, because it can't terminate the EAP authentication unnoticed without the server certificate from the real EAP server πŸ™…β€β™€οΈ credential protection stops the impersonating server from learning usernames and passwords from the ongoing EAP conversation πŸ”’ other RADIUS attributes about the authentication, like the EAP peer's Calling-Station-ID, can still be learned though πŸ₯²

2.1.1.3.3. Other Mechanism: DNSSEC/DANE πŸ”βœ¨

Okay so, when DNSSEC is in use, the results of the algorithm can be trusted πŸ”’. The entity running the algorithm can be certain that the realm which kicked off the discovery is actually served by the server that DNS pointed it to. BUT πŸ™ˆ that does not guarantee the server is also authorized (aka a recognized member of the roaming consortium). The server still needs to present an X.509 certificate proving it has the authority to serve a particular realm πŸ’….

The authorization can be sketched using DNSSEC and DNS-Based Authentication of Named Entities (DANE) like this 🧚: the DANE/TLSA records of all authorized servers go into a DNSSEC zone that contains all known and authorized realms. That zone is rooted in a common, consortium-agreed branch of the DNS tree. The entity executing the algorithm takes the realm information from the authentication attempt and then tries to retrieve TLSA resource records (TLSA RRs) for the DNS label "realm.commonroot". After that, it verifies that the server certificate presented 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. Client Authentication and Authorization 🫢

Note that RADIUS/TLS connections always mutually authenticate the RADIUS server and the RADIUS client 🀝. This specification gives an algorithm for a RADIUS client to contact a RADIUS server and verify that the server is authorized, and that's it. During connection setup, the RADIUS server also needs to verify whether it considers the connecting RADIUS client authorized. That part 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                                     |
+-------------------+-----------------------------------------+
| _radiustls._tcp   | RADIUS transported over TLS as defined  |
|                   | in [RFC6614]                            |
| - - - - - - - - - | - - - - - - - - - - - - - - - - - - - - |
| _radiusdtls._udp  | RADIUS transported over DTLS as defined |
|                   | in [RFC7360]                            |
+-------------------+-----------------------------------------+

                    Figure 5: List of SRV Labels

Just like NAPTR records, a lookup and the follow-up of SRV records may yield more than one server to contact, in a prioritized list πŸ“‹. [RFC2782] does not specify rules regarding "Definition of Conditions for Retry/Failure" nor "Server Identification and Handshake". This specification states that the rules for these two topics, as defined in Sections 2.1.1.2 and 2.1.1.3, SHALL be used both for targets retrieved via an initial NAPTR RR and for targets retrieved via an initial SRV RR (i.e., in the absence of NAPTR RRs) πŸ‘‘.

2.1.3. Optional Name Mangling πŸ¦‹

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 realm name for which the server is the authoritative RADIUS server. In other words, it's the realm name after conversion according to Section 5 of [RFC5891] πŸ”€.

However, arbitrary other labels or service tags may be used if, for example, a roaming consortium uses realm names that are not associated with DNS names, or special-purpose consortia where a globally valid discovery is not a use case 🌈. Such other labels require a consortium-wide agreement about the transformation from realm name to lookup label and/or which service tag to use.

Examples:

a. A general-purpose RADIUS server for realm example.com might have DNS entries as follows:

example.com.  IN NAPTR 50 50 "s" "aaa+auth:radius.tls.tcp" ""
_radiustls._tcp.foobar.example.com.

_radiustls._tcp.foobar.example.com.  IN SRV 0 10 2083
radsec.example.com.

b. The consortium "foo" provides roaming services for its members only πŸ“. The realms used are of the form enterprise-name.example. The consortium operates a special-purpose DNS server for the (private) TLD "example", which all RADIUS servers use to resolve realm names. "Company, Inc." is part of the consortium. On the consortium's DNS server, realm company.example might have the following DNS entries:

company.example.  IN NAPTR 50 50 "a"
"aaa+auth:radius.dtls.udp" "" roamserv.company.example.

c. The eduroam consortium (see [RFC7593]) uses realms based on DNS but provides its services to a closed community only πŸŽ“. However, an AAA domain participating in eduroam may also want to expose AAA services to other, general-purpose applications (on the same or other RADIUS servers). Because of that, the eduroam consortium uses the service tag "x-eduroam" for authentication purposes, and eduroam RADIUS servers use this tag to look up other eduroam servers. An eduroam participant, example.org, that also provides general-purpose AAA on a different server uses the general "aaa+auth" tag πŸ’œ:

example.org.  IN NAPTR 50 50 "s" "x-eduroam:radius.tls.tcp" ""
_radiustls._tcp.eduroam.example.org.

example.org.  IN NAPTR 50 50 "s" "aaa+auth:radius.tls.tcp" ""
_radiustls._tcp.aaa.example.org.

_radiustls._tcp.eduroam.example.org.  IN SRV 0 10 2083 aaa-
eduroam.example.org.

_radiustls._tcp.aaa.example.org.  IN SRV 0 10 2083 aaa-
default.example.org.

2.2. Definition of the X.509 Certificate Property SubjectAltName:otherName:NAIRealm πŸŽ€

This specification retrieves IP addresses and port numbers from the Domain Name System, and those are then used to authenticate users via the RADIUS/TLS protocol 🌐. Whether or not the results from DNS discovery are trustworthy (e.g., DNSSEC in use), it is always important to verify that the server that was contacted is authorized to service requests for the user that triggered the discovery process πŸ”.

The input to the algorithm is an NAI realm as specified in Section 3.4.1. As a consequence, the X.509 certificate of the server that 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 an NAI realm to be expressed. The field subjectAltName:dNSName is a syntactically good match, but it 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 a 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 used to look up the SRV record 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 does not involve resolution of any SRV records. This 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-naiRealm OBJECT IDENTIFIER ::= { id-on 8 }

ub-naiRealm-length INTEGER ::= 255

NAIRealm ::= UTF8String (SIZE (1..ub-naiRealm-length))

The NAIRealm, if present, MUST contain an NAI realm as defined in [RFC7542]. It MAY substitute the leftmost dot-separated label 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 an "" to indicate a common prefix inside the part, are not permitted 🚫.

The comparison of an NAIRealm to the NAI realm derived from user input with this algorithm is a byte-by-byte comparison. The exception is the optional leftmost dot-separated part of the value, whose content is a single "*" character; such labels match all strings in the same dot-separated 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 match, the server is considered unauthorized 🚦.

Since multiple names and multiple name forms may occur in the subjectAltName extension, an arbitrary number of NAIRealms can be specified in a certificate 🌸.

Examples:

+---------------------+-------------------+-----------------------+
| NAI realm (RADIUS)  | NAIRealm (cert)   | MATCH?                |
+---------------------+-------------------+-----------------------+
| foo.example         | foo.example       | YES                   |
| foo.example         | *.example         | YES                   |
| bar.foo.example     | *.example         | NO                    |
| bar.foo.example     | *ar.foo.example   | NO (NAIRealm invalid) |
| bar.foo.example     | bar.*.example     | NO (NAIRealm invalid) |
| bar.foo.example     | *.*.example       | NO (NAIRealm invalid) |
| sub.bar.foo.example | *.*.example       | NO (NAIRealm invalid) |
| sub.bar.foo.example | *.bar.foo.example | YES                   |
+-----------------+-----------------------------------------------+

      Figure 6: Examples for NAI Realm vs. Certificate Matching

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 new AAA transactions, and per service (i.e., distinct discovery is needed for Authentication, Accounting, and Dynamic Authorization). It applies where a RADIUS entity that acts as a forwarding server for one or more realms receives a request with a realm it is not authoritative for, and where 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. the first accounting ticket for a user session 🧾.

c. the first RADIUS DynAuth packet for a user session ✨.

3.2. Configuration Variables ✨

okay so the algorithm has a few timeout variables ⏰ and they get names here with reasonable default values πŸŽ€. if you wanna deviate from the defaults, make sure you understand what the changes actually imply πŸ’… no vibes-only config changes, bestie.

  • 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 πŸ¦‹

these are the words the rest of the section leans on, so let's get them straight 🫢

Positive DNS response: a response that contains the RR that was queried for. βœ…

Negative DNS response: a response that does not contain the RR that was queried for, but does contain an SOA record along with a TTL indicating the cache duration for this negative result. πŸ™ˆ

DNS Error: where the algorithm says "name resolution returns with an error", this shall mean either the DNS request timed out, or it's a DNS response that is neither a positive nor a negative response (for example, SERVFAIL). πŸ’€

Effective TTL: the validity period for discovered RADIUS/TLS target hosts, calculated like this:

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 RFC's "A" fallback as defined in the "Usage Rules" section, final "else" clause. 🌸

Greedy result evaluation: the NAPTR to SRV/A/AAAA resolution may lead to a tree of results, whose leafs are the IP addresses to contact. the branches of the tree are ordered according to their order/preference DNS properties. an implementation is executing greedy result evaluation if it uses a depth-first search in the tree along the highest order results, attempts to connect to the corresponding resulting IP addresses, and only backtracks to other branches if the higher ordered results did not end in successful connection attempts. this is giving "always check the VIP first, only go to the back of the line if VIP is full" πŸ‘‘

3.4. Realm to RADIUS Server Resolution Algorithm 🌈

3.4.1. Input

okay so for RADIUS Authentication and RADIUS Accounting server discovery, the input I to the algorithm is the RADIUS User-Name attribute with content of the form "user@realm". the literal "@" sign is the separator between a local user identifier within a realm and its realm. 🧚

using multiple literal "@" signs in a User-Name is strongly discouraged, but if they're there anyway, the last "@" sign is the separator, and all the earlier ones count as part of the local user identifier. chaotic, but that's the rule πŸ’€

for RADIUS DynAuth server discovery, the input I to the algorithm is the domain name of the operator of a RADIUS realm, as communicated during user authentication using the Operator-Name attribute ([RFC5580], Section 4.1). only Operator-Name values with the namespace "1" are supported by this algorithm. the input is the actual domain name, preceded with an "@" (but without the "1" namespace identifier byte of that attribute). ✨

Note well: the attribute User-Name is defined to contain UTF-8 text. in practice, the content may or may not be UTF-8. even if it's UTF-8, it may or may not map to a domain name in the realm part. Implementors MUST take possible conversion error paths into consideration when parsing incoming User-Name attributes. this document describes server discovery only for well-formed realms that map to DNS domain names in UTF-8 encoding. the result for all other possible contents of User-Name is unspecified, and that includes, but is not limited to:

  • Usage of separators other than "@".
  • Encoding of User-Name in local encodings.
  • UTF-8 realms that fail the conversion rules as per [RFC5891].
  • UTF-8 realms that end with a "." ("dot") character.

about that last bullet, the "trailing dot": special precautions should be taken to avoid problems when resolving servers with the algorithm below. they may resolve to a RADIUS server even if the peer RADIUS server is only configured to handle the realm without the trailing dot. if that RADIUS server again uses NAI discovery to determine the authoritative server, the server will forward the request to localhost, resulting in a tight endless loop. πŸ™ˆπŸ”

3.4.2. Output

the output O of the algorithm is a two-tuple, made of:

  • O-1) a set of tuples {hostname; port; protocol; order/preference; Effective TTL}. the set can be empty.
  • O-2) an integer.

if the set in the first part of the tuple is empty, the integer holds the Effective TTL for the backoff timeout. if the set is not empty, the integer is set to 0 (and not used). πŸŽ€

3.4.3. Algorithm

the algorithm to determine the RADIUS server to contact goes like this, bestie πŸ“‹

  1. Determine P = (position of last "@" character) in I.
  2. Generate R = (substring from P+1 to end of I).
  3. Modify R according to agreed consortium procedures if applicable.
  4. Convert R to a representation usable by the name resolution library if needed.
  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", Section 3.4.5, 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 tags "aaa+auth", "aaa+acct", and "aaa+dynauth" as appropriate. Keep note of the protocol tag and remaining TTL of each of the discovered NAPTR records.
  8. If no records are found, continue at step 13.
  9. For the extracted NAPTRs, perform successive resolution as defined in [RFC3958], Section 2.2. An implementation MAY use greedy result evaluation according to the NAPTR order/preference fields (i.e., can execute the subsequent steps of this algorithm for the highest-order entry in the set of results and only look up the remainder of the set if necessary).
  10. If the set of hostnames is empty, O-1 = { empty set }, O-2 = BACKOFF_TIME, and terminate.
  11. O' = (set of {hostname; port; protocol; order/preference; Effective TTL (all DNS TTLs that led to this hostname)} for all terminal lookup results).
  12. Proceed with step 18.
  13. Generate R' = (prefix R with "_radiustls._tcp." and/or "_radiustls._udp.").
  14. Using the host's name resolution library, perform SRV lookup with R' as label (see "Delay Considerations", Section 3.4.5, below).
  15. If name resolution returns with error, O-1 = { empty set }, O-2 = BACKOFF_TIME, and terminate.
  16. If the result is a negative DNS response, O-1 = { empty set }, O-2 = min { O-2, Effective TTL (TTL value of the SOA record) }, and terminate.
  17. O' = (set of {hostname; port; protocol; 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; protocol; 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 that triggered dynamic discovery was received on {IP address; port}. If yes, O-1 = { empty set }, O-2 = BACKOFF_TIME, log error, and terminate (see next section for a rationale). If no, O is the result of dynamic discovery; terminate.
  20. O-1 = { empty set }, O-2 = BACKOFF_TIME, log error, and terminate.

3.4.4. Validity of Results

the discovery algorithm is used by servers that don't have enough configuration info to process an incoming request on their own. ✨ if the discovery result contains the server's own listening address (IP address and port), there's a potential for an endless forwarding loop. if the listening address is the DNS result with the highest priority, the server will enter a tight loop (it would forward the request to itself, triggering dynamic discovery again, forever). if the address has a lower priority in the set of results, there's 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 these loops can happen is that the server running the discovery algorithm is seriously misconfigured, in that it doesn't recognize the request as one it's supposed to process itself. RADIUS has no built-in loop detection, so any such loops would stay undetected. 😭 so, if step 18 of the algorithm discovers such a possible-loop situation, the algorithm should be aborted and an error logged. note that this safeguard does not provide perfect protection against routing loops. one reason a loop might still happen is that a subsequent hop has a statically configured next hop that leads back to an earlier host in the loop. another is if the algorithm was run with greedy result evaluation, and the server's own address was in a lower-priority branch of the result set that was never retrieved from DNS, so it can't be detected.

after executing the above algorithm, the RADIUS server establishes a connection to a home server from the result set. this connection can potentially stay open for an indefinite amount of time. that clashes with the possibility of device and network configurations changing on the receiving end. typically, TTL values for records in the name resolution system are used to indicate how long it's safe to rely on the results of name resolution. if these TTLs are very low, connection thrashing becomes possible, and the Effective TTL is there to mitigate that risk. πŸ¦‹

when a connection is open and the smallest Effective TTL value learned during discovery of the server has not expired, subsequent new user sessions for the realm that corresponds to that open connection SHOULD reuse the existing connection, and SHOULD NOT re-execute the discovery algorithm or open a new connection. to allow for a change of configuration, a RADIUS server SHOULD re-execute the discovery algorithm after the Effective TTL associated with this connection has expired. the server SHOULD keep the session open during this reassessment, to avoid closing and immediately reopening the connection should the result not have changed. πŸ’œ

should the algorithm above terminate with O-1 = { empty set }, the RADIUS server SHOULD NOT attempt another execution of this algorithm for the same target realm before the timeout O-2 has passed. ⏳🫢

3.4.5. Delay Considerations ⏰

okay bestie, timing is literally everything 😭 The host's name resolution library might need to reach out to outside entities to get the answer (like authoritative name servers for a domain). And since the NAI discovery algorithm runs on user input that nobody controls, the server doing discovery has zero say over where those lookups end up πŸ™ˆ If those outside entities are misconfigured or unreachable, the algorithm could take an unacceptably long time to finish, and that is NOT it πŸ’€ Lots of RADIUS implementations time out after five seconds of delay between Request and Response. Waiting around until the resolver finally signals its own timeout is not useful πŸ™„, so the algorithm controls its own clock with TIMER ⏱️ Also, execution of the NAI discovery algorithm SHOULD be non-blocking, meaning other requests can still get processed in parallel while the algorithm is running πŸ”₯ main character multitasking ✨

3.4.6. Example 🧚

Okay, let's walk through a full example, it's giving detective energy πŸ•΅οΈβ€β™€οΈ

Assume a user from the Technical University of Munich, Germany, has a RADIUS User-Name of "foobar@tu-m[U+00FC]nchen.example". πŸŽ€

The name resolution library on the RADIUS forwarding server does not have the realm tu-m[U+00FC]nchen.example in its forwarding configuration, but it uses DNS for name resolution and has been configured to use dynamic discovery to find RADIUS servers. It's IPv6 enabled and prefers AAAA records over A records πŸ’œ It's listening for incoming RADIUS/TLS requests on 192.0.2.1, TCP/2083.

The configuration variables might be:

DNS_TIMEOUT = 3 seconds
MIN_EFF_TTL = 60 seconds
BACKOFF_TIME = 3600 seconds

If DNS contains the following records:

xn--tu-mnchen-t9a.example.  IN NAPTR 50 50 "s"
"aaa+auth:radius.tls.tcp" "" _myradius._tcp.xn--tu-mnchen-
t9a.example.

xn--tu-mnchen-t9a.example.  IN NAPTR 50 50 "s"
"fooservice:bar.dccp" "" _abc123._def.xn--tu-mnchen-t9a.example.

_myradius._tcp.xn--tu-mnchen-t9a.example.  IN SRV 0 10 2083
radsecserver.xn--tu-mnchen-t9a.example.

_myradius._tcp.xn--tu-mnchen-t9a.example.  IN SRV 0 20 2083
backupserver.xn--tu-mnchen-t9a.example.

radsecserver.xn--tu-mnchen-t9a.example.  IN AAAA
2001:0DB8::202:44ff:fe0a:f704

radsecserver.xn--tu-mnchen-t9a.example.  IN A 192.0.2.3

backupserver.xn--tu-mnchen-t9a.example.  IN A 192.0.2.7

Then the algorithm runs like this, with I = "foobar@tu-m[U+00FC]nchen.example" and no consortium name mangling in use πŸ”βœ¨

1.   P = 7

2.   R = "tu-m[U+00FC]nchen.example"

3.   NOOP

4.   Name resolution library converts R to xn--tu-mnchen-t9a.example

5.   TIMER starts.

6.   Result:

        (TTL = 47) 50 50 "s" "aaa+auth:radius.tls.tcp" ""
        _myradius._tcp.xn--tu-mnchen-t9a.example.

        (TTL = 522) 50 50 "s" "fooservice:bar.dccp" ""
        _abc123._def.xn--tu-mnchen-t9a.example.

7.   Result:

        (TTL = 47) 50 50 "s" "aaa+auth:radius.tls.tcp" ""
        _myradius._tcp.xn--tu-mnchen-t9a.example.

8.   NOOP

9.   Successive resolution performs SRV query for label
     _myradius._tcp.xn--tu-mnchen-t9a.example, which results in

        (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; RADIUS/TLS; 10;
        60),

        (backup.xn--tu-mnchen-t9a.example.; 2083; RADIUS/TLS; 20; 60)

     } // minimum TTL is 47, upped to MIN_EFF_TTL

12.  Continuing at 18.

13.  (not executed)

14.  (not executed)

15.  (not executed)

16.  (not executed)

17.  (not executed)
18.  O-1 = {

        (2001:0DB8::202:44ff:fe0a:f704; 2083; RADIUS/TLS; 10; 60),

        (192.0.2.7; 2083; RADIUS/TLS; 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 preference to [2001:0DB8::202:44ff:fe0a:f704]:2083 using the RADIUS/TLS protocol πŸ¦‹πŸ’–


4. Operations and Manageability Considerations πŸ› οΈ

okay so the discovery algorithm in this document has several options, and the big ones are: using NAPTR vs. SRV; how to figure out whether a contacted server is authorized for a given realm; and which trust anchors count as trustworthy for setting up the RADIUS conversation 🧐

Random parties that don't agree on the same set of options may not be able to interoperate. However, global interoperability is not the goal of this document, so no stress πŸ’…

Discovery as described here becomes important inside a roaming consortium, which is a group that has set up roaming agreements with the other partners 🀝 Those agreements need way more than a technical way to find servers. There's a whole pile of administrative and contractual stuff going on too (service contracts, back-office compensations, procedures, etc.) πŸ“‹πŸ’€

A roaming consortium's roaming agreement must include a profile of which choice points in this document to use. So as long as the consortium settles on one deployment profile, they'll be able to interoperate based on that choice. That per-consortium interoperability is the intended scope of this document πŸ‘‘βœ¨

5. Security Considerations πŸ”πŸ˜€

Okay, this section is serious, so buckle up 🚨 When using DNS without DNSSEC security extensions and validation for all of the replies to NAPTR, SRV, and A/AAAA requests as described in Section 3, the result of the discovery process can not be trusted πŸ’€ Even if it can be trusted (aka DNSSEC is in use), actual authorization of the discovered server to provide service for the given realm still needs to be verified. A mechanism from Section 2.1.1.3 or equivalent MUST be used to verify authorization πŸ”₯

The algorithm has a configurable completion timeout, DNS_TIMEOUT, which defaults 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 that take a very long time to reply (for example, because of a particularly byzantine tree structure or artificial delays in responses) 😱

To mitigate this DoS vector, implementations SHOULD consider rate limiting either the number of new executions of the discovery algorithm as a whole, or the number 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 trying to resolve DNS records even after DNS_TIMEOUT has passed, since a subsequent request for the same realm might benefit from the results anyway 🧠 The amount of time 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 πŸ™ˆ

With dynamic discovery enabled for a RADIUS server, and depending on the deployment scenario, the server may need to open up its target IP address and port to the entire Internet, because arbitrary clients may discover it as a target for their authentication requests 🌍 If those clients are not part of the roaming consortium, the RADIUS/TLS connection setup phase will fail (which is intended), but the computational cost of the connection attempt is still significant πŸ’Έ

When the port for a TLS-based service is open, the RADIUS server shares all the typical attack vectors for services based on TLS (such as HTTPS and SMTPS) 😡 Deployments of RADIUS/TLS with dynamic discovery should consider these attack vectors and take appropriate countermeasures, for example blacklisting known bad IPs on a firewall, rate limiting new connection attempts, etc. 🧱πŸ”₯

6. Privacy Considerations πŸ”’

okay bestie, privacy is a big deal here, so let's talk about it. The classic RADIUS setup (known, preconfigured peers, shared-secret security, and mostly plaintext) and this new dynamic discovery model (peer discovery with DNS, PKI security, and packet confidentiality) are honestly very different when it comes to keeping end users' info private while they try to authenticate to a RADIUS server. πŸ‘€

With classic RADIUS, traffic in big environments gets bundled up by statically configured clearinghouses. The packets going to those clearinghouses, and the replies coming back, are mostly unprotected. So, lowkey concerning:

  • Anyone on the IP path can read stuff. All intermediate IP hops can read most of the packet payload in clear text, including the User-Name and Calling-Station-Id attributes, and they can see which client sent a packet to which clearinghouse. That means any passive observer on the IP path can build mobility profiles. 😭
  • The clearinghouse is a privacy risk too. Because there's a central clearinghouse, it can easily build those same mobility profiles. Whether it's trusted not to, is up to things like contracts, and those may or may not be strong enough. πŸ™ˆ
  • The clearinghouse can see the secrets. The clearinghouse is a RADIUS intermediate holding a valid shared secret, so it can observe and record even the security-critical RADIUS attributes, like User-Password. One way to lower this risk is to pick authentication payloads that are cryptographically secured and don't use the User-Password attribute, such as certain EAP types. πŸ›‘οΈ
  • Nobody outside the path learns anything extra. There's no additional information disclosure to parties outside the IP path between the RADIUS client and server. In particular, no DNS servers learn about the realms of ongoing authentications. πŸ™Œ

Now with RADIUS and dynamic discovery, the vibe shifts:

  • Clients can skip the middleman. This protocol lets RADIUS clients find the RADIUS home server and connect to it directly. That can get rid of clearinghouses forwarding requests, and it also stops the clearinghouse from aggregating the user information flowing through it. Still, there are reasons a clearinghouse might stick around. One is to act as a gateway for multiple backends in a company. Another is a requirement to sanitize RADIUS datagrams, like filtering attributes or tagging requests with new attributes. 🧹
  • Fewer proxies, fewer prying eyes. Even where intermediate proxies are still used for reasons unrelated to dynamic discovery, the number of them can go down by removing the ones that only exist for pure request routing. That means fewer entities can inspect the RADIUS traffic. ✨
  • DNS sees the realm. RADIUS clients that use dynamic discovery have to query the Domain Name System and use a user's realm name as the query label. A passive observer between the RADIUS client and the DNS server(s) being queried can learn that a user of that specific realm tried to authenticate at that RADIUS client at a certain time. That may or may not be enough for the observer to build a mobility profile. During recursive DNS resolution, a fair number of DNS servers and the IP hops in between get to learn that info too. Not every authentication triggers DNS lookups, though, so there's no one-to-one relation between leaked realm information and the number of authentications for that realm. 🌐
  • Not every hop is protected. Dynamic discovery works on a RADIUS hop-by-hop basis, so there's no guarantee the RADIUS payload won't be sent between RADIUS systems that don't use this algorithm and might use other transports, such as RADIUS/UDP. On those hops, the enhanced privacy is jeopardized. πŸ’”
In summary, the tea is this: with classic RADIUS, a few intermediate entities learn very detailed data about every ongoing authentication. With dynamic discovery, many entities learn only very little about recently authenticated realms. 🫢

7. IANA Considerations 🌸

okay so here's what IANA did for us. Per this document, IANA added the following entries to existing registries:

  • S-NAPTR Application Service Tags registry
    • aaa+auth
    • aaa+acct
    • aaa+dynauth
  • S-NAPTR Application Protocol Tags registry
    • radius.tls.tcp
    • radius.dtls.udp

This document also reserves the use of the radiustls and radiusdtls service names. The registration info, following Section 8.1.1 of [RFC6335], looks like this:

   Service Name: radiustls; radiusdtls

   Transport Protocols: TCP (for radiustls), UDP (for radiusdtls)

   Assignee: IESG <iesg@ietf.org>

   Contact: IETF Chair <chair@ietf.org>

   Description: Authentication, Accounting, and Dynamic Authorization
   via the RADIUS protocol.  These service names are used to
   construct the SRV service labels "_radiustls" and "_radiusdtls"
   for discovery of RADIUS/TLS and RADIUS/DTLS servers, respectively.

   Reference: RFC 7585

This specification uses the SRV protocol identifiers _tcp and _udp. They're mentioned as early as [RFC2782], but they don't seem to be assigned in an actual registry. Since other protocols use them widely too, this specification doesn't request a new registry called "RADIUS/TLS SRV Protocol Registry." It just keeps using these tags implicitly. πŸ’…

Per this document, a number of Object Identifiers have been assigned, and they're now under IANA's control following [RFC7299]. IANA assigned the following identifiers:

   85 has been assigned from the "SMI Security for PKIX Module
   Identifier" registry.  The description is id-mod-nai-realm-08.

   8 has been assigned from the "SMI Security for PKIX Other Name
   Forms" registry.  The description is id-on-naiRealm.

8. References πŸ“š

8.1. Normative References

[RFC2119]  Bradner, S., "Key words for use in RFCs to Indicate
           Requirement Levels", BCP 14, RFC 2119,
           DOI 10.17487/RFC2119, March 1997,
           <http://www.rfc-editor.org/info/rfc2119>.

[RFC2782]  Gulbrandsen, A., Vixie, P., and L. Esibov, "A DNS RR for
           specifying the location of services (DNS SRV)", RFC 2782,
           DOI 10.17487/RFC2782, February 2000,
           <http://www.rfc-editor.org/info/rfc2782>.

[RFC2865]  Rigney, C., Willens, S., Rubens, A., and W. Simpson,
           "Remote Authentication Dial In User Service (RADIUS)",
           RFC 2865, DOI 10.17487/RFC2865, June 2000,
           <http://www.rfc-editor.org/info/rfc2865>.

[RFC2866]  Rigney, C., "RADIUS Accounting", RFC 2866,
           DOI 10.17487/RFC2866, June 2000,
           <http://www.rfc-editor.org/info/rfc2866>.

[RFC3958]  Daigle, L. and A. Newton, "Domain-Based Application
           Service Location Using SRV RRs and the Dynamic Delegation
           Discovery Service (DDDS)", RFC 3958, DOI 10.17487/RFC3958,
           January 2005, <http://www.rfc-editor.org/info/rfc3958>.

[RFC5176]  Chiba, M., Dommety, G., Eklund, M., Mitton, D., and B.
           Aboba, "Dynamic Authorization Extensions to Remote
           Authentication Dial In User Service (RADIUS)", RFC 5176,
           DOI 10.17487/RFC5176, January 2008,
           <http://www.rfc-editor.org/info/rfc5176>.

[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, DOI 10.17487/RFC5280, May 2008,
           <http://www.rfc-editor.org/info/rfc5280>.

[RFC5580]  Tschofenig, H., Ed., Adrangi, F., Jones, M., Lior, A., and
           B. Aboba, "Carrying Location Objects in RADIUS and
           Diameter", RFC 5580, DOI 10.17487/RFC5580, August 2009,
           <http://www.rfc-editor.org/info/rfc5580>.

[RFC5891]  Klensin, J., "Internationalized Domain Names in
           Applications (IDNA): Protocol", RFC 5891,
           DOI 10.17487/RFC5891, August 2010,
           <http://www.rfc-editor.org/info/rfc5891>.

[RFC6614]  Winter, S., McCauley, M., Venaas, S., and K. Wierenga,
           "Transport Layer Security (TLS) Encryption for RADIUS",
           RFC 6614, DOI 10.17487/RFC6614, May 2012,
           <http://www.rfc-editor.org/info/rfc6614>.

[RFC7360]  DeKok, A., "Datagram Transport Layer Security (DTLS) as a
           Transport Layer for RADIUS", RFC 7360,
           DOI 10.17487/RFC7360, September 2014,
           <http://www.rfc-editor.org/info/rfc7360>.

[RFC7542]  DeKok, A., "The Network Access Identifier", RFC 7542,
           DOI 10.17487/RFC7542, May 2015,
           <http://www.rfc-editor.org/info/rfc7542>.

8.2. Informative References

[RFC4017]  Stanley, D., Walker, J., and B. Aboba, "Extensible
           Authentication Protocol (EAP) Method Requirements for
           Wireless LANs", RFC 4017, DOI 10.17487/RFC4017, March
           2005, <http://www.rfc-editor.org/info/rfc4017>.

[RFC6335]  Cotton, M., Eggert, L., Touch, J., Westerlund, M., and S.
           Cheshire, "Internet Assigned Numbers Authority (IANA)
           Procedures for the Management of the Service Name and
           Transport Protocol Port Number Registry", BCP 165,
           RFC 6335, DOI 10.17487/RFC6335, August 2011,
           <http://www.rfc-editor.org/info/rfc6335>.

[RFC6733]  Fajardo, V., Ed., Arkko, J., Loughney, J., and G. Zorn,
           Ed., "Diameter Base Protocol", RFC 6733,
           DOI 10.17487/RFC6733, October 2012,
           <http://www.rfc-editor.org/info/rfc6733>.

[RFC7299]  Housley, R., "Object Identifier Registry for the PKIX
           Working Group", RFC 7299, DOI 10.17487/RFC7299, July 2014,
           <http://www.rfc-editor.org/info/rfc7299>.

[RFC7593]  Wierenga, K., Winter, S., and T. Wolniewicz, "The eduroam
           Architecture for Network Roaming", RFC 7593,
           DOI 10.17487/RFC7593, September 2015,
           <http://www.rfc-editor.org/info/rfc7593>.

Appendix A. ASN.1 Syntax of NAIRealm 🧩

PKIXNaiRealm08 {iso(1) identified-organization(3) dod(6)
     internet(1) security(5) mechanisms(5) pkix(7) id-mod(0)
     id-mod-nai-realm-08(85) }

 DEFINITIONS EXPLICIT TAGS ::=

 BEGIN

 -- EXPORTS ALL --

 IMPORTS

    id-pkix
    FROM PKIX1Explicit-2009
        {iso(1) identified-organization(3) dod(6) internet(1)
         security(5) mechanisms(5) pkix(7) id-mod(0)
         id-mod-pkix1-explicit-02(51)}
           -- from RFCs 5280 and 5912

    OTHER-NAME
    FROM PKIX1Implicit-2009
       {iso(1) identified-organization(3) dod(6) internet(1) security(5)
       mechanisms(5) pkix(7) id-mod(0) id-mod-pkix1-implicit-02(59)}
             -- from RFCs 5280 and 5912
 ;


 -- Service Name Object Identifier

 id-on   OBJECT IDENTIFIER ::= { id-pkix 8 }

 id-on-naiRealm OBJECT IDENTIFIER ::= { id-on 8 }

 -- Service Name

 naiRealm OTHER-NAME ::= { NAIRealm IDENTIFIED BY { id-on-naiRealm }}

 ub-naiRealm-length INTEGER ::= 255

 NAIRealm ::= UTF8String (SIZE (1..ub-naiRealm-length))

 END

Authors' Addresses πŸ’Œ

Stefan Winter
Fondation RESTENA
6, rue Richard Coudenhove-Kalergi
Luxembourg  1359
Luxembourg

Phone: +352 424409 1
Fax:   +352 422473
Email: stefan.winter@restena.lu
URI:   http://www.restena.lu


Mike McCauley
AirSpayce Pty Ltd
9 Bulbul Place
Currumbin Waters  QLD 4223
Australia

Phone: +61 7 5598 7474
Email: mikem@airspayce.com
URI:   http://www.airspayce.com
πŸ“¦ where this page comes from