rfc9765.original | rfc9765.txt | |||
---|---|---|---|---|
RADEXT Working Group A. DeKok | Internet Engineering Task Force (IETF) A. DeKok | |||
Internet-Draft FreeRADIUS | Request for Comments: 9765 FreeRADIUS | |||
Updates: 2865, 2866, 5176, 6613, 6614, 7360 (if 18 October 2024 | Updates: 2865, 2866, 5176, 6613, 6614, 7360 April 2025 | |||
approved) | Category: Experimental | |||
Intended status: Experimental | ISSN: 2070-1721 | |||
Expires: 21 April 2025 | ||||
RADIUS/1.1, Leveraging ALPN to remove MD5 | RADIUS/1.1: Leveraging Application-Layer Protocol Negotiation (ALPN) to | |||
draft-ietf-radext-radiusv11-11 | Remove MD5 | |||
Abstract | Abstract | |||
This document defines Application-Layer Protocol Negotiation | This document defines Application-Layer Protocol Negotiation (ALPN) | |||
Extensions for use with RADIUS/TLS and RADIUS/DTLS. These extensions | extensions for use with RADIUS/TLS and RADIUS/DTLS. These extensions | |||
permit the negotiation of an application protocol variant of RADIUS, | permit the negotiation of an application protocol variant of RADIUS | |||
called "RADIUS/1.1". No changes are made to RADIUS/UDP or RADIUS/ | called "RADIUS/1.1". No changes are made to RADIUS/UDP or RADIUS/ | |||
TCP. The extensions allow the negotiation of a transport profile | TCP. The extensions allow the negotiation of a transport profile | |||
where the RADIUS shared secret is no longer used, and all MD5-based | where the RADIUS shared secret is no longer used, and all MD5-based | |||
packet authentication and attribute obfuscation methods are removed. | packet authentication and attribute obfuscation methods are removed. | |||
This document updates RFC2865, RFC2866, RFC5176, RFC6613, RFC6614, | This document updates RFCs 2865, 2866, 5176, 6613, 6614, and 7360. | |||
and RFC 7360. | ||||
About This Document | ||||
This note is to be removed before publishing as an RFC. | ||||
Status information for this document may be found at | ||||
https://datatracker.ietf.org/doc/draft-ietf-radext-radiusv11/. | ||||
Discussion of this document takes place on the RADEXT Working Group | ||||
mailing list (mailto:radext@ietf.org), which is archived at | ||||
https://mailarchive.ietf.org/arch/browse/radext/. Subscribe at | ||||
https://www.ietf.org/mailman/listinfo/radext/. | ||||
Source for this draft and an issue tracker can be found at | ||||
https://github.com/radext-wg/draft-ietf-radext-radiusv11.git. | ||||
Status of This Memo | Status of This Memo | |||
This Internet-Draft is submitted in full conformance with the | This document is not an Internet Standards Track specification; it is | |||
provisions of BCP 78 and BCP 79. | published for examination, experimental implementation, and | |||
evaluation. | ||||
Internet-Drafts are working documents of the Internet Engineering | ||||
Task Force (IETF). Note that other groups may also distribute | ||||
working documents as Internet-Drafts. The list of current Internet- | ||||
Drafts is at https://datatracker.ietf.org/drafts/current/. | ||||
Internet-Drafts are draft documents valid for a maximum of six months | This document defines an Experimental Protocol for the Internet | |||
and may be updated, replaced, or obsoleted by other documents at any | community. This document is a product of the Internet Engineering | |||
time. It is inappropriate to use Internet-Drafts as reference | Task Force (IETF). It represents the consensus of the IETF | |||
material or to cite them other than as "work in progress." | community. It has received public review and has been approved for | |||
publication by the Internet Engineering Steering Group (IESG). Not | ||||
all documents approved by the IESG are candidates for any level of | ||||
Internet Standard; see Section 2 of RFC 7841. | ||||
This Internet-Draft will expire on 21 April 2025. | Information about the current status of this document, any errata, | |||
and how to provide feedback on it may be obtained at | ||||
https://www.rfc-editor.org/info/rfc9765. | ||||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2024 IETF Trust and the persons identified as the | Copyright (c) 2025 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 (https://trustee.ietf.org/ | Provisions Relating to IETF Documents | |||
license-info) in effect on the date of publication of this document. | (https://trustee.ietf.org/license-info) in effect on the date of | |||
Please review these documents carefully, as they describe your rights | publication of this document. Please review these documents | |||
and restrictions with respect to this document. Code Components | carefully, as they describe your rights and restrictions with respect | |||
extracted from this document must include Revised BSD License text as | to this document. Code Components extracted from this document must | |||
described in Section 4.e of the Trust Legal Provisions and are | include Revised BSD License text as described in Section 4.e of the | |||
provided without warranty as described in the Revised BSD License. | Trust Legal Provisions and are provided without warranty as described | |||
in the Revised BSD License. | ||||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction | |||
2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 7 | 2. Terminology | |||
3. The RADIUS/1.1 Transport profile for RADIUS . . . . . . . . . 8 | 3. The RADIUS/1.1 Transport Profile for RADIUS | |||
3.1. ALPN Name for RADIUS/1.1 . . . . . . . . . . . . . . . . 8 | 3.1. ALPN Name for RADIUS/1.1 | |||
3.2. Operation of ALPN . . . . . . . . . . . . . . . . . . . . 9 | 3.2. Operation of ALPN | |||
3.3. Configuration of ALPN for RADIUS/1.1 . . . . . . . . . . 10 | 3.3. Configuration of ALPN for RADIUS/1.1 | |||
3.3.1. Using Protocol-Error for Signaling ALPN Failure . . . 14 | 3.3.1. Using Protocol-Error for Signaling ALPN Failure | |||
3.3.2. Tabular Summary . . . . . . . . . . . . . . . . . . . 14 | 3.3.2. Tabular Summary | |||
3.4. Miscellaneous Items . . . . . . . . . . . . . . . . . . . 16 | 3.4. Miscellaneous Items | |||
3.5. Session Resumption . . . . . . . . . . . . . . . . . . . 16 | 3.5. Session Resumption | |||
4. RADIUS/1.1 Packet and Attribute Formats . . . . . . . . . . . 17 | 4. RADIUS/1.1 Packet and Attribute Formats | |||
4.1. RADIUS/1.1 Packet Format . . . . . . . . . . . . . . . . 17 | 4.1. RADIUS/1.1 Packet Format | |||
4.2. The Token Field . . . . . . . . . . . . . . . . . . . . . 19 | 4.2. The Token Field | |||
4.2.1. Sending Packets . . . . . . . . . . . . . . . . . . . 19 | 4.2.1. Sending Packets | |||
4.2.2. Receiving Packets . . . . . . . . . . . . . . . . . . 21 | 4.2.2. Receiving Packets | |||
5. Attribute handling . . . . . . . . . . . . . . . . . . . . . 22 | 5. Attribute Handling | |||
5.1. Obfuscated Attributes . . . . . . . . . . . . . . . . . . 22 | 5.1. Obfuscated Attributes | |||
5.1.1. User-Password . . . . . . . . . . . . . . . . . . . . 23 | 5.1.1. User-Password | |||
5.1.2. CHAP-Challenge . . . . . . . . . . . . . . . . . . . 23 | 5.1.2. CHAP-Challenge | |||
5.1.3. Tunnel-Password . . . . . . . . . . . . . . . . . . . 24 | 5.1.3. Tunnel-Password | |||
5.1.4. Vendor-Specific Attributes . . . . . . . . . . . . . 24 | 5.1.4. Vendor-Specific Attributes | |||
5.2. Message-Authenticator . . . . . . . . . . . . . . . . . . 24 | 5.2. Message-Authenticator | |||
5.3. Message-Authentication-Code . . . . . . . . . . . . . . . 26 | 5.3. Message-Authentication-Code | |||
5.4. CHAP, MS-CHAP, etc. . . . . . . . . . . . . . . . . . . . 26 | 5.4. CHAP, MS-CHAP, and Similar Attributes | |||
5.5. Original-Packet-Code . . . . . . . . . . . . . . . . . . 26 | 5.5. Original-Packet-Code | |||
6. Other Considerations When Using ALPN | ||||
6. Other Considerations when using ALPN . . . . . . . . . . . . 27 | 6.1. Protocol-Error | |||
6.1. Protocol-Error . . . . . . . . . . . . . . . . . . . . . 27 | 6.2. Status-Server | |||
6.2. Status-Server . . . . . . . . . . . . . . . . . . . . . . 29 | 6.3. Proxies | |||
6.3. Proxies . . . . . . . . . . . . . . . . . . . . . . . . . 29 | 7. Other RADIUS Considerations | |||
7. Other RADIUS Considerations . . . . . . . . . . . . . . . . . 29 | 7.1. Crypto-Agility | |||
7.1. Crypto-Agility . . . . . . . . . . . . . . . . . . . . . 30 | 7.2. Error-Cause Attribute | |||
7.2. Error-Cause Attribute . . . . . . . . . . . . . . . . . . 30 | 7.3. Future Standards | |||
7.3. Future Standards . . . . . . . . . . . . . . . . . . . . 31 | 8. Privacy Considerations | |||
8. Implementation Status . . . . . . . . . . . . . . . . . . . . 33 | 9. Security Considerations | |||
9. Privacy Considerations . . . . . . . . . . . . . . . . . . . 33 | 10. IANA Considerations | |||
10. Security Considerations . . . . . . . . . . . . . . . . . . . 33 | 11. References | |||
11. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 34 | 11.1. Normative References | |||
12. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 35 | 11.2. Informative References | |||
13. Changelog . . . . . . . . . . . . . . . . . . . . . . . . . . 35 | Acknowledgments | |||
14. References . . . . . . . . . . . . . . . . . . . . . . . . . 38 | Author's Address | |||
14.1. Normative References . . . . . . . . . . . . . . . . . . 38 | ||||
14.2. Informative References . . . . . . . . . . . . . . . . . 39 | ||||
Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 41 | ||||
1. Introduction | 1. Introduction | |||
The RADIUS protocol [RFC2865] uses MD5 [RFC1321] to authenticate | The RADIUS protocol [RFC2865] uses MD5 [RFC1321] to authenticate | |||
packets, and to obfuscate certain attributes. Additional transport | packets and to obfuscate certain attributes. Additional transport | |||
protocols were defined for TCP ([RFC6613]), TLS ([RFC6614]), and DTLS | protocols were defined for TCP [RFC6613], TLS [RFC6614], and DTLS | |||
([RFC7360]). However, those transport protocols still use MD5 to | [RFC7360]. However, those transport protocols still use MD5 to | |||
authenticate individual packets. That is, the shared secret was used | authenticate individual packets. That is, the shared secret was used | |||
along with MD5, even when the RADIUS packets were being transported | along with MD5, even when the RADIUS packets were being transported | |||
in (D)TLS. At the time, the consensus of the RADEXT working group | in (D)TLS. At the time, the consensus of the RADEXT Working Group | |||
was that this continued use of MD5 was acceptable. TLS was seen as a | was that this continued use of MD5 was acceptable. TLS was seen as a | |||
simple "wrapper" around RADIUS, while using a fixed shared secret. | simple "wrapper" around RADIUS, while using a fixed shared secret. | |||
The intention at the time was to allow the use of (D)TLS while making | The intention at the time was to allow the use of (D)TLS while making | |||
essentially no changes to the basic RADIUS encoding, decoding, | essentially no changes to the basic RADIUS encoding, decoding, | |||
authentication, and packet validation. | authentication, and packet validation. | |||
Issues of MD5 security have been known for decades, most most notably | Issues of MD5 security have been known for decades, most notably in | |||
in [RFC6151], and in [RFC6421], Section 3, among others. The | [RFC6151] and in Section 3 of [RFC6421], among others. The reliance | |||
reliance on MD5 for security makes it impossible to use RADIUS in | on MD5 for security makes it impossible to use RADIUS in secure | |||
secure systems which forbid the use of digest algorithms with known | systems that forbid the use of digest algorithms with known | |||
vunerabilities. For example, FIPS-140 forbids systems from relying | vulnerabilities. For example, FIPS 140 forbids systems from relying | |||
on insecure cryptographic methods for security. | on insecure cryptographic methods for security [FIPS-140-3]. | |||
While the use of MD5 in RADIUS/TLS is not known to be insecure, it | While the use of MD5 in RADIUS/TLS has not been proven to be | |||
can be difficult for individual organizations to perform | insecure, it has not been proven to be secure. This gap means that | |||
cryprographic analyses of the protocols that they use. It is much | it is difficult to use RADIUS in organizations that require the use | |||
simpler and more practical to simply verify that there insecure | of systems that have proven security. Those organizations tend to | |||
digests such as MD5 are not used anywhere in the system. Then by | simply ban the use of insecure digests such as MD5 entirely, even if | |||
definition, the systems are at least not known to be insecure. | the use of MD5 has no known security impact. While the resulting | |||
system might still not be secure, it at least does not contain any | ||||
known insecurities. | ||||
In addition, the use of MD5 in RADIUS/TLS and RADIUS/DLTS adds no | In addition, the use of MD5 in RADIUS/TLS and RADIUS/DLTS adds no | |||
security or privacy over that provided by TLS. In hindsight, the | security or privacy over that provided by TLS. In hindsight, the | |||
decision of the RADEXT working group to retain MD5 for historic | decision of the RADEXT Working Group to retain MD5 for historic | |||
RADIUS/TLS was likely wrong. It was an easy decision to make in the | RADIUS/TLS was likely wrong. It was an easy decision to make in the | |||
short term, but it has caused ongoing problems which this document | short term, but it has caused ongoing problems that this document | |||
addresses. The author of this document played a part in that | addresses. The author of this document played a part in that | |||
original decision, which is now be corrected by this document. | original decision, which is now being corrected by this document. | |||
This document defines an Application-Layer Protocol Negotiation | This document defines an Application-Layer Protocol Negotiation | |||
(ALPN) [RFC7301] extension for RADIUS over (D)TLS which removes the | (ALPN) [RFC7301] extension for RADIUS over (D)TLS that removes the | |||
need to use MD5 for (D)TLS, which we call RADIUS/1.1. This | need to use MD5 for (D)TLS, which we call RADIUS/1.1. This | |||
specification makes no changes to UDP or TCP transport. The | specification makes no changes to UDP or TCP transport. The | |||
RADIUS/1.1 protocol can best be understood as a transport profile for | RADIUS/1.1 protocol can be best understood as a transport profile for | |||
RADIUS over TLS, rather than a whole-sale revision of the RADIUS | RADIUS over TLS, rather than a wholesale revision of the RADIUS | |||
protocol. | protocol. | |||
Systems which implement this transport profile can be more easily | Systems that implement this transport profile can be more easily | |||
verified to be FIPS-140 compliant. A preliminary implementation has | verified to be FIPS 140 compliant. A preliminary implementation has | |||
shown that only minor code changes are required to support RADIUS/1.1 | shown that only minor code changes are required to support RADIUS/1.1 | |||
on top of an existing RADIUS/TLS server implementation, which are: | on top of an existing RADIUS/TLS server implementation. These | |||
include: | ||||
* A method to set the list of supported ALPN protocols before the | * A method to set the list of supported ALPN protocols before the | |||
TLS handshake starts | TLS handshake starts. | |||
* After the TLS handshake has completed, a method to query if ALPN | * A method to query if ALPN has chosen a protocol (and if yes, which | |||
has chosen a protocol, and if yes, which protocol was chosen. | protocol was chosen) after the TLS handshake has completed. | |||
* Changes to the packet encoder and decoder, so that the individual | * Changes to the packet encoder and decoder, so that the individual | |||
packets are not authenticated, and no attribute is encoded with | packets are not authenticated, and no attribute is encoded with | |||
the historic obfuscation methods. | the historic obfuscation methods. | |||
That is, the bulk of the ALPN protocol can be left to the underlying | That is, the bulk of the ALPN protocol can be left to the underlying | |||
TLS implementation. This document discusses the ALPN exchange in | TLS implementation. This document discusses the ALPN exchange in | |||
detail in order to give simplified descriptions for the reader, and | detail in order to give simplified descriptions for the reader, and | |||
so that the reader does not have to read or understand all of | so that the reader does not have to read or understand all of | |||
[RFC7301]. | [RFC7301]. | |||
The detailed list of changes from historic TLS-based transports to | The detailed list of changes from historic TLS-based transports to | |||
RADIUS/1.1 is as follows: | RADIUS/1.1 is as follows: | |||
* ALPN is used for negotiation of this extension, | * ALPN is used for negotiation of this extension. | |||
* TLS 1.3 or later is required, | * TLS 1.3 or later is required. | |||
* All uses of the RADIUS shared secret have been removed, | * All uses of the RADIUS shared secret have been removed. | |||
* The now-unused Request and Response Authenticator fields have been | ||||
repurposed to carry an opaque Token which identifies requests and | * The now unused Request and Response Authenticator fields have been | |||
responses, | repurposed to carry an opaque Token that identifies requests and | |||
responses. | ||||
* The functionality of the Identifier field has been replaced by the | * The functionality of the Identifier field has been replaced by the | |||
Token field, and the space previously taken by the Identifier | Token field, and the space previously taken by the Identifier | |||
field is now reserved and unused, | field is now reserved and unused. | |||
* The Message-Authenticator attribute ([RFC3579], Section 3.2) is | * The Message-Authenticator attribute ([RFC3579], Section 3.2) is | |||
not sent in any packet, and if received is ignored, | not sent in any packet, and is ignored if received. | |||
* Attributes such as User-Password, Tunnel-Password, and MS-MPPE | * Attributes such as User-Password, Tunnel-Password, and MS-MPPE | |||
keys are sent encoded as "text" ([RFC8044], Section 3.4) or | keys are sent encoded as "text" ([RFC8044], Section 3.4) or | |||
"octets" ([RFC8044], Section 3.5), without the previous MD5-based | "octets" ([RFC8044], Section 3.5), without the previous MD5-based | |||
obfuscation. This obfuscation is no longer necessary, as the data | obfuscation. This obfuscation is no longer necessary, as the data | |||
is secured and kept private through the use of TLS, | is secured and kept private through the use of TLS. | |||
* The conclusion of the efforts stemming from [RFC6421] is that | * The conclusion of the efforts stemming from [RFC6421] is that | |||
crypto-agility in RADIUS is best done via a TLS wrapper, and not | crypto-agility in RADIUS is best done via a TLS wrapper, and not | |||
by extending the RADIUS protocol. | by extending the RADIUS protocol. | |||
* [RFC5176] is updated to allow the Error-Cause attribute to appear | * [RFC5176] is updated to allow the Error-Cause attribute to appear | |||
in Access-Reject packets. | in Access-Reject packets. | |||
The following items are left unchanged from traditional TLS-based | The following items are left unchanged from historic TLS-based | |||
transports for RADIUS: | transports for RADIUS: | |||
* The RADIUS packet header is the same size, and the Code and Length | * The RADIUS packet header is the same size, and the Code and Length | |||
fields ([RFC2865], Section 3) have the same meaning as before, | fields ([RFC2865], Section 3) have the same meaning as before. | |||
* The default 4K packet size is unchanged, although [RFC7930] can | * The default 4096-octet packet size from [RFC2865], Section 3 is | |||
still be leveraged to use larger packets, | unchanged, although [RFC7930] can still be leveraged to use larger | |||
packets. | ||||
* All attributes which have simple encodings (that is, attributes | * All attributes that have simple encodings (that is, attributes | |||
which do not use MD5 obfuscation) have the same encoding and | that do not use MD5 obfuscation) have the same encoding and | |||
meaning as before, | meaning as before. | |||
* As this extension is a transport profile for one "hop" (client to | * As this extension is a transport profile for one "hop" (client-to- | |||
server connection), it does not impact any other connection used | server connection), it does not impact any other connection used | |||
by a client or server. The only systems which are aware that this | by a client or server. The only systems that are aware that this | |||
transport profile is in use are the client and server who have | transport profile is in use are the client and server who have | |||
negotiated the use of this extension on a particular shared | negotiated the use of this extension on a particular shared | |||
connection, | connection. | |||
* This extension uses the same ports (2083/tcp and 2083/udp) which | * This extension uses the same ports (2083/tcp and 2083/udp) that | |||
are defined for RADIUS/TLS [RFC6614] and RADIUS/DTLS [RFC7360]. | are defined for RADIUS/TLS [RFC6614] and RADIUS/DTLS [RFC7360]. | |||
A major benefit of this extension is that a server which implements | A major benefit of this extension is that a server that implements it | |||
it can also be more easily verified for FIPS-140 compliance. That | can also be more easily verified for FIPS 140 compliance. That is, a | |||
is, a server can remove all uses of MD5, which means that those | server can remove all uses of MD5, which means that those algorithms | |||
algorithms are provably not used for security purposes. In that | are provably not used for security purposes. In that case, however, | |||
case, however, the server will not support CHAP, or any | the server will not support the Challenge Handshake Authentication | |||
authentication method which uses MD5. The choice of which | Protocol (CHAP) or any authentication method that uses MD5. The | |||
authentication method to accept is always left to the server. This | choice of which authentication method to accept is always left to the | |||
specification does not change any authentication method carried in | server. This specification does not change any authentication method | |||
RADIUS, and does not mandate (or forbid) the use of any | carried in RADIUS, and does not mandate (or forbid) the use of any | |||
authentication method for any system. | authentication method for any system. | |||
As for proxies, there was never a requirement that proxies implement | As for proxies, there was never a requirement that proxies implement | |||
CHAP or MS-CHAP authentication. So far as a proxy is concerned, | CHAP or Microsoft CHAP (MS-CHAP) authentication. So far as a proxy | |||
attributes relating to CHAP and MS-CHAP are simply opaque data that | is concerned, attributes relating to CHAP and MS-CHAP are simply | |||
is transported unchanged to the next hop. It is therefore possible | opaque data that is transported unchanged to the next hop. | |||
for a FIPS-140 compliant proxy to transport authentication methods | Therefore, it is possible for a FIPS 140 compliant proxy to transport | |||
which depend on MD5, so long as that data is forwarded to a server | authentication methods that depend on MD5, so long as that data is | |||
which supports those methods. | forwarded to a server that supports those methods. | |||
We reiterate that the decision to support (or not) any authentication | We reiterate that the decision to support (or not support) any | |||
method is entirely site local, and is not a requirement of this | authentication method is entirely site local, and is not a | |||
specification. The contents or meaning of any RADIUS attribute other | requirement of this specification. The contents or meaning of any | |||
than Message-Authenticator (and similar attributes) are not modified. | RADIUS attribute other than the Message-Authenticator (and similar | |||
The only change to the Message-Authenticator attribute is that it is | attributes) are not modified. The only change to the Message- | |||
no longer used in RADIUS/1.1. | Authenticator attribute is that it is no longer used in RADIUS/1.1. | |||
Unless otherwise described in this document, all RADIUS requirements | Unless otherwise described in this document, all RADIUS requirements | |||
apply to this extension. That is, this specification defines a | apply to this extension. That is, this specification defines a | |||
transport profile for RADIUS. It is not an entirely new protocol, | transport profile for RADIUS. It is not an entirely new protocol, | |||
and it defines only minor changes to the existing RADIUS protocol. | and it defines only minor changes to the existing RADIUS protocol. | |||
It does not change the RADIUS packet format, attribute format, etc. | It does not change the RADIUS packet format, attribute format, etc. | |||
This specification is compatible with all RADIUS attributes, past, | This specification is compatible with all RADIUS attributes of the | |||
present, and future. | past, present, and future. | |||
This specification is compatible with existing implementations of | This specification is compatible with existing implementations of | |||
RADIUS/TLS and RADIUS/DTLS. Systems which implement this standard | RADIUS/TLS and RADIUS/DTLS. Systems that implement this | |||
can fall back to historic RADIUS/TLS if no ALPN signaling is | specification can fall back to historic RADIUS/TLS if no ALPN | |||
performed, and the local configuration permits such fallback. | signaling is performed, and the local configuration permits such | |||
fallback. | ||||
This specification is compatible with all existing RADIUS | This specification is compatible with all existing RADIUS | |||
specifications. There is no need for any RADIUS specification to | specifications. There is no need for any RADIUS specification to | |||
mention this transport profile by name, or to make provisions for | mention this transport profile by name or to make provisions for this | |||
this specification. This document defines how to transform RADIUS | specification. This document defines how to transform RADIUS into | |||
into RADIUS/1.1, and no further discussion of that transformation is | RADIUS/1.1, and no further discussion of that transformation is | |||
necessary. | necessary. | |||
We note that this document makes no changes to previous RADIUS | We note that this document makes no changes to previous RADIUS | |||
specifications. Existing RADIUS implementations can continue to be | specifications. Existing RADIUS implementations can continue to be | |||
used without modification. Where previous specifications are | used without modification. Where previous specifications are | |||
explicitly mentioned and updated, those updates or changes apply only | explicitly mentioned and updated, those updates or changes apply only | |||
when the RADIUS/1.1 transport profile is being used. | when the RADIUS/1.1 transport profile is being used. | |||
In short, when negotiated on a connection, the RADIUS/1.1 transport | In short, when negotiated on a connection, the RADIUS/1.1 transport | |||
profile permits implementations to avoid MD5 when authenticating | profile permits implementations to avoid MD5 when authenticating | |||
packets, or when obfuscating certain attributes. | packets or when obfuscating certain attributes. | |||
2. Terminology | 2. Terminology | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
"OPTIONAL" in this document are to be interpreted as described in | "OPTIONAL" in this document are to be interpreted as described in | |||
BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
capitals, as shown here. | capitals, as shown here. | |||
The following list describes the terminology and abbreviations which | The following list describes the terminology and abbreviations that | |||
are used in this document. | are used in this document. | |||
* ALPN | ALPN | |||
Application-Layer Protocol Negotiation (as defined in [RFC7301]). | ||||
Application-Layer Protocol Negotiation, as defined in [RFC7301]. | ||||
* RADIUS | ||||
The Remote Authentication Dial-In User Service protocol, as | RADIUS | |||
defined in [RFC2865], [RFC2866], and [RFC5176] among others. | Remote Authentication Dial-In User Service (as defined in | |||
[RFC2865], [RFC2866], and [RFC5176], among others). | ||||
While this protocol can be viewed as "RADIUS/1.0", for simplicity | While this protocol can be viewed as "RADIUS/1.0", for simplicity | |||
and historical compatibility, we keep the name "RADIUS". | and historical compatibility, we keep the name "RADIUS". | |||
* RADIUS/UDP | RADIUS/UDP | |||
RADIUS over the User Datagram Protocol (see [RFC2865], [RFC2866], | ||||
RADIUS over the User Datagram Protocol [RFC2865], [RFC2866], | and [RFC5176], among others). | |||
[RFC5176], among others. | ||||
* RADIUS/TCP | ||||
RADIUS/TCP | ||||
RADIUS over the Transmission Control Protocol [RFC6613]. | RADIUS over the Transmission Control Protocol [RFC6613]. | |||
* RADIUS/TLS | RADIUS/TLS | |||
RADIUS over Transport Layer Security [RFC6614]. | ||||
RADIUS over the Transport Layer Security protocol [RFC6614]. | ||||
* RADIUS/DTLS | ||||
RADIUS over the Datagram Transport Layer Security protocol | ||||
[RFC7360]. | ||||
* RADIUS over TLS | ||||
Any RADIUS packets transported over TLS or DTLS. This terminology | ||||
is used instead of alternatives such as "RADIUS/(D)TLS", or | ||||
"either RADIUS/TLS or RADIUS/DTLS". This term is generally used | ||||
when referring to TLS-layer requirements for RADIUS packet | ||||
transport. | ||||
* historic RADIUS/TLS | ||||
RADIUS over (D)TLS as defined in [RFC6614] and [RFC7360]. This | ||||
term does not include the protocol defined in this specification. | ||||
* RADIUS/1.1 | RADIUS/DTLS | |||
RADIUS over Datagram Transport Layer Security [RFC7360]. | ||||
The transport profile defined in this document, which stands for | RADIUS over TLS | |||
"RADIUS version 1.1". We use RADIUS/1.1 to refer interchangeably | Refers to any RADIUS packets transported over TLS or DTLS. This | |||
to TLS and DTLS transport. | terminology is used instead of alternatives such as | |||
"RADIUS/(D)TLS" or "either RADIUS/TLS or RADIUS/DTLS". This term | ||||
is generally used when referring to TLS-layer requirements for | ||||
RADIUS packet transport. | ||||
* TLS | historic RADIUS/TLS | |||
Refers to RADIUS over (D)TLS (as defined in [RFC6614] and | ||||
[RFC7360]). This term does not include the protocol defined in | ||||
this specification. | ||||
The Transport Layer Security protocol. Generally when we refer to | RADIUS/1.1 | |||
TLS in this document, we are referring interchangeably to TLS or | RADIUS version 1.1, i.e., the transport profile defined in this | |||
document. We use RADIUS/1.1 to refer interchangeably to TLS and | ||||
DTLS transport. | DTLS transport. | |||
3. The RADIUS/1.1 Transport profile for RADIUS | TLS | |||
Transport Layer Security. Generally, when we refer to TLS in this | ||||
document, we are referring interchangeably to TLS or DTLS | ||||
transport. | ||||
3. The RADIUS/1.1 Transport Profile for RADIUS | ||||
This section describes the ALPN transport profile in detail. It | This section describes the ALPN transport profile in detail. It | |||
first gives the name used for ALPN, and then describes how ALPN is | first gives the name used for ALPN, and then describes how ALPN is | |||
configured and negotiated by client and server. It then concludes by | configured and negotiated by the client and server. It then | |||
discussing TLS issues such as what to do for ALPN during session | concludes by discussing TLS issues such as what to do for ALPN during | |||
resumption. | session resumption. | |||
3.1. ALPN Name for RADIUS/1.1 | 3.1. ALPN Name for RADIUS/1.1 | |||
The ALPN name defined for RADIUS/1.1 is as follows: | The ALPN name defined for RADIUS/1.1 is as follows: | |||
"radius/1.1" | "radius/1.1" | |||
The protocol defined by this specification. | ||||
The protocol defined by this specification. | ||||
Where ALPN is not configured or is not received in a TLS connection, | Where ALPN is not configured or is not received in a TLS connection, | |||
systems supporting ALPN MUST NOT use RADIUS/1.1. | systems supporting ALPN MUST NOT use RADIUS/1.1. | |||
Where ALPN is configured, the client signals support by sending ALPN | Where ALPN is configured, the client signals support by sending ALPN | |||
strings listing which protocols it supports. The server can accept | strings listing which protocols it supports. The server can accept | |||
one of these proposals and reply with a matching ALPN string, or | one of these proposals and reply with a matching ALPN string, or | |||
reject this proposal, and not reply with any ALPN string. A full | reject this proposal and not reply with any ALPN string. A full | |||
walk-through of the protocol negotiation is given below. | walkthrough of the protocol negotiation is given below. | |||
Implementations MUST signal ALPN "radius/1.1" in order for it to be | Implementations MUST signal ALPN "radius/1.1" in order for it to be | |||
used in a connection. | used in a connection. | |||
The next step in defining RADIUS/1.1 is to review how ALPN works. | The next step in defining RADIUS/1.1 is to review how ALPN works. | |||
3.2. Operation of ALPN | 3.2. Operation of ALPN | |||
In order to provide a high-level description of ALPN for readers who | In order to provide a high-level description of ALPN for readers who | |||
are not familiar with the details of [RFC7301], we provide a brief | are not familiar with the details of [RFC7301], we provide a brief | |||
overview here. | overview here. | |||
Once a system has been configured to support ALPN, it is negotiated | Once a system has been configured to support ALPN, it is negotiated | |||
on a per-connection basis as per [RFC7301]. The negotiation proceeds | on a per-connection basis as per [RFC7301]. The negotiation proceeds | |||
as follows: | as follows: | |||
1) The client sends an ALPN extension in the ClientHello. This | 1) The client sends an ALPN extension in the ClientHello. This | |||
extension lists one or more application protocols by name. These | extension lists one or more application protocols by name. These | |||
names are the protocols which the client is claiming to support. | names are the protocols that the client is claiming to support. | |||
2) The server receives the extension, and validates the application | 2) The server receives the extension and validates the application | |||
protocol name(s) against the list it has configured. | protocol name(s) against the list it has configured. | |||
If the server finds no acceptable common protocols (ALPN or | If the server finds no acceptable common protocols (ALPN or | |||
otherwise), it closes the connection. | otherwise), it closes the connection. | |||
3) Otherwise, the server returns a ServerHello with either no ALPN | 3) Otherwise, the server returns a ServerHello with either no ALPN | |||
extension, or an ALPN extension containing only one named application | extension or an ALPN extension containing only one named | |||
protocol, which needs to be one of the names proposed by the client. | application protocol, which needs to be one of the names proposed | |||
by the client. | ||||
If the client did not signal ALPN, or the server does not accept | If the client did not signal ALPN, or the server does not accept | |||
the ALPN proposal, the server does not reply with any ALPN name. | the ALPN proposal, the server does not reply with any ALPN name. | |||
4) The client receives the ServerHello, validates the received | 4) The client receives the ServerHello, validates the received | |||
application protocol (if any) against the name(s) it sent, and | application protocol (if any) against the name(s) it sent, and | |||
records which application protocol was chosen. | records which application protocol was chosen. | |||
This check is necessary in order for the client to both know which | This check is necessary in order for the client to both know | |||
protocol the server has selected, and to validate that the | which protocol the server has selected, and to validate that the | |||
protocol sent by the server is one which is acceptable to the | protocol sent by the server is one that is acceptable to the | |||
client. | client. | |||
The next step in defining RADIUS/1.1 is to define how ALPN is | The next step in defining RADIUS/1.1 is to define how ALPN is | |||
configured on the client and server, and to give more detailed | configured on the client and server and to give more detailed | |||
requirements on its configuration and operation. | requirements on its configuration and operation. | |||
3.3. Configuration of ALPN for RADIUS/1.1 | 3.3. Configuration of ALPN for RADIUS/1.1 | |||
Clients or servers supporting this specification can do so by | Clients or servers supporting this specification can do so by | |||
extending their TLS configuration through the addition of a new | extending their TLS configuration through the addition of a new | |||
configuration variable, called "Version" here. The exact name given | configuration variable, called "Version" here. The exact name given | |||
below does not need to be used, but it is RECOMMENDED that | below does not need to be used, but it is RECOMMENDED that | |||
administrative interfaces or programming interfaces use a similar | administrative interfaces or programming interfaces use a similar | |||
name in order to provide consistent terminology. This variable | name in order to provide consistent terminology. This variable | |||
controls how the implementation signals use of this protocol via | controls how the implementation signals use of this protocol via | |||
ALPN. | ALPN. | |||
When set, this variable should contain the list of permitted RADIUS | When set, this variable should contain the list of permitted RADIUS | |||
versions as numbers, e.g. "1.0" or "1.1". The implementation may | versions as numbers, e.g., "1.0" or "1.1". The implementation may | |||
allow multiple values in one variable, or allow multiple variables, | allow multiple values in one variable, allow multiple variables, or | |||
or instead use two configuration for "minimum" and "maximum" allowed | instead use two configurations for the "minimum" and "maximum" | |||
versions. We assume here that there is one variable, which can | allowed versions. We assume here that there is one variable, which | |||
contain either no value, or else a list of one or more versions which | can contain either no value or a list of one or more versions that | |||
the current implementation supports. In this specification, the | the current implementation supports. In this specification, the | |||
possible values, ALPN strings, and corresponding interpretations are: | possible values, ALPN strings, and corresponding interpretations are: | |||
Value | ALPN String(s) | Interpretation | +==========+========================+=============================+ | |||
------------------------------------------------------ | | Value | ALPN String(s) | Interpretation | | |||
unset | | no ALPN strings are sent. | +==========+========================+=============================+ | |||
1.0 | radius/1.0 | require historic RADIUS/TLS | | unset | | no ALPN strings are sent | | |||
1.0, 1.1 | radius/1.0, radius/1.1 | allow either historic | +----------+------------------------+-----------------------------+ | |||
| | RADIUS/TLS or RADIUS/1.1. | | 1.0 | radius/1.0 | require historic RADIUS/TLS | | |||
1.1 | radius/1.1 | require RADIUS/1.1. | +----------+------------------------+-----------------------------+ | |||
| 1.0, 1.1 | radius/1.0, radius/1.1 | allow either historic | | ||||
| | | RADIUS/TLS or RADIUS/1.1 | | ||||
+----------+------------------------+-----------------------------+ | ||||
| 1.1 | radius/1.1 | require RADIUS/1.1 | | ||||
+----------+------------------------+-----------------------------+ | ||||
Table 1 | ||||
This configuration is also extensible to future RADIUS versions if | This configuration is also extensible to future RADIUS versions if | |||
that extension becomes necessary. New values and ALPN names can | that extension becomes necessary. New values and ALPN names can | |||
simply be added to the list. Implementations can then negotiate the | simply be added to the list. Implementations can then negotiate the | |||
highest version which is supported by both client and server. | highest version that is supported by both client and server. | |||
Implementations SHOULD support both historic RADIUS/TLS and | Implementations SHOULD support both historic RADIUS/TLS and | |||
RADIUS/1.1. Such implementations MUST set the default value for this | RADIUS/1.1. Such implementations MUST set the default value for this | |||
configuration variable to "1.0, 1.1". This setting ensures that both | configuration variable to "1.0, 1.1". This setting ensures that both | |||
versions of RADIUS can be negotiated. | versions of RADIUS can be negotiated. | |||
Implementations MAY support only RADIUS/1.1. In which case the | Implementations MAY support only RADIUS/1.1. In this case, the | |||
default value for this configuration variable MUST be "1.1". This | default value for this configuration variable MUST be "1.1". This | |||
behavior is NOT RECOMMENDED, as it is incompatible with historic | behavior is NOT RECOMMENDED, as it is incompatible with historic | |||
RADIUS/TLS. This behavior can only be a reasonable default when all | RADIUS/TLS. This behavior can only be a reasonable default when all | |||
(or nearly all) RADIUS clients have been updated to support | (or nearly all) RADIUS clients have been updated to support | |||
RADIUS/1.1. | RADIUS/1.1. | |||
A more detailed definition of the variable and the meaning of the | A more detailed definition of the variable and the meaning of the | |||
values is given below. | values is given below. | |||
Configuration Variable Name | Configuration Variable Name | |||
skipping to change at page 11, line 9 ¶ | skipping to change at line 465 ¶ | |||
default value for this configuration variable MUST be "1.1". This | default value for this configuration variable MUST be "1.1". This | |||
behavior is NOT RECOMMENDED, as it is incompatible with historic | behavior is NOT RECOMMENDED, as it is incompatible with historic | |||
RADIUS/TLS. This behavior can only be a reasonable default when all | RADIUS/TLS. This behavior can only be a reasonable default when all | |||
(or nearly all) RADIUS clients have been updated to support | (or nearly all) RADIUS clients have been updated to support | |||
RADIUS/1.1. | RADIUS/1.1. | |||
A more detailed definition of the variable and the meaning of the | A more detailed definition of the variable and the meaning of the | |||
values is given below. | values is given below. | |||
Configuration Variable Name | Configuration Variable Name | |||
Version | Version | |||
Values | For "Value": | |||
A. If unset, ALPN is not used. | ||||
When the variable is unset, ALPN is not used. | ||||
Any connection MUST use historic RADIUS/TLS. | ||||
This variable is included here only for logical completeness. | ||||
Implementations of this specification SHOULD be configured to | ||||
always send one or more ALPN strings. This data signals that the | ||||
implementation is capable performing ALPN negotiation, even if it | ||||
is not currently configured to use RADIUS/1.1 | ||||
Client Behavior | ||||
The client MUST NOT send any protocol name via ALPN. | ||||
Server Behavior | Any connection MUST use historic RADIUS/TLS. | |||
The server MUST NOT signal any protocol name via ALPN. | This variable is included here only for logical completeness. | |||
Implementations of this specification SHOULD be configured to | ||||
always send one or more ALPN strings. This data signals that | ||||
the implementation is capable of performing ALPN negotiation, | ||||
even if it is not currently configured to use RADIUS/1.1. | ||||
If the server receives an ALPN name from the client, it MUST | Client Behavior | |||
NOT close the connection. Instead, it simply does not reply | The client MUST NOT send any protocol name via ALPN. | |||
with ALPN, and finishes the TLS connection setup as defined | ||||
for historic RADIUS/TLS. | ||||
Note that if a client sends "radius/1.1", the client will | Server Behavior | |||
see that the server failed to acknowledge this request, and | The server MUST NOT signal any protocol name via ALPN. | |||
will close the connection. For any other client | ||||
configuration, the connection will use historic RADIUS/TLS. | ||||
Other values ("1.0", "1.0, 1.1", "1.1", etc.) | If the server receives an ALPN name from the client, it | |||
MUST NOT close the connection. Instead, it simply does not | ||||
reply with ALPN and finishes the TLS connection setup as | ||||
defined for historic RADIUS/TLS. | ||||
Client Behavior | Note that if a client sends "radius/1.1", the client will | |||
see that the server failed to acknowledge this request and | ||||
will close the connection. For any other client | ||||
configuration, the connection will use historic RADIUS/TLS. | ||||
The client MUST send the ALPN string(s) associated with the | B. If set to "1.0", "1.0, 1.1", "1.1", or future values: | |||
configured version. e.g. For "1.0", send "radius/1.0". | ||||
The client will receive either no ALPN response from the | Client Behavior | |||
server, or an ALPN response of one version string with MUST | The client MUST send the ALPN string(s) associated with the | |||
match one of the strings it sent, or else a TLS alert of | configured version. For example, send "radius/1.0" for | |||
"no_application_protocol" (120). | "1.0". | |||
If the connection remains open, the client MUST treat the | The client will receive either no ALPN response from the | |||
connection as using the matching ALPN version. | server; or it will receive an ALPN response of one version | |||
string that MUST match one of the strings it sent; or else | ||||
they will receive a TLS alert of "no_application_protocol" | ||||
(120). | ||||
Server Behavior | If the connection remains open, the client MUST treat the | |||
connection as using the matching ALPN version. | ||||
If the server receives no ALPN name from the client, it MUST | Server Behavior | |||
use historic RADIUS/TLS. | If the server receives no ALPN name from the client, it | |||
MUST use historic RADIUS/TLS. | ||||
If the server receives one or more ALPN names from the | If the server receives one or more ALPN names from the | |||
client, it MUST reply with the highest mutually supported | client, it MUST reply with the highest mutually supported | |||
version and then use the latest supported version for this | version and then use the latest supported version for this | |||
connection. | connection. | |||
If the server receives one or more ALPN names from the | If the server receives one or more ALPN names from the | |||
client, but none of the names match the versions supported | client, but none of the names match the versions supported | |||
by (or configured on) the server, it MUST reply with a TLS | by (or configured on) the server, it MUST reply with a TLS | |||
alert of "no_application_protocol" (120), and then MUST | alert of "no_application_protocol" (120), and then it MUST | |||
close the TLS connection. | close the TLS connection. | |||
These requirements for negotiation are not specific to | These requirements for negotiation are not specific to | |||
RADIUS/1.1, and therefore can be used unchanged if any new | RADIUS/1.1; therefore, they can be used unchanged if any | |||
version of RADIUS is defined. | new version of RADIUS is defined. | |||
By requiring the default configuration to allow historic RADIUS/TLS, | By requiring the default configuration to allow historic RADIUS/TLS, | |||
implementations will be able to negotiate both historic RADIUS/TLS | implementations will be able to negotiate both historic RADIUS/TLS | |||
connections, and also RADIUS/1.1 connections. Any other recommended | connections and also RADIUS/1.1 connections. Any other recommended | |||
default setting would prevent either the negotiation of historic | default setting would prevent either the negotiation of historic | |||
RADIUS/TLS, or prevent the negotiation of RADIUS/1.1. | RADIUS/TLS or prevent the negotiation of RADIUS/1.1. | |||
Once administrators verify that both ends of a connection support | Once administrators verify that both ends of a connection support | |||
RADIUS/1.1, and that it has been negotiated successfully, the | RADIUS/1.1, and that it has been negotiated successfully, the | |||
configurations SHOULD be updated to require RADIUS/1.1. The | configurations SHOULD be updated to require RADIUS/1.1. The | |||
connections should be monitored after this change to ensure that the | connections should be monitored after this change to ensure that the | |||
systems continue to remain connected. If there are connection | systems continue to remain connected. If there are connection | |||
issues, then the configuration should be reverted to using allow both | issues, then the configuration should be reverted to allowing both | |||
"radius/1.0" and "radius/1.1" ALPN strings, until such time as the | "radius/1.0" and "radius/1.1" ALPN strings, until the administrator | |||
connection problems have been resolved. | has resolved the connection problems. | |||
We reiterate that systems implementing this specification, but which | We reiterate that systems implementing this specification, but which | |||
are configured with setting that forbid RADIUS/1.1, will behave | are configured with settings that forbid RADIUS/1.1, will behave | |||
largely the same as systems which do not implement this | largely the same as systems that do not implement this specification. | |||
specification. The only difference is that clients may send the ALPN | The only difference is that clients may send the ALPN name | |||
name "radius/1.0". | "radius/1.0". | |||
Systems implementing RADIUS/1.1 SHOULD NOT be configured by default | Systems implementing RADIUS/1.1 SHOULD NOT be configured by default | |||
to forbid that protocol. That setting exists mainly for | to forbid that protocol. That setting exists mainly for | |||
completeness, and to give administrators the flexibility to control | completeness, and to give administrators the flexibility to control | |||
their own deployments. | their own deployments. | |||
While [RFC7301] does not discuss the possibility of the server | While [RFC7301] does not discuss the possibility of the server | |||
sending a TLS alert of "no_application_protocol" (120) when the | sending a TLS alert of "no_application_protocol" (120) when the | |||
client does not use ALPN, this behavior appears to be useful. As | client does not use ALPN, this behavior appears to be useful. As | |||
such, servers MAY send a a TLS alert of "no_application_protocol" | such, servers MAY send a TLS alert of "no_application_protocol" (120) | |||
(120) when the client does not use ALPN. | when the client does not use ALPN. | |||
However, some TLS implementations may not permit an application to | However, some TLS implementations may not permit an application to | |||
send a TLS alert of its choice, at a time of its choice. This | send a TLS alert of its choice at a time of its choice. This | |||
limitation means that it is not always possible for an application to | limitation means that it is not always possible for an application to | |||
send the TLS alert as discussed in the previous section. The impact | send the TLS alert as discussed in the previous section. The impact | |||
is that an implementation may attempt to connect, and then see that | is that an implementation may attempt to connect and then see that | |||
the connection fails, but not be able to determine why that failure | the connection fails, but it may not be able to determine why that | |||
has occurred. Implementers and administrators should be aware that | failure has occurred. Implementers and administrators should be | |||
unexplained connection failures may be due to ALPN negotiation | aware that unexplained connection failures may be due to ALPN issues. | |||
issues. | ||||
The server MAY send this alert during the ClientHello, if it requires | The server MAY send this alert during the ClientHello if it requires | |||
ALPN but does not receive it. That is, there may not always be a | ALPN but does not receive it. That is, there may not always be a | |||
need to wait for the TLS connection to be fully established before | need to wait for the TLS connection to be fully established before | |||
realizing that no common ALPN protocol can be negotiated. | realizing that no common ALPN protocol can be negotiated. | |||
Where the client does perform signaling via ALPN and the server | Where the client does perform signaling via ALPN, and the server | |||
determines that there is no compatible application protocol name, | determines that there is no compatible application protocol name, | |||
then as per [RFC7301], Section 3.2, it MUST send a TLS alert of | then as per [RFC7301], Section 3.2, it MUST send a TLS alert of | |||
"no_application_protocol" (120). | "no_application_protocol" (120). | |||
Whether or not the server sent a TLS alert for no compatible ALPN, it | The server MUST close the connection whether or not the server sent a | |||
MUST close the connection. The above requirements on ALPN apply to | TLS alert for no compatible ALPN. The above requirements on ALPN | |||
both new sessions, and to resumed sessions. | apply to both new sessions and to resumed sessions. | |||
In contrast, there is no need for the client to signal that there are | In contrast, there is no need for the client to signal that there are | |||
no compatible application protocol names. The client sends zero or | no compatible application protocol names. The client sends zero or | |||
more protocol names, and the server responds as above. From the | more protocol names, and the server responds as above. From the | |||
point of view of the client, the list it sent results in either a | point of view of the client, the list it sent results in either a | |||
connection failure, or a connection success. | connection failure or a connection success. | |||
It is RECOMMENDED that the server logs a descriptive error in this | It is RECOMMENDED that the server logs a descriptive error in this | |||
situation, so that an administrator can determine why a particular | situation, so that an administrator can determine why a particular | |||
connection failed. The log message SHOULD include information about | connection failed. The log message SHOULD include information about | |||
the other end of the connection, such as IP address, certificate | the other end of the connection, such as the IP address, certificate | |||
information, etc. Similarly, when the client receives a TLS alert of | information, etc. Similarly, when the client receives a TLS alert of | |||
"no_application_protocol" it SHOULD log a descriptive error message. | "no_application_protocol" (120), it SHOULD log a descriptive error | |||
Such error messages are critical for helping administrators to | message. Such error messages are critical for helping administrators | |||
diagnose connectivity issues. | diagnose connectivity issues. | |||
3.3.1. Using Protocol-Error for Signaling ALPN Failure | 3.3.1. Using Protocol-Error for Signaling ALPN Failure | |||
When it is not possible to send a TLS alert of | When it is not possible to send a TLS alert of | |||
"no_application_protocol" (120), then the only remaining method for | "no_application_protocol" (120), then the only remaining method for | |||
one party to signal the other is to send application data inside of | one party to signal the other is to send application data inside of | |||
the TLS tunnel. Therefore, for the situation when a one end of a | the TLS tunnel. Therefore, for the situation when one end of a | |||
connection determines that it requires ALPN while the other end does | connection determines that it requires ALPN, while the other end does | |||
not support ALPN, the end requiring ALPN MAY send a Protocol-Error | not support ALPN, then the end requiring ALPN MAY send a Protocol- | |||
packet [RFC7930] inside of the tunnel, and then MUST close the | Error packet [RFC7930] inside of the tunnel and then MUST close the | |||
connection. If this is done, the Token field of the Protocol-Error | connection. If this is done, the Token field of the Protocol-Error | |||
packet cannot be copied from any request, and therefore that field | packet cannot be copied from any request; therefore, that field MUST | |||
MUST be set to all zeros. | be set to all zeros. | |||
The Protocol-Error packet SHOULD contain a Reply-Message attribute | The Protocol-Error packet SHOULD contain a Reply-Message attribute | |||
with a textual string describing the cause of the error. The packet | with a textual string describing the cause of the error. The packet | |||
SHOULD also contain an Error-Cause attribute, with value Unsupported | SHOULD also contain an Error-Cause attribute, with value 406 | |||
Extension (406). The packet SHOULD NOT contain other attributes. | (Unsupported Extension). The packet SHOULD NOT contain other | |||
attributes. | ||||
An implementation sending this packet could bypass any RADIUS | An implementation sending this packet could bypass any RADIUS encoder | |||
encoder, and simply write this packet as a predefined, fixed set of | and simply write this packet as a predefined, fixed set of data to | |||
data to the TLS connection. That process would likely be simpler | the TLS connection. That process would likely be simpler than trying | |||
than trying to call the normal RADIUS packet encoder to encode a | to call the normal RADIUS packet encoder to encode a reply packet | |||
reply packet with no corresponding request packet. | with no corresponding request packet. | |||
As this packet is an unexpected response packet, existing client | As this packet is an unexpected response packet, existing client | |||
implementations of RADIUS over TLS will ignore it. They may either | implementations of RADIUS over TLS will ignore it. They may either | |||
log an error and close the connection, or they may discard the packet | log an error and close the connection, or they may discard the packet | |||
and leave the connection open. If the connection remains open, the | and leave the connection open. If the connection remains open, the | |||
end supporting ALPN will close the connection, so there will be no | end supporting ALPN will close the connection, so there will be no | |||
side effects from sending this packet. Therefore, while using a | side effects from sending this packet. Therefore, while using a | |||
Protocol-Error packet in this way is unusual, it is both informative | Protocol-Error packet in this way is unusual, it is both informative | |||
and safe. | and safe. | |||
The purpose of this packet is not to have the other end of the | The purpose of this packet is not to have the other end of the | |||
connection automatically determine what went wrong, and fix it. | connection automatically determine what went wrong and fix it. | |||
Instead, the packet is intended to be (eventually) seen by an | Instead, the packet is intended to be (eventually) seen by an | |||
administrator, who can then take remedial action. | administrator, who can then take remedial action. | |||
3.3.2. Tabular Summary | 3.3.2. Tabular Summary | |||
The preceding text gives a large number of recommendations. In order | The preceding text gives a large number of recommendations. In order | |||
to give a simpler description of the outcomes, a table of possible | to give a simpler description of the outcomes, a table of possible | |||
behaviors for client/server values of the Version variable is given | behaviors for client/server values of the Version variable is given | |||
below. This table and the names given below are for informational | below. The row and column headings are the RADIUS version numbers | |||
and descriptive purposes only. | sent in ALPN (or no ALPN). The contents of the table are the | |||
resulting RADIUS version that is negotiated. For clarity, only the | ||||
Server | RADIUS version numbers have been given, and not the full ALPN strings | |||
no ALPN | 1.0 | 1.0, 1.1 | 1.1 | (e.g., "radius/1.0"). | |||
Client |-------------------------------------------- | ||||
----------| | ||||
No ALPN | TLS TLS TLS Close-S | ||||
| | ||||
1.0 | TLS TLS TLS Alert | ||||
| | ||||
1.0, 1.1 | TLS TLS 1.1 1.1 | ||||
| | ||||
1.1 | Close-C Alert 1.1 1.1 | ||||
Figure 1: Possible outcomes for ALPN Negotiation | ||||
The table entries above have the following meaning: | ||||
Alert | This table and the names given below are for informational and | |||
descriptive purposes only. | ||||
The client sends ALPN, and the server does not agree to the | +==========+======================================+ | |||
clients ALPN proposal. The server replies with a TLS alert of | | Client | Server | | |||
"no_application_protocol" (120), and then closes the TLS | | +=========+=======+==========+=========+ | |||
connection. | | | no ALPN | 1.0 | 1.0, 1.1 | 1.1 | | |||
+==========+=========+=======+==========+=========+ | ||||
| no ALPN | TLS | TLS | TLS | Close-S | | ||||
+==========+---------+-------+----------+---------+ | ||||
| 1.0 | TLS | TLS | TLS | Alert | | ||||
+==========+---------+-------+----------+---------+ | ||||
| 1.0, 1.1 | TLS | TLS | 1.1 | 1.1 | | ||||
+==========+---------+-------+----------+---------+ | ||||
| 1.1 | Close-C | Alert | 1.1 | 1.1 | | ||||
+==========+---------+-------+----------+---------+ | ||||
As the server replies with a TLS alert, the Protocol-Error | Table 2: Possible Outcomes for ALPN | |||
packet is not used here. | ||||
Close-C | The table entries above have the following meaning: | |||
The client sends ALPN, but the server does not respond with | Alert | |||
ALPN. The client closes the connection. | The client sends ALPN, and the server does not agree to the | |||
client's ALPN proposal. The server replies with a TLS alert of | ||||
"no_application_protocol" (120) and then closes the TLS | ||||
connection. | ||||
As noted in the previous section, the client MAY send a | As the server replies with a TLS alert, the Protocol-Error packet | |||
Protocol-Error packet to the server before closing the | is not used here. | |||
connection. | ||||
Close-S | Close-C | |||
The client sends ALPN, but the server does not respond with ALPN. | ||||
The client closes the connection. | ||||
The client does not send ALPN string(s), but the server | As noted in the previous section, the client MAY send a Protocol- | |||
requires ALPN. The server closes the connection. | Error packet to the server before closing the connection. | |||
As noted in the previous section, the server MAY send a | Close-S | |||
Protocol-Error packet to the client before closing the | The client does not send ALPN string(s), but the server requires | |||
connection. The server MAY also send a TLS alert of | ALPN. The server closes the connection. | |||
"no_application_protocol" (120) before closing the connection. | ||||
TLS | As noted in the previous section, the server MAY send a Protocol- | |||
Historic RADIUS/TLS is used. The client either sends no ALPN | Error packet to the client before closing the connection. The | |||
string, or sends "radius/1.0". The server either replies with | server MAY also send a TLS alert of "no_application_protocol" | |||
no ALPN string, or with "radius/1.0". The connection MUST use | (120) before closing the connection. | |||
historic RADIUS/TLS. | ||||
1.1 | TLS | |||
Historic RADIUS/TLS is used. The client either sends no ALPN | ||||
string or sends "radius/1.0". The server either replies with no | ||||
ALPN string or with "radius/1.0". The connection MUST use | ||||
historic RADIUS/TLS. | ||||
The client sends the ALPN string "radius/1.1. The server | 1.1 | |||
acknowledges this negotiation with a reply of "radius/1.1", and | The client sends the ALPN string "radius/1.1". The server | |||
then RADIUS/1.1 is used. | acknowledges this negotiation with a reply of "radius/1.1", and | |||
then RADIUS/1.1 is used. | ||||
Implementations should note that this table may be extended in future | Implementations should note that this table may be extended in future | |||
specifications. The above text is informative, and does not mandate | specifications. The above text is informative, and does not mandate | |||
that only the above ALPN strings are used. The actual ALPN | that only the above ALPN strings are used. The actual ALPN takes | |||
negotiation takes place as defined in the preceding sections of this | place as defined in the preceding sections of this document and in | |||
document, and in [RFC7301]. | [RFC7301]. | |||
3.4. Miscellaneous Items | 3.4. Miscellaneous Items | |||
Implementations of this specification MUST require TLS version 1.3 or | Implementations of this specification MUST require TLS version 1.3 or | |||
later. | later. | |||
The use of the ALPN string "radius/1.0" is technically unnecessary, | The use of the ALPN string "radius/1.0" is technically unnecessary, | |||
as it is largely equivalent to not sending any ALPN string. However, | as it is largely equivalent to not sending any ALPN string. However, | |||
that value is useful for RADIUS administrators. A system which sends | that value is useful for RADIUS administrators. A system that sends | |||
the ALPN string "radius/1.0" is explicitly signaling that it supports | the ALPN string "radius/1.0" is explicitly signaling that it supports | |||
ALPN negotiation, but that it is not currently configured to support | ALPN, but that it is not currently configured to support RADIUS/1.1. | |||
RADIUS/1.1. That information can be used by administrators to | That information can be used by administrators to determine which | |||
determine which devices are capable of ALPN. | devices are capable of ALPN. | |||
The use of the ALPN string "radius/1.0" also permits server | The use of the ALPN string "radius/1.0" also permits server | |||
implementations to send a TLS alert of "no_application_protocol" | implementations to send a TLS alert of "no_application_protocol" | |||
(120) when it cannot find a matching ALPN string. Experiments with | (120) when it cannot find a matching ALPN string. Experiments with | |||
TLS library implementations suggest that in some cases it is possible | TLS library implementations suggest that in some cases it is possible | |||
to send that TLS alert when ALPN is not used. However, such a | to send that TLS alert when ALPN is not used. However, such a | |||
scenario is not discussed on [RFC7301], and is likely not universal. | scenario is not discussed in [RFC7301] and is likely not universal. | |||
As a result, ALPN as defined in [RFC7301] permits servers to send | As a result, ALPN as defined in [RFC7301] permits servers to send | |||
that TLS alert in situations where it would be otherwise forbidden, | that TLS alert in situations where it would be otherwise forbidden or | |||
or perhaps unsupported. | perhaps unsupported. | |||
Finally, defining ALPN strings for all known RADIUS versions will | Finally, defining ALPN strings for all known RADIUS versions will | |||
make it easier to support additional ALPN strings if that | make it easier to support additional ALPN strings if that | |||
functionality is ever needed. | functionality is ever needed. | |||
3.5. Session Resumption | 3.5. Session Resumption | |||
[RFC7301], Section 3.1 states that ALPN is negotiated on each | [RFC7301], Section 3.1 states that ALPN is negotiated on each | |||
connection, even if session resumption is used: | connection, even if session resumption is used: | |||
When session resumption or session tickets [RFC5077] are used, the | | When session resumption or session tickets [RFC5077] are used, the | |||
previous contents of this extension are irrelevant, and only the | | previous contents of this extension are irrelevant, and only the | |||
values in the new handshake messages are considered. | | values in the new handshake messages are considered. | |||
In order to prevent down-bidding attacks, RADIUS systems which | (Note: RFC 5077 was obsoleted by [RFC8446].) | |||
In order to prevent down-bidding attacks, RADIUS systems that | ||||
negotiate the "radius/1.1" protocol MUST associate that information | negotiate the "radius/1.1" protocol MUST associate that information | |||
with the session ticket, and enforce the use of "radius/1.1" on | with the session ticket and enforce the use of "radius/1.1" on | |||
session resumption. That is, if "radius/1.1" was negotiated for a | session resumption. That is, if "radius/1.1" was negotiated for a | |||
session, both clients and servers MUST behave as if the RADIUS/1.1 | session, both clients and servers MUST behave as if the RADIUS/1.1 | |||
variable was set to "require" for that session. | variable was set to "require" for that session. | |||
A client which is resuming a "radius/1.1" connection MUST advertise | A client that is resuming a "radius/1.1" connection MUST advertise | |||
only the capability to do "radius/1.1" for the resumed session. That | only the capability to do "radius/1.1" for the resumed session. That | |||
is, even if the client configuration allows historic RADIUS/TLS for | is, even if the client configuration allows historic RADIUS/TLS for | |||
new connections, it MUST signal "radius/1.1" when resuming a session | new connections, it MUST signal "radius/1.1" when resuming a session | |||
which had previously negotiated "radius/1.1". | that had previously negotiated "radius/1.1". | |||
Similarly, when a server does resumption for a session which had | Similarly, when a server does resumption for a session that had | |||
previously negotiated "radius/1.1". If the client attempts to resume | previously negotiated "radius/1.1", if the client attempts to resume | |||
the sessions without signaling the use of RADIUS/1.1, the server MUST | the sessions without signaling the use of RADIUS/1.1, the server MUST | |||
close the connection. The server MUST send an appropriate TLS error, | close the connection. The server MUST send an appropriate TLS error, | |||
and also SHOULD log a descriptive message as described above. | and also SHOULD log a descriptive message as described above. | |||
In contrast, there is no requirement for a client or server to force | In contrast, there is no requirement for a client or server to force | |||
the use of [RFC6614] RADIUS/TLS on session resumption. Clients are | the use of RADIUS/TLS from [RFC6614] on session resumption. Clients | |||
free to signal support for "radius/1.1" on resumed sessions, even if | are free to signal support for "radius/1.1" on resumed sessions, even | |||
the original session did not negotiate "radius/1.1". Servers are | if the original session did not negotiate "radius/1.1". Servers are | |||
free to accept this request, and to negotiate the use of "radius/1.1" | free to accept this request and to negotiate the use of "radius/1.1" | |||
for such sessions. | for such sessions. | |||
4. RADIUS/1.1 Packet and Attribute Formats | 4. RADIUS/1.1 Packet and Attribute Formats | |||
This section describes the application-layer data which is sent | This section describes the application-layer data that is sent inside | |||
inside of (D)TLS when using the RADIUS/1.1 protocol. Unless | of (D)TLS when using the RADIUS/1.1 protocol. Unless otherwise | |||
otherwise discussed herein, the application-layer data is unchanged | discussed herein, the application-layer data is unchanged from | |||
from traditional RADIUS. This protocol is only used when | historic RADIUS. This protocol is only used when "radius/1.1" has | |||
"radius/1.1" has been negotiated by both ends of a connection. | been negotiated by both ends of a connection. | |||
4.1. RADIUS/1.1 Packet Format | 4.1. RADIUS/1.1 Packet Format | |||
When RADIUS/1.1 is used, the RADIUS header is modified from standard | When RADIUS/1.1 is used, the RADIUS header is modified from standard | |||
RADIUS. While the header has the same size, some fields have | RADIUS. While the header has the same size, some fields have | |||
different meaning. The Identifier and the Request / Response | different meanings. The Identifier and the Request and Response | |||
Authenticator fields are no longer used in RADIUS/1.1. Any | Authenticator fields are no longer used in RADIUS/1.1. Any | |||
operations which depend on those fields MUST NOT be performed. As | operations that depend on those fields MUST NOT be performed. As | |||
packet authentication, secrecy, and security are handled by the TLS | packet authentication, secrecy, and security are handled by the TLS | |||
layer, RADIUS-specific cryptographic primitives are no longer needed | layer, RADIUS-specific cryptographic primitives are no longer needed | |||
or used in RADIUS/1.1. | or used in RADIUS/1.1. | |||
A summary of the RADIUS/1.1 packet format is shown below. The fields | A summary of the RADIUS/1.1 packet format is shown below. The fields | |||
are transmitted from left to right. | are transmitted from left to right. | |||
0 1 2 3 | 0 1 2 3 | |||
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
skipping to change at page 18, line 22 ¶ | skipping to change at line 812 ¶ | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Token | | | Token | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | | | | |||
| Reserved-2 | | | Reserved-2 | | |||
| | | | | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Attributes ... | | Attributes ... | |||
+-+-+-+-+-+-+-+-+-+-+-+-+- | +-+-+-+-+-+-+-+-+-+-+-+-+- | |||
Figure 2: The RADIUS/1.1 Packet Format | Figure 1: The RADIUS/1.1 Packet Format | |||
Code | Code | |||
The Code field is one octet and identifies the type of RADIUS | ||||
The Code field is one octet, and identifies the type of RADIUS | ||||
packet. | packet. | |||
The meaning of the Code field is unchanged from previous RADIUS | The meaning of the Code field is unchanged from previous RADIUS | |||
specifications. | specifications. | |||
Reserved-1 | Reserved-1 | |||
The Reserved-1 field is one octet. | The Reserved-1 field is one octet. | |||
This field was previously used as the "Identifier" in historic | This field was previously used as the "Identifier" in historic | |||
RADIUS/TLS. It is now unused, as the Token field replaces it both | RADIUS/TLS. It is now unused, as the Token field replaces it both | |||
as the way to identify requests, and to associate responses with | as the way to identify requests and to associate responses with | |||
requests. | requests. | |||
When sending packets, the Reserved-1 field MUST be set to zero. | When sending packets, the Reserved-1 field MUST be set to zero. | |||
The Reserved-1 field MUST be ignored when receiving a packet. | The Reserved-1 field MUST be ignored when receiving a packet. | |||
Length | Length | |||
The Length field is two octets. | The Length field is two octets. | |||
The meaning of the Length field is unchanged from previous RADIUS | The meaning of the Length field is unchanged from previous RADIUS | |||
specifications. | specifications. | |||
Token | Token | |||
The Token field is four octets, and aids in matching requests and | The Token field is four octets and aids in matching requests and | |||
replies, as a replacement for the Identifier field. The RADIUS | replies, as a replacement for the Identifier field. The RADIUS | |||
server can detect a duplicate request if it receives the same | server can detect a duplicate request if it receives the same | |||
Token value for two packets on a particular connection. | Token value for two packets on a particular connection. | |||
All values are possible for the Token field. Implementations MUST | All values are possible for the Token field. Implementations MUST | |||
treat the Token as an opaque blob when comparing Token values. | treat the Token as an opaque blob when comparing Token values. | |||
Further requirements are given below in Section 4.2.1 for sending | Further requirements are given below in Section 4.2.1 for sending | |||
packets, and in Section 4.2.2 for receiving packets. | packets and in Section 4.2.2 for receiving packets. | |||
Reserved-2 | Reserved-2 | |||
The Reserved-2 field is twelve (12) octets in length. | The Reserved-2 field is twelve (12) octets in length. | |||
These octets MUST be set to zero when sending a packet. | These octets MUST be set to zero when sending a packet. | |||
These octets MUST be ignored when receiving a packet. | These octets MUST be ignored when receiving a packet. | |||
These octets are reserved for future protocol extensions. | These octets are reserved for future protocol extensions. | |||
4.2. The Token Field | 4.2. The Token Field | |||
This section describes in more detail how the Token field is used. | This section describes in more detail how the Token field is used. | |||
4.2.1. Sending Packets | 4.2.1. Sending Packets | |||
The Token field MUST change for every new unique packet which is sent | The Token field MUST change for every new unique packet that is sent | |||
on the same connection. For DTLS transport, it is possible to | on the same connection. For DTLS transport, it is possible to | |||
retransmit duplicate packets, in which case the Token value MUST NOT | retransmit duplicate packets, in which case the Token value MUST NOT | |||
be changed when a duplicate packet is (re)sent. When the contents of | be changed when a duplicate packet is (re)sent. When the contents of | |||
a retransmitted packet change for any reason (such changing Acct- | a retransmitted packet change for any reason (such as changing Acct- | |||
Delay-Time as discussed in [RFC2866], Section 5.2), the Token value | Delay-Time as discussed in [RFC2866], Section 5.2), the Token value | |||
MUST be changed. Note that on reliable transports, packets are never | MUST be changed. Note that on reliable transports, packets are never | |||
retransmitted, and therefore every new packet which is sent has a | retransmitted; therefore, every new packet that is sent has a unique | |||
unique Token value. | Token value. | |||
We note that in previous RADIUS specifications, the Identifier field | We note that in previous RADIUS specifications, the Identifier field | |||
could have the same value for different packets on the same | could have the same value for different packets on the same | |||
connection. For example, Access-Request (Code 1) and Accounting- | connection. For example, Access-Request (Code 1) and Accounting- | |||
Request (Code 4) packets could both use ID 3, and still be treated as | Request (Code 4) packets could both use ID 3 and still be treated as | |||
different packets. This overlap required that RADIUS clients and | different packets. This overlap requires that RADIUS clients and | |||
servers track the Identifier field, not only on a per-connection | servers track the Identifier field, not only on a per-connection | |||
basis, but also on a per-Code basis. This behavior adds complexity | basis, but also on a per-Code basis. This behavior adds complexity | |||
to implementations. | to implementations. | |||
In contrast, the Token values MUST be generated from a 32-bit counter | In contrast, the Token values MUST be generated from a 32-bit counter | |||
which is unique to each connection. Such a counter SHOULD be | that is unique to each connection. Such a counter SHOULD be | |||
initialized to a random value, taken from a random number generator, | initialized to a random value, taken from a random number generator, | |||
whenever a new connection is opened. The counter MUST then be | whenever a new connection is opened. The counter MUST then be | |||
incremented for every unique new packet which is sent by the client. | incremented for every unique new packet that is sent by the client. | |||
Retransmissions of the same packet MUST use the same unchanged Token | Retransmissions of the same packet MUST use the same unchanged Token | |||
value. As the Token value is mandated to be unique per packet, a | value. As the Token value is mandated to be unique per packet, a | |||
duplicate Token value is the only way that a server can detect | duplicate Token value is the only way that a server can detect | |||
duplicate transmissions. | duplicate transmissions. | |||
This counter method ensures that the Tokens are unique, and are also | This counter method ensures that the Tokens are unique and are also | |||
independent of any Code value in the RADIUS packet header. This | independent of any Code value in the RADIUS packet header. This | |||
method is mandated because any other method of generating unique and | method is mandated because any other method of generating unique and | |||
non-conflicting Token values is more complex, with no additional | non-conflicting Token values is more complex, with no additional | |||
benefit and only the likelihood of increased bugs and | benefit and only the likelihood of increased bugs and | |||
interoperability issues. Any other method for generating Token | interoperability issues. Any other method for generating Token | |||
values would require substantially more resources to track | values would require substantially more resources to track | |||
outstanding Token values and their associated expiry times. The | outstanding Token values and their associated expiry times. The | |||
chance that initial values could potentially cause any confusion by | chance that initial values could potentially cause any confusion by | |||
being re-used across two connections is one in 2^32, which is | being reused across two connections is one in 2^32, which is | |||
acceptable. | acceptable. | |||
The purpose for initializing the Token to a random counter is mainly | The purpose for initializing the Token to a random counter is mainly | |||
to aid administrators in debugging systems. If the Token values | to aid administrators in debugging systems. If the Token values | |||
always used the same sequence, then it would easier for a person to | always used the same sequence, then it would easier for a person to | |||
confuse different packets which have the same Token value. By | confuse different packets that have the same Token value. By instead | |||
instead starting with a random value, those values are more evenly | starting with a random value, those values are more evenly | |||
distributed across the set of allowed values, and are therefore more | distributed across the set of allowed values; therefore, they are | |||
likely to be unique. | more likely to be unique. | |||
As there is no special meaning for the Token, there is no meaning | As there is no special meaning for the Token, there is no meaning | |||
when a counter "wraps" around from a high value back to zero. The | when a counter "wraps" around from a high value back to zero. The | |||
originating system can simply continue to increment the Token value | originating system can simply continue to increment the Token value | |||
without taking any special action in that situation. | without taking any special action in that situation. | |||
Once a RADIUS response to a request has been received and there is no | Once a RADIUS response to a request has been received and there is no | |||
need to track the packet any longer, the Token value can be reused. | need to track the packet any longer, the Token value can be reused. | |||
This reuse happens only when the counter "wraps around" after 2^32 | This reuse happens only when the counter "wraps around" after 2^32 | |||
packets have been sent over one connection. This method of managing | packets have been sent over one connection. This method of managing | |||
the counter automatically ensures a long delay (i.e. 2^32 packets) | the counter automatically ensures a long delay (i.e., 2^32 packets) | |||
between multiple uses of the same Token value. This large number of | between multiple uses of the same Token value. This large number of | |||
packets ensures that the only possible situation where there may be | packets ensures that the only possible situation where there may be | |||
conflict is when a client sends billions of packets a second across | conflict is when a client sends billions of packets a second across | |||
one connection, or when a client sends billions of packets without | one connection, or when a client sends billions of packets without | |||
receiving replies. We suggest that such situations are vanishingly | receiving replies. We suggest that such situations are vanishingly | |||
rare. The best solution to those situations would be to limit the | rare. The best solution to those situations would be to limit the | |||
number out outstanding packets over one connection to a number much | number of outstanding packets over one connection to a number much | |||
lower than billions. | lower than billions. | |||
If a RADIUS client has multiple independent subsystems which send | If a RADIUS client has multiple independent subsystems that send | |||
packets to a server, each subsystem MAY open a new connection which | packets to a server, each subsystem MAY open a new connection that is | |||
is unique to that subsystem. There is no requirement that all | unique to that subsystem. There is no requirement that all packets | |||
packets go over one particular connection. That is, despite the use | go over one particular connection. That is, despite the use of a | |||
of a 32-bit Token field, RADIUS/1.1 clients are still permitted to | 32-bit Token field, RADIUS/1.1 clients are still permitted to open | |||
open multiple source ports as discussed in [RFC2865] Section 2.5. | multiple source ports as discussed in [RFC2865], Section 2.5. | |||
While multiple connections from client to server are allowed, We | While multiple connections from client to server are allowed, we | |||
reiterate the suggestion of [RFC3539], Section 3.3 that a single | reiterate the suggestion of [RFC3539], Section 3.3 that a single | |||
connection is preferred to multiple connections. The use of a single | connection is preferred to multiple connections. The use of a single | |||
connection can improve throughput and latency, while simplifying the | connection can improve throughput and latency, while simplifying the | |||
clients efforts to determine server status. | client's efforts to determine server status. | |||
4.2.2. Receiving Packets | 4.2.2. Receiving Packets | |||
A server which receives RADIUS/1.1 packets MUST perform packet | A server that receives RADIUS/1.1 packets MUST perform packet | |||
deduplication for all situations where it is required by RADIUS. | deduplication for all situations where it is required by RADIUS. | |||
Where RADIUS does not require deduplication (e.g. TLS transport), | Where RADIUS does not require deduplication (e.g., TLS transport), | |||
the server SHOULD NOT do deduplication. However, DTLS transport is | the server SHOULD NOT do deduplication. However, DTLS transport is | |||
UDP-based, and therefore still requires deduplication. | UDP-based, and therefore still requires deduplication. | |||
When using RADIUS/1.1, implementations MUST do deduplication only on | When using RADIUS/1.1, implementations MUST do deduplication only on | |||
the Token field, and not on any other field or fields in the packet | the Token field, and not on any other field or fields in the packet | |||
header. A server MUST treat the Token as being an opaque field with | header. A server MUST treat the Token as being an opaque field with | |||
no intrinsic meaning. This requirement makes the receiver behavior | no intrinsic meaning. This requirement makes the receiver behavior | |||
independent of the methods by which the Counter is generated. | independent of the methods by which the Counter is generated. | |||
Where Token deduplication is done, it MUST be done on a per- | Where Token deduplication is done, it MUST be done on a per- | |||
connection basis. If two packets which are received on different | connection basis. If two packets that are received on different | |||
connections contain the same Token value, then those packets MUST be | connections contain the same Token value, then those packets MUST be | |||
treated as distinct (i.e. different) packets. Systems performing | treated as distinct (i.e., different) packets. Systems performing | |||
deduplication MAY still track the packet Code, Length, and Attributes | deduplication MAY still track the packet Code, Length, and Attributes | |||
which is associated with a Token value. If it determines that the | that are associated with a Token value. If it determines that the | |||
sender is re-using Token values for distinct outstanding packets, | sender is reusing Token values for distinct outstanding packets, then | |||
then an error should be logged, and the connection MUST be closed. | an error should be logged, and the connection MUST be closed. There | |||
There is no way to negotiate correct behavior in the protocol. | is no way to negotiate correct behavior in the protocol. Either both | |||
Either the parties both operate normally and can communicate, or one | parties operate normally and can communicate, or one end misbehaves | |||
end misbehaves, and no communication is possible. | and no communication is possible. | |||
Once a reply has been sent, a system doing deduplication SHOULD cache | Once a reply has been sent, a system doing deduplication SHOULD cache | |||
the replies as discussed in [RFC5080], Section 2.2.2: | the replies as discussed in [RFC5080], Section 2.2.2: | |||
Each cache entry SHOULD be purged after a period of time. This | | Each cache entry SHOULD be purged after a period of time. This | |||
time SHOULD be no less than 5 seconds, and no more than 30 | | time SHOULD be no less than 5 seconds, and no more than 30 | |||
seconds. After about 30 seconds, most RADIUS clients and end | | seconds. After about 30 seconds, most RADIUS clients and end | |||
users will have given up on the authentication request. | | users will have given up on the authentication request. | |||
Therefore, there is little value in having a larger cache timeout. | | Therefore, there is little value in having a larger cache timeout. | |||
This change from RADIUS means that the Identifier field is no longer | This change from RADIUS means that the Identifier field is no longer | |||
useful for RADIUS/1.1. The Reserved-1 field (previously used as the | useful for RADIUS/1.1. The Reserved-1 field (previously used as the | |||
Identifier) MUST be set to zero when encoding all RADIUS/1.1 packets. | Identifier) MUST be set to zero when encoding all RADIUS/1.1 packets. | |||
Implementations of RADIUS/1.1 which receive packets MUST ignore this | Implementations of RADIUS/1.1 that receive packets MUST ignore this | |||
field. | field. | |||
5. Attribute handling | 5. Attribute Handling | |||
Most attributes in RADIUS have no special encoding "on the wire", or | Most attributes in RADIUS have no special encoding "on the wire", or | |||
any special meaning between client and server. Unless discussed in | any special meaning between client and server. Unless discussed in | |||
this section, all RADIUS attributes are unchanged in this | this section, all RADIUS attributes are unchanged in this | |||
specification. This requirement includes attributes which contain a | specification. This requirement includes attributes that contain a | |||
tag, as defined in [RFC2868]. | tag, as defined in [RFC2868]. | |||
5.1. Obfuscated Attributes | 5.1. Obfuscated Attributes | |||
Since the (D)TLS layer provides for connection authentication, | Since the (D)TLS layer provides for connection authentication, | |||
integrity checks, and confidentiality, there is no need to hide the | integrity checks, and confidentiality, there is no need to hide the | |||
contents of an attribute on a hop-by-hop basis. As a result, all | contents of an attribute on a hop-by-hop basis. As a result, all | |||
attributes defined as being obfuscated via the shared secret no | attributes defined as being obfuscated via the shared secret no | |||
longer have the obfuscation step applied when RADIUS/1.1 is used. | longer have the obfuscation step applied when RADIUS/1.1 is used. | |||
Instead, those attributes MUST be encoded using the encoding for the | Instead, those attributes MUST be encoded using the encoding for the | |||
underlying data type, with any encryption / obfuscation step omitted. | underlying data type, with any encryption / obfuscation step omitted. | |||
For example, the User-Password attribute is no longer obfuscated, and | For example, the User-Password attribute is no longer obfuscated and | |||
is instead sent as data type "text". | is instead sent as data type "text". | |||
There are risks from sending passwords over the network, even when | There are risks from sending passwords over the network, even when | |||
they are protected by TLS. One such risk comes from the common | they are protected by TLS. One such risk comes from the common | |||
practice of multi-hop RADIUS routing. As all security in RADIUS is | practice of multi-hop RADIUS routing. As all security in RADIUS is | |||
on a hop-by-hop basis, every proxy which receives a RADIUS packet can | on a hop-by-hop basis, every proxy that receives a RADIUS packet can | |||
see (and modify) all of the information in the packet. Sites wishing | see (and modify) all of the information in the packet. Sites wishing | |||
to avoid proxies SHOULD use dynamic peer discovery [RFC7585], which | to avoid proxies SHOULD use dynamic peer discovery [RFC7585], which | |||
permits clients to make connections directly to authoritative servers | permits clients to make connections directly to authoritative servers | |||
for a realm. | for a realm. | |||
There are others ways to mitigate these risks. The simplest is to | There are other ways to mitigate these risks. The simplest is to | |||
follow the requirements of [RFC6614], Section 2.4 item (3) and | follow the requirements of item (3) from [RFC6614], Section 3.4 and | |||
[RFC7360], Section 10.4, which mandates that RADIUS over TLS | also follow [RFC7360], Section 10.4, which mandates that RADIUS over | |||
implementations validate the peer before sending any RADIUS traffic. | TLS implementations validate the peer before sending any RADIUS | |||
traffic. | ||||
Another way to mitigate these risks is for the system being | Another way to mitigate these risks is for the system being | |||
authenticated to use an authentication protocol which never sends | authenticated to use an authentication protocol that never sends | |||
passwords (e.g. EAP-pwd [RFC5931]), or which sends passwords | passwords (e.g., an Extensible Authentication Protocol (EAP) method | |||
protected by a TLS tunnel (e.g. EAP-TTLS [RFC5281]). The processes | like EAP-pwd [RFC5931]), or one that sends passwords protected by a | |||
to choose and configuring an authentication protocol are strongly | TLS tunnel (e.g., EAP Tunneled Transport Layer Security (EAP-TTLS) | |||
site-dependent, so further discussion of these issues are outside of | [RFC5281]). The processes to choose and configure an authentication | |||
the scope of this document. The goal here is to ensure that the | protocol are strongly site dependent, so further discussions of these | |||
reader has enough information to make an informed decision. | issues are outside of the scope of this document. The goal here is | |||
to ensure that the reader has enough information to make an informed | ||||
decision. | ||||
We note that as the RADIUS shared secret is no longer used in this | We note that as the RADIUS shared secret is no longer used in this | |||
specification, it is no longer possible or necessary for any | specification, it is no longer possible or necessary for any | |||
attribute to be obfuscated on a hop-by-hop basis using the previous | attribute to be obfuscated on a hop-by-hop basis using the previous | |||
methods defined for RADIUS. | methods defined for RADIUS. | |||
5.1.1. User-Password | 5.1.1. User-Password | |||
The User-Password attribute ([RFC2865], Section 5.2) MUST be encoded | The User-Password attribute ([RFC2865], Section 5.2) MUST be encoded | |||
the same as any other attribute of data type 'string' ([RFC8044], | the same as any other attribute of data type "string" ([RFC8044], | |||
Section 3.5). | Section 3.5). | |||
The contents of the User-Password field MUST be at least one octet in | The contents of the User-Password field MUST be at least one octet in | |||
length, and MUST NOT be more than 128 octets in length. This | length and MUST NOT be more than 128 octets in length. This | |||
limitation is maintained from [RFC2865], Section 5.2 for | limitation is maintained from [RFC2865], Section 5.2 for | |||
compatibility with historic transports. | compatibility with historic transports. | |||
Note that the User-Password attribute is not of data type 'text'. | Note that the User-Password attribute is not of data type "text". | |||
The original reason in [RFC2865] was because the attribute was | The original reason in [RFC2865] was because the attribute was | |||
encoded as an opaque and obfuscated binary blob. This document does | encoded as an opaque and obfuscated binary blob. This document does | |||
not change the data type of User-Password, even though the attribute | not change the data type of User-Password, even though the attribute | |||
is no longer obfuscated. The contents of the User-Password attribute | is no longer obfuscated. The contents of the User-Password attribute | |||
do not have to be printable text, or UTF-8 data as per the definition | do not have to be printable text or UTF-8 data as per the definition | |||
of the 'text' data type in [RFC8044], Section 3.4. | of the "text" data type in [RFC8044], Section 3.4. | |||
However, implementations should be aware that passwords are often | However, implementations should be aware that passwords are often | |||
printable text, and where the passwords are printable text, it can be | printable text, and where the passwords are printable text, it can be | |||
useful to store and display them as printable text. Where | useful to store and display them as printable text. Where | |||
implementations can process non-printable data in the 'text' data | implementations can process non-printable data in the "text" data | |||
type, they MAY use the data type 'text' for User-Password. | type, they MAY use the data type "text" for User-Password. | |||
5.1.2. CHAP-Challenge | 5.1.2. CHAP-Challenge | |||
[RFC2865], Section 5.3 allows for the CHAP challenge to be taken from | [RFC2865], Section 5.3 allows for the CHAP challenge to be taken from | |||
either the CHAP-Challenge attribute ([RFC2865], Section 5.40), or the | either the CHAP-Challenge attribute ([RFC2865], Section 5.40) or the | |||
Request Authenticator field. Since RADIUS/1.1 connections no longer | Request Authenticator field. Since RADIUS/1.1 connections no longer | |||
use a Request Authenticator field, it is no longer possible to use | use a Request Authenticator field, it is no longer possible to use | |||
the Request Authenticator field as the CHAP-Challenge when this | the Request Authenticator field as the CHAP-Challenge when this | |||
transport profile is used. | transport profile is used. | |||
Clients which send CHAP-Password attribute ([RFC2865], Section 5.3) | Clients that send a CHAP-Password attribute ([RFC2865], Section 5.3) | |||
in an Access-Request packet over a RADIUS/1.1 connection MUST also | in an Access-Request packet over a RADIUS/1.1 connection MUST also | |||
include a CHAP-Challenge attribute ([RFC2865], Section 5.40). | include a CHAP-Challenge attribute ([RFC2865], Section 5.40). | |||
Proxies may need to receive Access-Request packets over a non- | Proxies may need to receive Access-Request packets over a non- | |||
RADIUS/1.1 transport and then forward those packets over a RADIUS/1.1 | RADIUS/1.1 transport and then forward those packets over a RADIUS/1.1 | |||
connection. In that case, if the received Access-Request packet | connection. In that case, if the received Access-Request packet | |||
contains a CHAP-Password attribute but no CHAP-Challenge attribute, | contains a CHAP-Password attribute but no CHAP-Challenge attribute, | |||
the proxy MUST create a CHAP-Challenge attribute in the proxied | the proxy MUST create a CHAP-Challenge attribute in the proxied | |||
packet using the contents from the incoming Request Authenticator of | packet using the contents from the incoming Request Authenticator of | |||
the received packet. | the received packet. | |||
5.1.3. Tunnel-Password | 5.1.3. Tunnel-Password | |||
The Tunnel-Password attribute ([RFC2868], Section 3.5) MUST be | The Tunnel-Password attribute ([RFC2868], Section 3.5) MUST be | |||
encoded the same as any other attribute of data type 'string' which | encoded the same as any other attribute of data type "string" that | |||
contains a tag, such as Tunnel-Client-Endpoint ([RFC2868], | contains a tag, such as Tunnel-Client-Endpoint ([RFC2868], | |||
Section 3.3). Since the attribute is no longer obfuscated in | Section 3.3). Since the attribute is no longer obfuscated in | |||
RADIUS/1.1, there is no need for a Salt field or Data-Length fields | RADIUS/1.1, there is no need for a Salt field or Data-Length fields | |||
as described in [RFC2868], Section 3.5, and the textual value of the | as described in [RFC2868], Section 3.5. The textual value of the | |||
password can simply be encoded as-is. | password can simply be encoded as is. | |||
Note that the Tunnel-Password attribute is not of data type 'text'. | Note that the Tunnel-Password attribute is not of data type "text". | |||
The original reason in [RFC2868] was because the attribute was | The original reason in [RFC2868] was because the attribute was | |||
encoded as an opaque and obfuscated binary blob. We maintain that | encoded as an opaque and obfuscated binary blob. We maintain that | |||
data type here, even though the attribute is no longer obfuscated. | data type here, even though the attribute is no longer obfuscated. | |||
The contents of the Tunnel-Password attribute do not have to be | The contents of the Tunnel-Password attribute do not have to be | |||
printable text, or UTF-8 data as per the definition of the 'text' | printable text or UTF-8 data as per the definition of the "text" data | |||
data type in [RFC8044], Section 3.4. | type in [RFC8044], Section 3.4. | |||
However, implementations should be aware that passwords are often | However, implementations should be aware that passwords are often | |||
printable text, and where the passwords are printable text, it can be | printable text, and where the passwords are printable text, it can be | |||
useful to store and display them as printable text. Where | useful to store and display them as printable text. Where | |||
implementations can process non-printable data in the 'text' data | implementations can process non-printable data in the "text" data | |||
type, they MAY use the data type 'text' for Tunnel-Password. | type, they MAY use the data type "text" for Tunnel-Password. | |||
5.1.4. Vendor-Specific Attributes | 5.1.4. Vendor-Specific Attributes | |||
Any Vendor-Specific attribute which uses similar obfuscation MUST be | Any Vendor-Specific attribute that uses similar obfuscation MUST be | |||
encoded as per their base data type. Specifically, the MS-MPPE-Send- | encoded as per their base data type. Specifically, the MS-MPPE-Send- | |||
Key and MS-MPPE-Recv-Key attributes ([RFC2548], Section 2.4) MUST be | Key and MS-MPPE-Recv-Key attributes ([RFC2548], Section 2.4) MUST be | |||
encoded as any other attribute of data type 'string' ([RFC8044], | encoded as any other attribute of data type "string" ([RFC8044], | |||
Section 3.4). | Section 3.4). | |||
5.2. Message-Authenticator | 5.2. Message-Authenticator | |||
The Message-Authenticator attribute ([RFC3579], Section 3.2) MUST NOT | The Message-Authenticator attribute ([RFC3579], Section 3.2) MUST NOT | |||
be sent over a RADIUS/1.1 connection. That attribute is not used or | be sent over a RADIUS/1.1 connection. That attribute is not used or | |||
needed in RADIUS/1.1. | needed in RADIUS/1.1. | |||
If the Message-Authenticator attribute is received over a RADIUS/1.1 | If the Message-Authenticator attribute is received over a RADIUS/1.1 | |||
connection, the attribute MUST be silently discarded, or treated as | connection, the attribute MUST be silently discarded or treated as an | |||
an "invalid attribute", as defined in [RFC6929], Section 2.8. That | "invalid attribute", as defined in [RFC6929], Section 2.8. That is, | |||
is, the Message-Authenticator attribute is no longer used to | the Message-Authenticator attribute is no longer used to authenticate | |||
authenticate packets for the RADIUS/1.1 transport. Its existence (or | packets for the RADIUS/1.1 transport. Its existence (or not) in this | |||
not) in this transport is meaningless. | transport is meaningless. | |||
A system which receives a Message-Authenticator attribute in a packet | A system that receives a Message-Authenticator attribute in a packet | |||
MUST treat it as an "invalid attribute" as defined in [RFC6929], | MUST treat it as an "invalid attribute" as defined in [RFC6929], | |||
Section 2.8. That is, the packet can still be processed, even if the | Section 2.8. That is, the packet can still be processed, even if the | |||
Message-Authenticator attribute is ignored. | Message-Authenticator attribute is ignored. | |||
For proxies, the Message-Authenticator attribute has always been | For proxies, the Message-Authenticator attribute has always been | |||
defined as being created and consumed on a "hop by hop" basis. That | defined as being created and consumed on a "hop-by-hop" basis. That | |||
is, a proxy which received a Message-Authenticator attribute from a | is, a proxy that received a Message-Authenticator attribute from a | |||
client would never forward that attribute as-is to another server. | client would never forward that attribute as is to another server. | |||
Instead, the proxy would either suppress, or re-create, the Message- | Instead, the proxy would either suppress or recreate the Message- | |||
Authenticator attribute in the outgoing request. This existing | Authenticator attribute in the outgoing request. This existing | |||
behavior is leveraged in RADIUS/1.1 to suppress the use of Message- | behavior is leveraged in RADIUS/1.1 to suppress the use of the | |||
Authenticator over a RADIUS/1.1 connection. | Message-Authenticator over a RADIUS/1.1 connection. | |||
A proxy may receive an Access-Request packet over a RADIUS/1.1 | A proxy may receive an Access-Request packet over a RADIUS/1.1 | |||
connection, and then forward that packet over a RADIUS/UDP or a | connection and then forward that packet over a RADIUS/UDP or a | |||
RADIUS/TCP connection. In that situation, the proxy SHOULD add a | RADIUS/TCP connection. In that situation, the proxy SHOULD add a | |||
Message-Authenticator attribute to every Access-Request packet which | Message-Authenticator attribute to every Access-Request packet that | |||
is sent over an insecure transport protocol. | is sent over an insecure transport protocol. | |||
The original text in [RFC3579], Section 3.3, "Note 1" paragraph | The original text in [RFC3579], Section 3.3, Note 1 required that the | |||
required that the Message-Authenticator attribute be present for | Message-Authenticator attribute be present for certain Access-Request | |||
certain Access-Request packets. It also required the use of Message- | packets. It also required the use of the Message-Authenticator when | |||
Authenticator when the Access-Request packet contained an EAP-Message | the Access-Request packet contained an EAP-Message attribute. | |||
attribute. Experience has shown that some RADIUS clients never use | Experience has shown that some RADIUS clients never use the Message- | |||
the Message-Authenticator, even for the situations where its use is | Authenticator, even for the situations where its use is suggested. | |||
suggested. | ||||
When the Message-Authenticator attribute is missing from Access- | When the Message-Authenticator attribute is missing from Access- | |||
Request packets, it is often possible to trivially forge or replay | Request packets, it is often possible to trivially forge or replay | |||
those packets. As such, this document RECOMMENDS that RADIUS clients | those packets. As such, it is RECOMMENDED that RADIUS clients always | |||
always include Message-Authenticator in Access-Request packets when | include Message-Authenticator in Access-Request packets when using | |||
using UDP or TCP transport. As the scope of this document is limited | UDP or TCP transport. As the scope of this document is limited to | |||
to defining RADIUS/1.1, we cannot mandate that behavior here. | defining RADIUS/1.1, we cannot mandate that behavior here. Instead, | |||
Instead, we can note that there are no known negatives to this | we can note that there are no known negatives to this behavior, and | |||
behavior, and there are definite positives, such as increased | there are definite positives, such as increased security. | |||
security. | ||||
5.3. Message-Authentication-Code | 5.3. Message-Authentication-Code | |||
Similarly, the Message-Authentication-Code attribute defined in | Similarly, the Message-Authentication-Code attribute defined in | |||
[RFC6218], Section 3.3 MUST NOT be sent over a RADIUS/1.1 connection. | [RFC6218], Section 3.3 MUST NOT be sent over a RADIUS/1.1 connection. | |||
If it is received in a packet, it MUST be treated as "invalid | If it is received in a packet, it MUST be treated as an "invalid | |||
attribute" as defined in [RFC6929], Section 2.8. | attribute" as defined in [RFC6929], Section 2.8. | |||
As the Message-Authentication-Code attribute is no longer used in | As the Message-Authentication-Code attribute is no longer used in | |||
RADIUS/1.1, the related MAC-Randomizer attribute [RFC6218], | RADIUS/1.1, the related MAC-Randomizer attribute ([RFC6218], | |||
Section 3.2 MUST NOT be sent over a RADIUS/1.1 connection. If it is | Section 3.2) MUST NOT be sent over a RADIUS/1.1 connection. If it is | |||
received in a packet, it MUST be treated as "invalid attribute" as | received in a packet, it MUST be treated as an "invalid attribute" as | |||
defined in [RFC6929], Section 2.8. | defined in [RFC6929], Section 2.8. | |||
5.4. CHAP, MS-CHAP, etc. | 5.4. CHAP, MS-CHAP, and Similar Attributes | |||
While some attributes such as CHAP-Password, etc. depend on insecure | While some attributes such as CHAP-Password depend on insecure | |||
cryptographic primitives such as MD5, these attributes are treated as | cryptographic primitives such as MD5, these attributes are treated as | |||
opaque blobs when sent between a RADIUS client and server. The | opaque blobs when sent between a RADIUS client and server. The | |||
contents of the attributes are not obfuscated, and they do not depend | contents of the attributes are not obfuscated, and they do not depend | |||
on the RADIUS shared secret. As a result, these attributes are | on the RADIUS shared secret. As a result, these attributes are | |||
unchanged in RADIUS/1.1. | unchanged in RADIUS/1.1. | |||
Similarly, MS-CHAP depends on MD4, and RADIUS/1.1 does not change the | Similarly, MS-CHAP depends on MD4, and RADIUS/1.1 does not change the | |||
definition of any MS-CHAP attributes. However, MS-CHAP has been | definition of any MS-CHAP attributes. However, MS-CHAP has been | |||
broken for decades, as noted in [ASLEAP]. The only appropriate use- | broken for decades, as noted in [ASLEAP]. The only appropriate use | |||
case for MS-CHAP is when it is protected by a secure transport such | case for MS-CHAP is when it is protected by a secure transport such | |||
as RADIUS/TLS, RADIUS/DTLS, or when it is used for "inner tunnel" | as RADIUS/TLS or RADIUS/DTLS, or when it is used for "inner tunnel" | |||
authentication methods as with PEAP or TTLS. | authentication methods as with the Protected Extensible | |||
Authentication Protocol (PEAP) or TTLS. | ||||
A server implementing this specification can proxy CHAP, MS-CHAP, | A server implementing this specification can proxy and authenticate | |||
etc. without any issue. A server implementing this specification can | CHAP, MS-CHAP, etc. without any issue. The RADIUS/1.1 protocol | |||
authenticate CHAP, MS-CHAP, etc. without any issue. The RADIUS/1.1 | changes how RADIUS packets are authenticated and how "secret" data is | |||
protocol changes how RADIUS packets are authenticated, and how | obfuscated inside of a RADIUS packet. It does not change any | |||
"secret" data is obfuscated inside of a RADIUS packet. It does not | authentication method that is transported inside of RADIUS. | |||
change any authentication method which is transported inside of | ||||
RADIUS. | ||||
5.5. Original-Packet-Code | 5.5. Original-Packet-Code | |||
[RFC7930], Section 4 defines an Original-Packet-Code attribute. This | [RFC7930], Section 4 defines an Original-Packet-Code attribute. This | |||
attribute is needed because otherwise it is impossible to correlate | attribute is needed because otherwise it is impossible to correlate | |||
the Protocol-Error response packet with a particular request packet. | the Protocol-Error response packet with a particular request packet. | |||
The definition in [RFC7930], Section 4 describes the reasoning behind | The definition in [RFC7930], Section 4 describes the reasoning behind | |||
this need: | this need: | |||
The Original-Packet-Code contains the code from the request that | | The Original-Packet-Code contains the code from the request that | |||
generated the protocol error so that clients can disambiguate | | generated the protocol error so that clients can disambiguate | |||
requests with different codes and the same ID. | | requests with different codes and the same ID. | |||
This attribute is no longer needed in RADIUS/1.1. The Identifier | This attribute is no longer needed in RADIUS/1.1. The Identifier | |||
field is unused, so it impossible for two requests to have the "same" | field is unused, so it impossible for two requests to have the "same" | |||
ID. Instead, the Token field permits clients and servers to | ID. Instead, the Token field permits clients and servers to | |||
correlate requests and responses, independent of the Code value being | correlate requests and responses, independent of the Code value being | |||
used. | used. | |||
Therefore, the Original-Packet-Code attribute ([RFC7930], Section 4) | Therefore, the Original-Packet-Code attribute ([RFC7930], Section 4) | |||
MUST NOT be sent over a RADIUS/1.1 connection. If it is received in | MUST NOT be sent over a RADIUS/1.1 connection. If it is received in | |||
a packet, it MUST be treated as "invalid attribute" as defined in | a packet, it MUST be treated as an "invalid attribute" as defined in | |||
[RFC6929], Section 2.8. | [RFC6929], Section 2.8. | |||
6. Other Considerations when using ALPN | 6. Other Considerations When Using ALPN | |||
Most of the differences between RADIUS and RADIUS/1.1 are in the | Most of the differences between RADIUS and RADIUS/1.1 are in the | |||
packet header and attribute handling, as discussed above. The | packet header and attribute handling, as discussed above. The | |||
remaining issues are a small set of unrelated topics, and are | remaining issues are a small set of unrelated topics, and are | |||
discussed here. | discussed here. | |||
6.1. Protocol-Error | 6.1. Protocol-Error | |||
There are a number of situations where a RADIUS server is unable to | There are a number of situations where a RADIUS server is unable to | |||
respond to a request. One situation is where the server depends on a | respond to a request. One situation is where the server depends on a | |||
database, and the database is down. While arguably the server should | database, and the database is down. While arguably the server should | |||
close all incoming connections when it is unable to do anything, this | close all incoming connections when it is unable to do anything, this | |||
action is not always effective. A client may aggressively try to | action is not always effective. A client may aggressively try to | |||
open new connections, or send packets to an unconnected UDP | open new connections or send packets to an unconnected UDP | |||
destination where the server is not listening. Another situation | destination where the server is not listening. Another situation | |||
where the server is unable to respond is when the server is proxying | where the server is unable to respond is when the server is proxying | |||
packets, and the outbound connections are either full or failed. | packets, and the outbound connections are either full or failed. | |||
In all RADIUS spercifications prior to this one, there is no way for | In all RADIUS specifications prior to this one, there is no way for | |||
the server to send a client the positive signal that it received a | the server to send a client the positive signal that it received a | |||
request, but is unable to send a response. Instead, the server | request but is unable to send a response. Instead, the server | |||
usually just discards the request, which to the client is | usually just discards the request, which to the client is | |||
indistinguishable from the situation where the server is down. This | indistinguishable from the situation where the server is down. This | |||
failure case is made worse by the fact that perhaps some proxied | failure case is made worse by the fact that perhaps some proxied | |||
packets succeed while others fail. The client can only conclude then | packets succeed while others fail. The client can only conclude then | |||
that the server is randomly dropping packets, and is unreliable. | that the server is randomly dropping packets and is unreliable. | |||
It would be very useful for servers to signal to clients that they | It would be very useful for servers to signal to clients that they | |||
have received a request, but are unable to process it. This | have received a request but are unable to process it. This | |||
specification uses the Protocol-Error packet [RFC7930], Section 4 as | specification uses the Protocol-Error packet ([RFC7930], Section 4) | |||
that signal. The use of Protocol-Error allows for both hop-by-hop | as that signal. The use of Protocol-Error allows for both hop-by-hop | |||
signaling in the case of proxy forwarding errors, and also for end- | signaling in the case of proxy forwarding errors, and also for end- | |||
to-end signaling of server to client. Such signaling should greatly | to-end signaling of server to client. Such signaling should greatly | |||
improve the robustness of the RADIUS protocol. | improve the robustness of the RADIUS protocol. | |||
When a RADIUS/1.1 server determines that it is unable to process an | When a RADIUS/1.1 server determines that it is unable to process an | |||
Access-Request or Accounting-Request packet, it MUST respond with a | Access-Request or Accounting-Request packet, it MUST respond with a | |||
Protocol-Error packet containing an Error-Cause attribute. A proxy | Protocol-Error packet containing an Error-Cause attribute. A proxy | |||
which cannot forward the packet MUST respond with either 502 (Request | that cannot forward the packet MUST respond with either 502 (Request | |||
Not Routable (Proxy)), or 505 (Other Proxy Processing Error). This | Not Routable (Proxy)) or 505 (Other Proxy Processing Error). This | |||
requirement is to help distinguish failures in the proxy chain from | requirement is to help distinguish failures in the proxy chain from | |||
failures at the final (i.e. home) server, | failures at the final (i.e., home) server. | |||
For a home server, if none of the Error-Cause values match the reason | For a home server, if none of the Error-Cause values match the reason | |||
for the failure, then the value 506 (Resources Unavailable) MUST be | for the failure, then the value 506 (Resources Unavailable) MUST be | |||
used. | used. | |||
When a RADIUS proxy receives a Protocol-Error reply, it MUST examine | When a RADIUS proxy receives a Protocol-Error reply, it MUST examine | |||
the value of the Error-Cause attribute. If there is no Error-Cause | the value of the Error-Cause attribute. If there is no Error-Cause | |||
attribute, or its value is something other than 502 (Request Not | attribute, or if its value is something other than 502 (Request Not | |||
Routable (Proxy)), 505 (Other Proxy Processing Error), or 506 | Routable (Proxy)), 505 (Other Proxy Processing Error), or 506 | |||
(Resources Unavailable), the proxy MUST return the Protocol-Error | (Resources Unavailable), then the proxy MUST return the Protocol- | |||
response packet to the client, and include the Error-Cause attribute | Error response packet to the client and include the Error-Cause | |||
from the response it received. This process allows for full "end to | attribute from the response it received. This process allows for | |||
end" signaling of servers to clients. | full "end-to-end" signaling of servers to clients. | |||
In all situations other then outlined in the preceding paragraph, a | In all situations other than those outlined in the preceding | |||
client which receives a Protocol-Error reply MUST re-process the | paragraph, a client that receives a Protocol-Error reply MUST | |||
original outgoing packet through the client forwarding algorithm. | reprocess the original outgoing packet through the client forwarding | |||
This requirement includes both clients which originate RADIUS | algorithm. This requirement includes both clients that originate | |||
traffic, and proxies which see an Error-Cause attribute of 502 | RADIUS traffic and proxies that see an Error-Cause attribute of 502 | |||
(Request Not Routable (Proxy)), or 505 (Other Proxy Processing | (Request Not Routable (Proxy)) or 505 (Other Proxy Processing Error). | |||
Error). | ||||
The expected result of this processing is that the client forwards | The expected result of this processing is that the client forwards | |||
the packet to a different server. Clients MUST NOT forward the | the packet to a different server. Clients MUST NOT forward the | |||
packet over the same connection, and SHOULD NOT forward it to over a | packet over the same connection and SHOULD NOT forward it over a | |||
different connection to the same server. | different connection to the same server. | |||
This process may continue over multiple connections and multiple | This process may continue over multiple connections and multiple | |||
servers, until the client either times out the request, or fails to | servers, until the client either times out the request or fails to | |||
find a forwarding destination for the packet. A proxy which is | find a forwarding destination for the packet. A proxy that is unable | |||
unable to forward a packet MUST reply with a Protocol-Error packet | to forward a packet MUST reply with a Protocol-Error packet | |||
containing Error-Cause, as defined above. A client which originates | containing an Error-Cause, as defined above. A client that | |||
packets MUST treat such a request as if it had received no response. | originates packets MUST treat such a request as if it had received no | |||
response. | ||||
This behavior is intended to improve the stability of the RADIUS | This behavior is intended to improve the stability of the RADIUS | |||
protocol by addressing issues first raised in [RFC3539], Section 2.8. | protocol by addressing issues first raised in [RFC3539], Section 2.8. | |||
6.2. Status-Server | 6.2. Status-Server | |||
[RFC6613], Section 2.6.5, and by extension [RFC7360], suggest that | [RFC6613], Section 2.6.5, and by extension [RFC7360], suggest that | |||
the Identifier value zero (0) be reserved for use with Status-Server | the Identifier value zero (0) be reserved for use with Status-Server | |||
as an application-layer watchdog. This practice MUST NOT be used for | as an application-layer watchdog. This practice MUST NOT be used for | |||
RADIUS/1.1, as the Identifier field is not used in this transport | RADIUS/1.1, as the Identifier field is not used in this transport | |||
profile. | profile. | |||
The rationale for reserving one value of the Identifier field was the | The rationale for reserving one value of the Identifier field was the | |||
limited number of Identifiers available (256), and the overlap in | limited number of Identifiers available (256) and the overlap in | |||
Identifiers between Access-Request packets and Status-Server packets. | Identifiers between Access-Request packets and Status-Server packets. | |||
If all 256 Identifier values had been used to send Access-Request | If all 256 Identifier values had been used to send Access-Request | |||
packets, then there would be no Identifier value available for | packets, then there would be no Identifier value available for | |||
sending a Status-Server packet. | sending a Status-Server packet. | |||
In contrast, the Token field allows for 2^32 outstanding packets on | In contrast, the Token field allows for 2^32 outstanding packets on | |||
one RADIUS/1.1 connection. If there is a need to send a Status- | one RADIUS/1.1 connection. If there is a need to send a Status- | |||
Server packet, it is nearly always possible to allocate a new value | Server packet, it is nearly always possible to allocate a new value | |||
for the Token field. If instead there are 2^32 outstanding packets | for the Token field. If instead there are 2^32 outstanding packets | |||
for one connection, then it is likely that something has gone | for one connection, then it is likely that something has gone | |||
catastrophically wrong. In that case, the safest way forward is | catastrophically wrong. In that case, the safest way forward is | |||
likely to just close the connection. | likely to just close the connection. | |||
6.3. Proxies | 6.3. Proxies | |||
A RADIUS proxy normally decodes and then re-encodes all attributes, | A RADIUS proxy normally decodes and then re-encodes all attributes, | |||
included obfuscated ones. A RADIUS proxy will not generally rewrite | including obfuscated ones. A RADIUS proxy will not generally rewrite | |||
the content of the attributes it proxies (unless site-local policy | the content of the attributes it proxies (unless site-local policy | |||
requires such a rewrite). While some attributes may be modified due | requires such a rewrite). While some attributes may be modified due | |||
to administrative or policy rules on the proxy, the proxy will | to administrative or policy rules on the proxy, the proxy will | |||
generally not rewrite the contents of attributes such as User- | generally not rewrite the contents of attributes such as User- | |||
Password, Tunnel-Password, CHAP-Password, MS-CHAP-Password, MS-MPPE | Password, Tunnel-Password, CHAP-Password, MS-CHAP-Password, MS-MPPE | |||
keys, etc. All attributes are therefore transported through a | keys, etc. Therefore, all attributes are transported through a | |||
RADIUS/1.1 connection without changing their values or contents. | RADIUS/1.1 connection without changing their values or contents. | |||
A proxy may negotiate RADIUS/1.1 (or not) with a particular client or | A proxy may negotiate RADIUS/1.1 (or not) with a particular client or | |||
clients, and it may negotiate RADIUS/1.1 (or not) with a server or | clients, and it may negotiate RADIUS/1.1 (or not) with a server or | |||
servers it connect to, in any combination. As a result, this | servers it connects to, in any combination. As a result, this | |||
specification is fully compatible with all past, present, and future | specification is fully compatible with all past, present, and future | |||
RADIUS attributes. | RADIUS attributes. | |||
7. Other RADIUS Considerations | 7. Other RADIUS Considerations | |||
This section discusses issues in RADIUS which need to be addressed in | This section discusses issues in RADIUS that need to be addressed in | |||
order to support ALPN, but which aren't direcly part of the | order to support ALPN, but which aren't directly part of the | |||
RADIUS/1.1 protocol. | RADIUS/1.1 protocol. | |||
7.1. Crypto-Agility | 7.1. Crypto-Agility | |||
The crypto-agility requirements of [RFC6421] are addressed in | The crypto-agility requirements of [RFC6421] are addressed in | |||
[RFC6614], Appendix C, and in [RFC7360], Section 10.1. This | [RFC6614], Appendix C and in [RFC7360], Section 10.1. This | |||
specification makes no changes from, or additions to, those | specification makes no changes or additions to those specifications. | |||
specifications. The use of ALPN, and the removal of MD5 has no | The use of ALPN and the removal of MD5 has no impact on the security | |||
impact on security or privacy of the protocol. | or privacy of the protocol. | |||
RADIUS/TLS has been widely deployed in at least eduroam [RFC7593] and | RADIUS/TLS has been widely deployed in at least eduroam ([RFC7593] | |||
[EDUROAM] and in OpenRoaming [OPENROAMING]. RADIUS/DTLS has seen | and [EDUROAM]) and in OpenRoaming [OPENROAMING]. RADIUS/DTLS has | |||
less adoption, but it is known to be supported in many RADIUS clients | seen less adoption, but it is known to be supported in many RADIUS | |||
and servers. | clients and servers. | |||
It is RECOMMENDED that all implementations of historic RADIUS/TLS be | It is RECOMMENDED that all implementations of historic RADIUS/TLS be | |||
updated to support this specification. Where a system already | updated to support this specification. Where a system already | |||
implements RADIUS over TLS, the additional effort to implement this | implements RADIUS over TLS, the additional effort to implement this | |||
specification is minimal. Once implementations support it, | specification is minimal. Once implementations support it, | |||
administrators can gain the benefit of it with little or no | administrators can gain the benefit of it with little or no | |||
configuration changes. This specification is backwards compatible | configuration changes. This specification is backwards compatible | |||
with [RFC6614] and [RFC7360]. It is only potentially subject to | with [RFC6614] and [RFC7360]. It is only potentially subject to | |||
down-bidding attacks if implementations do not enforce ALPN | down-bidding attacks if implementations do not enforce ALPN correctly | |||
negotiation correctly on session resumption. | on session resumption. | |||
All crypto-agility needed or used by this specification is | All crypto-agility needed or used by this specification is | |||
implemented in TLS. This specification also removes all | implemented in TLS. This specification also removes all | |||
cryptographic primitives from the application-layer protocol (RADIUS) | cryptographic primitives from the application-layer protocol (RADIUS) | |||
being transported by TLS. As discussed in the following section, | being transported by TLS. As discussed in the following section, | |||
this specification also bans the development of all new cryptographic | this specification also bans the development of all new cryptographic | |||
or crypto-agility methods in the RADIUS protocol. | or crypto-agility methods in the RADIUS protocol. | |||
7.2. Error-Cause Attribute | 7.2. Error-Cause Attribute | |||
skipping to change at page 31, line 10 ¶ | skipping to change at line 1401 ¶ | |||
appear in Access-Reject packets. No explanation is given for this | appear in Access-Reject packets. No explanation is given for this | |||
change from [RFC5176]. There is not even an acknowledgment that this | change from [RFC5176]. There is not even an acknowledgment that this | |||
suggestion is a change from any previous specification. We correct | suggestion is a change from any previous specification. We correct | |||
that issue here. | that issue here. | |||
This specification updates [RFC5176] to allow the Error-Cause | This specification updates [RFC5176] to allow the Error-Cause | |||
attribute to appear in Access-Reject packets. It is RECOMMENDED that | attribute to appear in Access-Reject packets. It is RECOMMENDED that | |||
implementations include the Error-Cause attribute in Access-Reject | implementations include the Error-Cause attribute in Access-Reject | |||
packets where appropriate. | packets where appropriate. | |||
That is, the reason for sending the Access-Reject packet (or | That is, the reason for sending the Access-Reject packet (or the | |||
Protocol-Error packet) may match a defined Error-Cause value. In | Protocol-Error packet) may match a defined Error-Cause value. In | |||
that case, it is useful for implementations to send an Error-Cause | that case, it is useful for implementations to send an Error-Cause | |||
attribute with that value. This behavior can help RADIUS system | attribute with that value. This behavior can help RADIUS system | |||
administrators debug issues in complex proxy chains. | administrators debug issues in complex proxy chains. | |||
For example, a proxy may normally forward Access-Request packets | For example, a proxy may normally forward Access-Request packets that | |||
which contain EAP-Message attributes. The proxy can determine if the | contain EAP-Message attributes. The proxy can determine if the | |||
contents of the EAP-Message are invalid. On example of an invalid | contents of the EAP-Message are invalid. One example of an invalid | |||
EAP-Message is where the first octet has value larger than 4. In | EAP-Message is where the first octet has value larger than 4. In | |||
that case, there may be no benefit to forwarding the packet, as the | that case, there may be no benefit to forwarding the packet, as the | |||
home server will reject it. It may then then possible for the proxy | home server will reject it. It may then be possible for the proxy | |||
(with the knowledge and consent of involved parties) to immediately | (with the knowledge and consent of involved parties) to immediately | |||
reply with an Access-Reject containing an Error-Cause attribute with | reply with an Access-Reject containing an Error-Cause attribute with | |||
value 202 for "Invalid EAP Packet (Ignored)". | value 202 (Invalid EAP Packet (Ignored)). | |||
Another possibility is that if a proxy is configured to forward | Another possibility is that a proxy is configured to forward packets | |||
packets for a particular realm, but it has determined that there are | for a particular realm, but it has determined that there are no | |||
no available connections to the next hop for that realm. In that | available connections to the next hop for that realm. In that case, | |||
case, it may be possible for the proxy (again with the knowledge and | it may be possible for the proxy (again, with the knowledge and | |||
consent of involved parties) to reply with an Access-Reject | consent of involved parties) to reply with an Access-Reject | |||
containing an Error-Cause attribute with value 502 for "Request Not | containing an Error-Cause attribute with value 502 (Request Not | |||
Routable (Proxy)" | Routable (Proxy)). | |||
These examples are given only for illustrative and informational | These examples are given only for illustrative and informational | |||
purposes. While it is useful to return an informative value for the | purposes. While it is useful to return an informative value for the | |||
Error-Cause attribute, proxies can only modify the traffic they | Error-Cause attribute, proxies can only modify the traffic they | |||
forward with the explicit knowledge and consent of all involved | forward with the explicit knowledge and consent of all involved | |||
parties. | parties. | |||
7.3. Future Standards | 7.3. Future Standards | |||
Future work may define new attributes, packet types, etc. It is | Future work may define new attributes, packet types, etc. It is | |||
important to be able to do such work without requiring that every new | important to be able to do such work without requiring that every new | |||
standard mention RADIUS/1.1 explicitly. This document defines | standard mention RADIUS/1.1 explicitly. This document defines | |||
RADIUS/1.1 as having functional overlap with legacy RADIUS: the | RADIUS/1.1 as having functional overlap with legacy RADIUS: the | |||
protocol state machine is unchanged, the packet header Code field is | protocol state machine is unchanged, the packet header Code field is | |||
unchanged, and the attribute format is largely unchanged. As a | unchanged, and the attribute format is largely unchanged. As a | |||
result, any new packet Code or attribute defined for RADIUS is | result, any new packet Code or attribute defined for RADIUS is | |||
explicitly compatible with RADIUS/1.1: the field contents and | explicitly compatible with RADIUS/1.1; the field contents and | |||
meanings are identical. The only difference between the two | meanings are identical. The only difference between the two | |||
protocols is that obfuscated attributes in RADIUS are not obfuscated | protocols is that obfuscated attributes in RADIUS are not obfuscated | |||
in RADIUS/1.1, and this document defines how that mapping is done. | in RADIUS/1.1, and this document defines how that mapping is done. | |||
Any future specification needs to mention RADIUS/1.1 only if it adds | Any future specification only needs to mention RADIUS/1.1 if it adds | |||
fields to the RADIUS/1.1 packet header. Otherwise, transport | fields to the RADIUS/1.1 packet header. Otherwise, transport | |||
considerations for RADIUS/1.1 are identical to RADIUS over (D)TLS. | considerations for RADIUS/1.1 are identical to RADIUS over (D)TLS. | |||
We reiterate that this specification defines a new transport profile | We reiterate that this specification defines a new transport profile | |||
for RADIUS. It does not define a completely new protocol. Any | for RADIUS. It does not define a completely new protocol. Any | |||
future specification which defines a new attribute MUST define it for | future specification that defines a new attribute MUST define it for | |||
RADIUS/UDP first, after which those definitions can be applied to | RADIUS/UDP first, and afterwards those definitions can be applied to | |||
this transport profile. | this transport profile. | |||
New specifications MAY define new attributes which use the | New specifications MAY define new attributes that use the obfuscation | |||
obfuscation methods for User-Password as defined in [RFC2865], | methods for User-Password as defined in [RFC2865], Section 5.2 or for | |||
Section 5.2, or for Tunnel-Password as defined in [RFC2868], | Tunnel-Password as defined in [RFC2868], Section 3.5. There is no | |||
Section 3.5. There is no need for those specifications to describe | need for those specifications to describe how those new attributes | |||
how those new attributes are transported in RADIUS/1.1. Since | are transported in RADIUS/1.1. Since RADIUS/1.1 does not use MD5, | |||
RADIUS/1.1 does not use MD5, any obfuscated attributes will by | any obfuscated attributes will by definition be transported as their | |||
definition be transported as their underlying data type, "text" | underlying data type "text" ([RFC8044], Section 3.4) or "string" | |||
([RFC8044], Section 3.4) or "string" ([RFC8044], Section 3.5). | ([RFC8044], Section 3.5). | |||
New RADIUS specifications MUST NOT define attributes which can only | New RADIUS specifications MUST NOT define attributes that can only be | |||
be transported via RADIUS over TLS. The RADIUS protocol has no way | transported via RADIUS over TLS. The RADIUS protocol has no way to | |||
to signal the security requirements of individual attributes. Any | signal the security requirements of individual attributes. Any | |||
existing implementation will handle these new attributes as "invalid | existing implementation will handle these new attributes as "invalid | |||
attributes" ([RFC6929], Section 2.8), and could forward them over an | attributes" ([RFC6929], Section 2.8) and could forward them over an | |||
insecure link. As RADIUS security and signaling is hop-by-hop, there | insecure link. As RADIUS security and signaling is hop-by-hop, there | |||
is no way for a RADIUS client or server to even know if such | is no way for a RADIUS client or server to even know if such | |||
forwarding is taking place. For these reasons and more, it is | forwarding is taking place. For these reasons and more, it is | |||
therefore inappropriate to define new attributes which are only | therefore inappropriate to define new attributes that are only secure | |||
secure if they use a secure transport layer. | if they use a secure transport layer. | |||
The result is that specifications do not need to mention this | The result is that specifications do not need to mention this | |||
transport profile, or make any special provisions for dealing with | transport profile or make any special provisions for dealing with it. | |||
it. This specification defines how RADIUS packet encoding, decoding, | This specification defines how RADIUS packet encoding, decoding, | |||
authentication, and verification are performed when using RADIUS/1.1. | authentication, and verification are performed when using RADIUS/1.1. | |||
So long as any future specification uses the existing encoding, etc. | So long as any future specification uses the existing schemes for | |||
schemes defined for RADIUS, no additional text in future documents is | encoding, decoding, etc., that are defined for RADIUS, no additional | |||
necessary in order to be compatible with RADIUS/1.1. | text in future documents is necessary in order to be compatible with | |||
RADIUS/1.1. | ||||
We note that it is theoretically possible for future standards to | We note that it is theoretically possible for future standards to | |||
define new cryptographic primitives for use with RADIUS/UDP. In that | define new cryptographic primitives for use with RADIUS/UDP. In that | |||
case, those documents would likely have to describe how to transport | case, those documents would likely have to describe how to transport | |||
that data in RADIUS/1.1. We believe that such standards are unlikely | that data in RADIUS/1.1. We believe that such standards are unlikely | |||
to be published, as other efforts in the RADEXT working group are | to be published, as other efforts in the RADEXT Working Group are | |||
forbidding such updates to RADIUS. | forbidding such updates to RADIUS. | |||
8. Implementation Status | 8. Privacy Considerations | |||
(This section to be removed by the RFC editor.) | ||||
This specification is being implemented (client and server) in the | ||||
FreeRADIUS project which is hosted on GitHub at | ||||
https://github.com/FreeRADIUS/freeradius-server/tree/v3.2.x The code | ||||
implementation "diff" is approximately 1,000 lines, including build | ||||
system changes and changes to configuration parsers. | ||||
9. Privacy Considerations | ||||
This specification requires secure transport for RADIUS. RADIUS/1.1. | This specification requires secure transport for RADIUS. RADIUS/1.1 | |||
has all of the privacy benefits of RADIUS/TLS [RFC6614] and RADIUS/ | has all of the privacy benefits of RADIUS/TLS [RFC6614] and RADIUS/ | |||
DTLS [RFC7360], and none of the privacy or security issues of RADIUS/ | DTLS [RFC7360] and none of the privacy or security issues of RADIUS/ | |||
UDP [RFC2865] or RADIUS/TCP [RFC6613]. | UDP [RFC2865] or RADIUS/TCP [RFC6613]. | |||
10. Security Considerations | 9. Security Considerations | |||
The primary focus of this document is addressing security | The primary focus of this document is addressing security | |||
considerations for RADIUS. This specification relies on TLS and | considerations for RADIUS. This specification relies on TLS and | |||
associated ALPN negotiation for much of its security. We refer the | associated ALPN for much of its security. We refer the reader to | |||
reader to [RFC8446] and [RFC7360] for discussions of the security of | [RFC8446] and [RFC7360] for discussions of the security of those | |||
those protocols. The discussion in this section is limited to issues | protocols. The discussion in this section is limited to issues | |||
unique to this specification. | unique to this specification. | |||
Implementations should rely on the underlying TLS library to perform | Implementations should rely on the underlying TLS library to perform | |||
ALPN version negotiation. That is, implementations should supply a | ALPN version negotiation. That is, implementations should supply a | |||
list of permitted ALPN strings to the TLS library, and let it return | list of permitted ALPN strings to the TLS library, and let it return | |||
the negotiated value. | the negotiated value. | |||
There are few other opportunities for security issues. If an | There are few other opportunities for security issues. If an | |||
implementation gets ALPN negotiation wrong, then the wrong | implementation gets ALPN wrong, then the wrong application data will | |||
application data will be transported inside of TLS. While RADIUS/1.0 | be transported inside of TLS. While RADIUS/1.0 and RADIUS/1.1 share | |||
and RADIUS/1.1 share similar packet formats, the protocols are not | similar packet formats, the protocols are not mutually compatible. | |||
mutually compatible. | ||||
When an implementation receives the packets for a RADIUS version | When an implementation receives the packets for a RADIUS version that | |||
which is not supported by this connection, it will not be able to | is not supported by this connection, it will not be able to process | |||
process the packets. Implementations can produce log messages | the packets. Implementations can produce log messages indicating | |||
indicating that the application-layer data is unexpected, and close | that the application-layer data is unexpected and close the | |||
the connection. In addition, the implementations which see the | connection. In addition, the implementations that see the incorrect | |||
incorrect application data already have full access to all secrets, | application data already have full access to all secrets, passwords, | |||
passwords, etc. being transported, so any protocol differences do not | etc. being transported, so any protocol differences do not result in | |||
result any security issue. Since all of the application data is | any security issues. Since all of the application data is protected | |||
protected by TLS, there is no possibility for an attacker to obtain | by TLS, there is no possibility for an attacker to obtain any extra | |||
any extra data as a result of this misconfiguration. | data as a result of this misconfiguration. | |||
RADIUS/1.0 requests sent over a RADIUS/1.1 connection may be accepted | RADIUS/1.0 requests sent over a RADIUS/1.1 connection may be accepted | |||
by the RADIUS/1.1 server, as the server will ignore the ID field, and | by the RADIUS/1.1 server, as the server will ignore the ID field and | |||
try to use portions of the Request Authenticator as a Token. | try to use portions of the Request Authenticator as a Token. | |||
However, the reply from the RADIUS/1.1 server will fail the Response | However, the reply from the RADIUS/1.1 server will fail the Response | |||
Authenticator validation by the RADIUS/1.0 client. The responses | Authenticator validation by the RADIUS/1.0 client. Therefore, the | |||
will therefore be dropped. The client will generally log these | responses will be dropped. The client will generally log these | |||
failures, and an administrator will address the issue. | failures, and an administrator will address the issue. | |||
RADIUS/1.1 requests sent over a RADIUS/1.0 connection will generally | RADIUS/1.1 requests sent over a RADIUS/1.0 connection will generally | |||
be discarded the the RADIUS/1.0 server, as the packets will fail the | be discarded by the RADIUS/1.0 server, as the packets will fail the | |||
Request Authenticator checks. That is, all request packets such as | Request Authenticator checks. That is, all request packets such as | |||
Accounting-Request, CoA-Request, and Disconnect-Request will be | Accounting-Request, CoA-Request, and Disconnect-Request will be | |||
discarded by the server. For Access-Request packets containing EAP- | discarded by the server. For Access-Request packets containing EAP- | |||
Message, the packets will be missing Message-Authenticator, and will | Message, the packets will be missing Message-Authenticator and will | |||
therefore be discarded by the server. Other Access-Request packets | therefore be discarded by the server. Other Access-Request packets | |||
contain obfuscated attributes such as User-Password will have those | that contain obfuscated attributes such as User-Password will have | |||
attributes decoded to nonsense, and will thus result in Access-Reject | those attributes decoded to nonsense, thus resulting in Access-Reject | |||
responses. | responses. | |||
RADIUS/1.1 Access-Request packets containing non-obfuscated | RADIUS/1.1 Access-Request packets containing non-obfuscated | |||
attributes such as CHAP-Password may be accepted by a RADIUS/1.0 | attributes such as CHAP-Password may be accepted by a RADIUS/1.0 | |||
server but the response will contain a Response Authenticator (i.e. | server, but the response will contain a Response Authenticator (i.e., | |||
MD5 hash), and not a Token which matches the Token in the request. A | MD5 hash) and not a Token that matches the Token in the request. A | |||
similar analysis applies for Access-Request packets containing | similar analysis applies for Access-Request packets containing | |||
Service-Type = Authorize-Only. | Service-Type = Authorize-Only. | |||
In conclusion, any mismatch of versions between client and server | In conclusion, any mismatch of versions between client and server | |||
will result in most request packets being discarded by the server, | will result in most request packets being discarded by the server and | |||
and all response packets being discarded by the client. The two | all response packets being discarded by the client. Therefore, the | |||
protocols are therefore incompatible, and safe from misconfigurations | two protocols are incompatible and safe from misconfigurations or | |||
or erroneous implementations. | erroneous implementations. | |||
11. IANA Considerations | ||||
IANA is requested to update the "TLS Application-Layer Protocol | ||||
Negotiation (ALPN) Protocol IDs" registry with two new entries: | ||||
Protocol: RADIUS/1.0 | ||||
Id. Sequence: 0x72 0x61 0x64 0x69 0x75 0x73 0x2f 0x31 0x2e 0x30 | ||||
("radius/1.0") | ||||
Reference: This document | ||||
Protocol: RADIUS/1.1 | ||||
Id. Sequence: 0x72 0x61 0x64 0x69 0x75 0x73 0x2f 0x31 0x2e 0x31 | ||||
("radius/1.1") | ||||
Reference: This document | ||||
12. Acknowledgments | ||||
Thanks to Bernard Aboba, Karri Huhtanen, Heikki Vatiainen, Alexander | ||||
Clouter, Michael Richardson, Hannes Tschofenig, Matthew Newton, and | ||||
Josh Howlett for reviews and feedback. | ||||
13. Changelog | ||||
(This section to be removed by the RFC editor.) | ||||
draft-dekok-radext-sradius-00 | ||||
Initial Revision | ||||
draft-dekok-radext-radiusv11-00 | ||||
Use ALPN from RFC 7301, instead of defining a new port. Drop the | ||||
name "SRADIUS". | ||||
Add discussion of Original-Packet-Code | ||||
draft-dekok-radext-radiusv11-01 | ||||
Update formatting. | ||||
draft-dekok-radext-radiusv11-02 | ||||
Add Flag field and description. | ||||
Minor rearrangements and updates to text. | ||||
draft-dekok-radext-radiusv11-03 | ||||
Remove Flag field and description based on feedback and expected | ||||
use-cases. | ||||
Use "radius/1.0" instead of "radius/1" | ||||
Consistently refer to the specification as "RADIUSv11", and | ||||
consistently quote the ALPN name as "radius/1.1" | ||||
Add discussion of future attributes and future crypto-agility | ||||
work. | ||||
draft-dekok-radext-radiusv11-04 | ||||
Remove "radius/1.0" as it is unnecessary. | ||||
Update Introduction with more historical background, which | ||||
motivates the rest of the section. | ||||
Change Identifier field to be reserved, as it is entirely unused. | ||||
Update discussion on clear text passwords. | ||||
Clarify discussion of Status-Server, User-Password, and Tunnel- | ||||
Password. | ||||
Give high level summary of ALPN, clear up client / server roles, | ||||
and remove "radius/1.0" as it is unnecessary. | ||||
Add text on RFC6421. | ||||
draft-dekok-radext-radiusv11-05 | ||||
Clarify naming. "radius/1.1" is the ALPN name. "RADIUS/1.1" is | ||||
the transport profile. | ||||
Clarify that future specifications do not need to make provisions | ||||
for dealing with this transport profile. | ||||
Typos and word smithing. | ||||
Define and use "RADIUS over TLS" instead of RADIUS/(D)TLS. | ||||
Many cleanups and rework based on feedback from Matthew Newton. | ||||
draft-ietf-radext-radiusv11-00 | ||||
No changes from previous draft. | ||||
draft-ietf-radext-radiusv11-01 | ||||
Move to "experimental" based on WG feedback. | ||||
Many cleanups based on review from Matthew Newton | ||||
Removed requirement for supporting TLS-PSK. | ||||
This document does not deprecate new cryptographic work in RADIUS. | ||||
The "deprecating insecure transports" document does that. | ||||
draft-ietf-radext-radiusv11-02 | ||||
Note that we also update RFC 7930 | ||||
Minor updates to text. | ||||
Add text explaining why "allow" is the default, and how to upgrade | ||||
to "require" | ||||
Discuss the use of the TLS alert "no_application_protocol" (120), | ||||
and its limitations. | ||||
Suggest the use of Protocol-Error as an application signal when it | ||||
is not possible to send a "no_application_protocol" TLS alert. | ||||
Update discussion of Message-Authenticator, and suggest that | ||||
RADIUS/1.1 proxies always add Message-Authenticator to Access- | ||||
Request packets being sent over UDP or TCP. | ||||
Add term "historic RADIUS/TLS" as it is simpler than more awkward | ||||
"6614 or 7360". | ||||
Re-add ALPN "radius/1.0" based on comments from Heikki. It | ||||
signals that the system is ALPN-capable, among other. | ||||
draft-ietf-radext-radiusv11-03 | ||||
Rename to "RADIUS ALPN and removing MD5" | ||||
Add a few things missed when re-adding "radius/1.0" | ||||
Clarify wording in a number of places. | ||||
draft-ietf-radext-radiusv11-04 | ||||
Address github issues 3..9 | ||||
draft-ietf-radext-radiusv11-05 | ||||
Add discussion of Protocol-Error as per-link signalling. | ||||
draft-ietf-radext-radiusv11-06 | ||||
Review from Paul Wouters | ||||
Clarify client handling of Protocol-Error | ||||
draft-ietf-radext-radiusv11-07 | ||||
Clarifications as requested by Jan-Frederik | ||||
draft-ietf-radext-radiusv11-08 | ||||
Review from Claudio Allocchio | ||||
draft-ietf-radext-radiusv11-09 | ||||
Review from Barry Lieba | ||||
draft-ietf-radext-radiusv11-10 | 10. IANA Considerations | |||
AD review. | IANA has updated the "TLS Application-Layer Protocol Negotiation | |||
(ALPN) Protocol IDs" registry with two new entries: | ||||
draft-ietf-radext-radiusv11-11 | Protocol: RADIUS/1.0 | |||
Identification Sequence: 0x72 0x61 0x64 0x69 0x75 0x73 0x2f 0x31 | ||||
0x2e 0x30 ("radius/1.0") | ||||
Reference: RFC 9765 | ||||
Review from Eric Vyncke | Protocol: RADIUS/1.1 | |||
Identification Sequence: 0x72 0x61 0x64 0x69 0x75 0x73 0x2f 0x31 | ||||
0x2e 0x31 ("radius/1.1") | ||||
Reference: RFC 9765 | ||||
14. References | 11. References | |||
14.1. Normative References | 11.1. 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, | Requirement Levels", BCP 14, RFC 2119, | |||
DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
<https://www.rfc-editor.org/rfc/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
[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)", | "Remote Authentication Dial In User Service (RADIUS)", | |||
RFC 2865, DOI 10.17487/RFC2865, June 2000, | RFC 2865, DOI 10.17487/RFC2865, June 2000, | |||
<https://www.rfc-editor.org/rfc/rfc2865>. | <https://www.rfc-editor.org/info/rfc2865>. | |||
[RFC6421] Nelson, D., Ed., "Crypto-Agility Requirements for Remote | [RFC6421] Nelson, D., Ed., "Crypto-Agility Requirements for Remote | |||
Authentication Dial-In User Service (RADIUS)", RFC 6421, | Authentication Dial-In User Service (RADIUS)", RFC 6421, | |||
DOI 10.17487/RFC6421, November 2011, | DOI 10.17487/RFC6421, November 2011, | |||
<https://www.rfc-editor.org/rfc/rfc6421>. | <https://www.rfc-editor.org/info/rfc6421>. | |||
[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, DOI 10.17487/RFC6614, May 2012, | RFC 6614, DOI 10.17487/RFC6614, May 2012, | |||
<https://www.rfc-editor.org/rfc/rfc6614>. | <https://www.rfc-editor.org/info/rfc6614>. | |||
[RFC6929] DeKok, A. and A. Lior, "Remote Authentication Dial In User | [RFC6929] DeKok, A. and A. Lior, "Remote Authentication Dial In User | |||
Service (RADIUS) Protocol Extensions", RFC 6929, | Service (RADIUS) Protocol Extensions", RFC 6929, | |||
DOI 10.17487/RFC6929, April 2013, | DOI 10.17487/RFC6929, April 2013, | |||
<https://www.rfc-editor.org/rfc/rfc6929>. | <https://www.rfc-editor.org/info/rfc6929>. | |||
[RFC7301] Friedl, S., Popov, A., Langley, A., and E. Stephan, | [RFC7301] Friedl, S., Popov, A., Langley, A., and E. Stephan, | |||
"Transport Layer Security (TLS) Application-Layer Protocol | "Transport Layer Security (TLS) Application-Layer Protocol | |||
Negotiation Extension", RFC 7301, DOI 10.17487/RFC7301, | Negotiation Extension", RFC 7301, DOI 10.17487/RFC7301, | |||
July 2014, <https://www.rfc-editor.org/rfc/rfc7301>. | July 2014, <https://www.rfc-editor.org/info/rfc7301>. | |||
[RFC7360] DeKok, A., "Datagram Transport Layer Security (DTLS) as a | [RFC7360] DeKok, A., "Datagram Transport Layer Security (DTLS) as a | |||
Transport Layer for RADIUS", RFC 7360, | Transport Layer for RADIUS", RFC 7360, | |||
DOI 10.17487/RFC7360, September 2014, | DOI 10.17487/RFC7360, September 2014, | |||
<https://www.rfc-editor.org/rfc/rfc7360>. | <https://www.rfc-editor.org/info/rfc7360>. | |||
[RFC8044] DeKok, A., "Data Types in RADIUS", RFC 8044, | [RFC8044] DeKok, A., "Data Types in RADIUS", RFC 8044, | |||
DOI 10.17487/RFC8044, January 2017, | DOI 10.17487/RFC8044, January 2017, | |||
<https://www.rfc-editor.org/rfc/rfc8044>. | <https://www.rfc-editor.org/info/rfc8044>. | |||
[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | |||
2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | |||
May 2017, <https://www.rfc-editor.org/rfc/rfc8174>. | May 2017, <https://www.rfc-editor.org/info/rfc8174>. | |||
14.2. Informative References | 11.2. Informative References | |||
[ASLEAP] Wright, J., "asleap - recovers weak LEAP and PPTP | [ASLEAP] "asleap - recovers weak LEAP and PPTP passwords", commit | |||
passwords", n.d., <https://github.com/joswr1ght/asleap>. | 254acab, November 2020, | |||
<https://github.com/joswr1ght/asleap>. | ||||
[EDUROAM] eduroam, "eduroam", n.d., <https://eduroam.org>. | [EDUROAM] eduroam, "eduroam", <https://eduroam.org>. | |||
[FIPS-140-3] | ||||
NIST, "Security Requirements for Cryptographic Modules", | ||||
NIST FIPS 140-3, DOI 10.6028/NIST.FIPS.140-3, March 2019, | ||||
<https://nvlpubs.nist.gov/nistpubs/FIPS/ | ||||
NIST.FIPS.140-3.pdf>. | ||||
[OPENROAMING] | [OPENROAMING] | |||
Alliance, W. B., "OpenRoaming: One global Wi-Fi network", | Wireless Broadband Alliance, "OpenRoaming: One global Wi- | |||
n.d., <https://wballiance.com/openroaming/>. | Fi network", <https://wballiance.com/openroaming/>. | |||
[RFC1321] Rivest, R., "The MD5 Message-Digest Algorithm", RFC 1321, | [RFC1321] Rivest, R., "The MD5 Message-Digest Algorithm", RFC 1321, | |||
DOI 10.17487/RFC1321, April 1992, | DOI 10.17487/RFC1321, April 1992, | |||
<https://www.rfc-editor.org/rfc/rfc1321>. | <https://www.rfc-editor.org/info/rfc1321>. | |||
[RFC2548] Zorn, G., "Microsoft Vendor-specific RADIUS Attributes", | [RFC2548] Zorn, G., "Microsoft Vendor-specific RADIUS Attributes", | |||
RFC 2548, DOI 10.17487/RFC2548, March 1999, | RFC 2548, DOI 10.17487/RFC2548, March 1999, | |||
<https://www.rfc-editor.org/rfc/rfc2548>. | <https://www.rfc-editor.org/info/rfc2548>. | |||
[RFC2866] Rigney, C., "RADIUS Accounting", RFC 2866, | [RFC2866] Rigney, C., "RADIUS Accounting", RFC 2866, | |||
DOI 10.17487/RFC2866, June 2000, | DOI 10.17487/RFC2866, June 2000, | |||
<https://www.rfc-editor.org/rfc/rfc2866>. | <https://www.rfc-editor.org/info/rfc2866>. | |||
[RFC2868] Zorn, G., Leifer, D., Rubens, A., Shriver, J., Holdrege, | [RFC2868] Zorn, G., Leifer, D., Rubens, A., Shriver, J., Holdrege, | |||
M., and I. Goyret, "RADIUS Attributes for Tunnel Protocol | M., and I. Goyret, "RADIUS Attributes for Tunnel Protocol | |||
Support", RFC 2868, DOI 10.17487/RFC2868, June 2000, | Support", RFC 2868, DOI 10.17487/RFC2868, June 2000, | |||
<https://www.rfc-editor.org/rfc/rfc2868>. | <https://www.rfc-editor.org/info/rfc2868>. | |||
[RFC3539] Aboba, B. and J. Wood, "Authentication, Authorization and | [RFC3539] Aboba, B. and J. Wood, "Authentication, Authorization and | |||
Accounting (AAA) Transport Profile", RFC 3539, | Accounting (AAA) Transport Profile", RFC 3539, | |||
DOI 10.17487/RFC3539, June 2003, | DOI 10.17487/RFC3539, June 2003, | |||
<https://www.rfc-editor.org/rfc/rfc3539>. | <https://www.rfc-editor.org/info/rfc3539>. | |||
[RFC3579] Aboba, B. and P. Calhoun, "RADIUS (Remote Authentication | [RFC3579] Aboba, B. and P. Calhoun, "RADIUS (Remote Authentication | |||
Dial In User Service) Support For Extensible | Dial In User Service) Support For Extensible | |||
Authentication Protocol (EAP)", RFC 3579, | Authentication Protocol (EAP)", RFC 3579, | |||
DOI 10.17487/RFC3579, September 2003, | DOI 10.17487/RFC3579, September 2003, | |||
<https://www.rfc-editor.org/rfc/rfc3579>. | <https://www.rfc-editor.org/info/rfc3579>. | |||
[RFC5077] Salowey, J., Zhou, H., Eronen, P., and H. Tschofenig, | [RFC5077] Salowey, J., Zhou, H., Eronen, P., and H. Tschofenig, | |||
"Transport Layer Security (TLS) Session Resumption without | "Transport Layer Security (TLS) Session Resumption without | |||
Server-Side State", RFC 5077, DOI 10.17487/RFC5077, | Server-Side State", RFC 5077, DOI 10.17487/RFC5077, | |||
January 2008, <https://www.rfc-editor.org/rfc/rfc5077>. | January 2008, <https://www.rfc-editor.org/info/rfc5077>. | |||
[RFC5080] Nelson, D. and A. DeKok, "Common Remote Authentication | [RFC5080] Nelson, D. and A. DeKok, "Common Remote Authentication | |||
Dial In User Service (RADIUS) Implementation Issues and | Dial In User Service (RADIUS) Implementation Issues and | |||
Suggested Fixes", RFC 5080, DOI 10.17487/RFC5080, December | Suggested Fixes", RFC 5080, DOI 10.17487/RFC5080, December | |||
2007, <https://www.rfc-editor.org/rfc/rfc5080>. | 2007, <https://www.rfc-editor.org/info/rfc5080>. | |||
[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, | |||
DOI 10.17487/RFC5176, January 2008, | DOI 10.17487/RFC5176, January 2008, | |||
<https://www.rfc-editor.org/rfc/rfc5176>. | <https://www.rfc-editor.org/info/rfc5176>. | |||
[RFC5281] Funk, P. and S. Blake-Wilson, "Extensible Authentication | [RFC5281] Funk, P. and S. Blake-Wilson, "Extensible Authentication | |||
Protocol Tunneled Transport Layer Security Authenticated | Protocol Tunneled Transport Layer Security Authenticated | |||
Protocol Version 0 (EAP-TTLSv0)", RFC 5281, | Protocol Version 0 (EAP-TTLSv0)", RFC 5281, | |||
DOI 10.17487/RFC5281, August 2008, | DOI 10.17487/RFC5281, August 2008, | |||
<https://www.rfc-editor.org/rfc/rfc5281>. | <https://www.rfc-editor.org/info/rfc5281>. | |||
[RFC5931] Harkins, D. and G. Zorn, "Extensible Authentication | [RFC5931] Harkins, D. and G. Zorn, "Extensible Authentication | |||
Protocol (EAP) Authentication Using Only a Password", | Protocol (EAP) Authentication Using Only a Password", | |||
RFC 5931, DOI 10.17487/RFC5931, August 2010, | RFC 5931, DOI 10.17487/RFC5931, August 2010, | |||
<https://www.rfc-editor.org/rfc/rfc5931>. | <https://www.rfc-editor.org/info/rfc5931>. | |||
[RFC6151] Turner, S. and L. Chen, "Updated Security Considerations | [RFC6151] Turner, S. and L. Chen, "Updated Security Considerations | |||
for the MD5 Message-Digest and the HMAC-MD5 Algorithms", | for the MD5 Message-Digest and the HMAC-MD5 Algorithms", | |||
RFC 6151, DOI 10.17487/RFC6151, March 2011, | RFC 6151, DOI 10.17487/RFC6151, March 2011, | |||
<https://www.rfc-editor.org/rfc/rfc6151>. | <https://www.rfc-editor.org/info/rfc6151>. | |||
[RFC6218] Zorn, G., Zhang, T., Walker, J., and J. Salowey, "Cisco | [RFC6218] Zorn, G., Zhang, T., Walker, J., and J. Salowey, "Cisco | |||
Vendor-Specific RADIUS Attributes for the Delivery of | Vendor-Specific RADIUS Attributes for the Delivery of | |||
Keying Material", RFC 6218, DOI 10.17487/RFC6218, April | Keying Material", RFC 6218, DOI 10.17487/RFC6218, April | |||
2011, <https://www.rfc-editor.org/rfc/rfc6218>. | 2011, <https://www.rfc-editor.org/info/rfc6218>. | |||
[RFC6613] DeKok, A., "RADIUS over TCP", RFC 6613, | [RFC6613] DeKok, A., "RADIUS over TCP", RFC 6613, | |||
DOI 10.17487/RFC6613, May 2012, | DOI 10.17487/RFC6613, May 2012, | |||
<https://www.rfc-editor.org/rfc/rfc6613>. | <https://www.rfc-editor.org/info/rfc6613>. | |||
[RFC7585] Winter, S. and M. McCauley, "Dynamic Peer Discovery for | [RFC7585] Winter, S. and M. McCauley, "Dynamic Peer Discovery for | |||
RADIUS/TLS and RADIUS/DTLS Based on the Network Access | RADIUS/TLS and RADIUS/DTLS Based on the Network Access | |||
Identifier (NAI)", RFC 7585, DOI 10.17487/RFC7585, October | Identifier (NAI)", RFC 7585, DOI 10.17487/RFC7585, October | |||
2015, <https://www.rfc-editor.org/rfc/rfc7585>. | 2015, <https://www.rfc-editor.org/info/rfc7585>. | |||
[RFC7593] Wierenga, K., Winter, S., and T. Wolniewicz, "The eduroam | [RFC7593] Wierenga, K., Winter, S., and T. Wolniewicz, "The eduroam | |||
Architecture for Network Roaming", RFC 7593, | Architecture for Network Roaming", RFC 7593, | |||
DOI 10.17487/RFC7593, September 2015, | DOI 10.17487/RFC7593, September 2015, | |||
<https://www.rfc-editor.org/rfc/rfc7593>. | <https://www.rfc-editor.org/info/rfc7593>. | |||
[RFC7930] Hartman, S., "Larger Packets for RADIUS over TCP", | [RFC7930] Hartman, S., "Larger Packets for RADIUS over TCP", | |||
RFC 7930, DOI 10.17487/RFC7930, August 2016, | RFC 7930, DOI 10.17487/RFC7930, August 2016, | |||
<https://www.rfc-editor.org/rfc/rfc7930>. | <https://www.rfc-editor.org/info/rfc7930>. | |||
[RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol | [RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol | |||
Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018, | Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018, | |||
<https://www.rfc-editor.org/rfc/rfc8446>. | <https://www.rfc-editor.org/info/rfc8446>. | |||
Acknowledgments | ||||
Thanks to Bernard Aboba, Karri Huhtanen, Heikki Vatiainen, Alexander | ||||
Clouter, Michael Richardson, Hannes Tschofenig, Matthew Newton, and | ||||
Josh Howlett for reviews and feedback. | ||||
Author's Address | Author's Address | |||
Alan DeKok | Alan DeKok | |||
FreeRADIUS | FreeRADIUS | |||
Email: aland@freeradius.org | Email: aland@freeradius.org | |||
End of changes. 286 change blocks. | ||||
881 lines changed or deleted | 710 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. |