| < draft-ietf-capport-rfc7710bis-03.txt | draft-ietf-capport-rfc7710bis-04.txt > | |||
|---|---|---|---|---|
| Network Working Group W. Kumari | Network Working Group W. Kumari | |||
| Internet-Draft Google | Internet-Draft Google | |||
| Obsoletes: 7710 (if approved) E. Kline | Obsoletes: 7710 (if approved) E. Kline | |||
| Intended status: Standards Track Loon | Intended status: Standards Track Loon | |||
| Expires: October 1, 2020 March 30, 2020 | Expires: October 30, 2020 April 28, 2020 | |||
| Captive-Portal Identification in DHCP / RA | Captive-Portal Identification in DHCP / RA | |||
| draft-ietf-capport-rfc7710bis-03 | draft-ietf-capport-rfc7710bis-04 | |||
| Abstract | Abstract | |||
| In many environments offering short-term or temporary Internet access | In many environments offering short-term or temporary Internet access | |||
| (such as coffee shops), it is common to start new connections in a | (such as coffee shops), it is common to start new connections in a | |||
| captive portal mode. This highly restricts what the customer can do | captive portal mode. This highly restricts what the customer can do | |||
| until the customer has authenticated. | until the customer has authenticated. | |||
| This document describes a DHCP option (and a Router Advertisement | This document describes a DHCP option (and a Router Advertisement | |||
| (RA) extension) to inform clients that they are behind some sort of | (RA) extension) to inform clients that they are behind some sort of | |||
| captive-portal enforcement device, and that they will need to | captive-portal enforcement device, and that they will need to | |||
| authenticate to get Internet access. It is not a full solution to | authenticate to get Internet access. It is not a full solution to | |||
| address all of the issues that clients may have with captive portals; | address all of the issues that clients may have with captive portals; | |||
| it is designed to be used in larger solutions. The method of | it is designed to be used in larger solutions. The method of | |||
| authenticating to, and interacting with the captive portal is out of | authenticating to, and interacting with the captive portal is out of | |||
| scope of this document. | scope of this document. | |||
| RFC7710 used DHCP code point 160. Due to a conflict, this document | This document replaces RFC 7710. RFC 7710 used DHCP code point 160. | |||
| specifies TBD. | Due to a conflict, this document specifies 114. | |||
| [ This document is being collaborated on in Github at: | [ This document is being collaborated on in Github at: | |||
| https://github.com/capport-wg/7710bis. The most recent version of | https://github.com/capport-wg/7710bis. The most recent version of | |||
| the document, open issues, etc should all be available here. The | the document, open issues, etc should all be available here. The | |||
| authors (gratefully) accept pull requests. Text in square brackets | authors (gratefully) accept pull requests. Text in square brackets | |||
| will be removed before publication. ] | will be removed before publication. ] | |||
| Status of This Memo | Status of This Memo | |||
| This Internet-Draft is submitted in full conformance with the | This Internet-Draft is submitted in full conformance with the | |||
| skipping to change at page 2, line 7 ¶ | skipping to change at page 2, line 7 ¶ | |||
| Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
| Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
| working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
| Drafts is at https://datatracker.ietf.org/drafts/current/. | Drafts is at https://datatracker.ietf.org/drafts/current/. | |||
| Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
| and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
| time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
| material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
| This Internet-Draft will expire on October 1, 2020. | This Internet-Draft will expire on October 30, 2020. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2020 IETF Trust and the persons identified as the | Copyright (c) 2020 IETF Trust and the persons identified as the | |||
| document authors. All rights reserved. | document authors. All rights reserved. | |||
| This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
| Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
| (https://trustee.ietf.org/license-info) in effect on the date of | (https://trustee.ietf.org/license-info) in effect on the date of | |||
| publication of this document. Please review these documents | publication of this document. Please review these documents | |||
| skipping to change at page 2, line 34 ¶ | skipping to change at page 2, line 34 ¶ | |||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | |||
| 1.1. Requirements Notation . . . . . . . . . . . . . . . . . . 3 | 1.1. Requirements Notation . . . . . . . . . . . . . . . . . . 3 | |||
| 2. The Captive-Portal Option . . . . . . . . . . . . . . . . . . 3 | 2. The Captive-Portal Option . . . . . . . . . . . . . . . . . . 3 | |||
| 2.1. IPv4 DHCP Option . . . . . . . . . . . . . . . . . . . . 4 | 2.1. IPv4 DHCP Option . . . . . . . . . . . . . . . . . . . . 4 | |||
| 2.2. IPv6 DHCP Option . . . . . . . . . . . . . . . . . . . . 5 | 2.2. IPv6 DHCP Option . . . . . . . . . . . . . . . . . . . . 5 | |||
| 2.3. The Captive-Portal IPv6 RA Option . . . . . . . . . . . . 5 | 2.3. The Captive-Portal IPv6 RA Option . . . . . . . . . . . . 5 | |||
| 3. Precedence of API URIs . . . . . . . . . . . . . . . . . . . 6 | 3. Precedence of API URIs . . . . . . . . . . . . . . . . . . . 6 | |||
| 4. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 6 | 4. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 6 | |||
| 4.1. IETF params Registration . . . . . . . . . . . . . . . . 6 | 4.1. Captive Portal Unrestricted Identifier . . . . . . . . . 7 | |||
| 4.1.1. Registry name: Captive Portal Unrestricted Identifier 6 | ||||
| 4.2. BOOTP Vendor Extensions and DHCP Options Code Change . . 7 | 4.2. BOOTP Vendor Extensions and DHCP Options Code Change . . 7 | |||
| 5. Security Considerations . . . . . . . . . . . . . . . . . . . 7 | 5. Security Considerations . . . . . . . . . . . . . . . . . . . 8 | |||
| 6. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 8 | 6. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 8 | |||
| 7. Normative References . . . . . . . . . . . . . . . . . . . . 8 | 7. References . . . . . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 7.1. Normative References . . . . . . . . . . . . . . . . . . 9 | ||||
| 7.2. Informative References . . . . . . . . . . . . . . . . . 10 | ||||
| Appendix A. Changes / Author Notes. . . . . . . . . . . . . . . 10 | Appendix A. Changes / Author Notes. . . . . . . . . . . . . . . 10 | |||
| Appendix B. Changes from RFC 7710 . . . . . . . . . . . . . . . 10 | Appendix B. Changes from RFC 7710 . . . . . . . . . . . . . . . 11 | |||
| Appendix C. Observations From IETF 106 Network Experiment . . . 10 | Appendix C. Observations From IETF 106 Network Experiment . . . 11 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 11 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 11 | |||
| 1. Introduction | 1. Introduction | |||
| In many environments, users need to connect to a captive-portal | In many environments, users need to connect to a captive-portal | |||
| device and agree to an Acceptable Use Policy (AUP) and / or provide | device and agree to an Acceptable Use Policy (AUP) and / or provide | |||
| billing information before they can access the Internet. Regardless | billing information before they can access the Internet. Regardless | |||
| of how that mechanism operates, this document provides functionality | of how that mechanism operates, this document provides functionality | |||
| to allow the client to know when it is behind a captive portal and | to allow the client to know when it is behind a captive portal and | |||
| how to contact it. | how to contact it. | |||
| skipping to change at page 3, line 20 ¶ | skipping to change at page 3, line 20 ¶ | |||
| methods that are very similar to man-in-the-middle (MITM) attacks. | methods that are very similar to man-in-the-middle (MITM) attacks. | |||
| As increasing focus is placed on security, and end nodes adopt a more | As increasing focus is placed on security, and end nodes adopt a more | |||
| secure stance, these interception techniques will become less | secure stance, these interception techniques will become less | |||
| effective and/or more intrusive. | effective and/or more intrusive. | |||
| This document describes a DHCP ([RFC2131]) option (Captive-Portal) | This document describes a DHCP ([RFC2131]) option (Captive-Portal) | |||
| and an IPv6 Router Advertisement (RA) ([RFC4861]) extension that | and an IPv6 Router Advertisement (RA) ([RFC4861]) extension that | |||
| informs clients that they are behind a captive-portal enforcement | informs clients that they are behind a captive-portal enforcement | |||
| device and how to contact an API for more information. | device and how to contact an API for more information. | |||
| This document replaces RFC 7710 [RFC7710]. | ||||
| 1.1. Requirements Notation | 1.1. Requirements Notation | |||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
| document are to be interpreted as described in [RFC2119]. | "OPTIONAL" in this document are to be interpreted as described in BCP | |||
| 14 [RFC2119] [RFC8174] when, and only when, they appear in all | ||||
| capitals, as shown here. | ||||
| 2. The Captive-Portal Option | 2. The Captive-Portal Option | |||
| The Captive Portal DHCP / RA Option informs the client that it may be | The Captive Portal DHCP / RA Option informs the client that it may be | |||
| behind a captive portal and provides the URI to access an API as | behind a captive portal and provides the URI to access an API as | |||
| defined by [draft-ietf-capport-api]. This is primarily intended to | defined by [draft-ietf-capport-api]. This is primarily intended to | |||
| improve the user experience by showing the user the captive portal | improve the user experience by showing the user the captive portal | |||
| information faster and more reliably. Note that, for the foreseeable | information faster and more reliably. Note that, for the foreseeable | |||
| future, captive portals will still need to implement the interception | future, captive portals will still need to implement the interception | |||
| techniques to serve legacy clients, and clients will need to perform | techniques to serve legacy clients, and clients will need to perform | |||
| probing to detect captive portals. | probing to detect captive portals. | |||
| Clients that support the Captive Portal DHCP option SHOULD include | Clients that support the Captive Portal DHCP option SHOULD include | |||
| the option in the Parameter Request List in DHCPREQUEST messages. | the option in the Parameter Request List in DHCPREQUEST messages. | |||
| DHCP servers MAY send the Captive Portal option without any explicit | DHCP servers MAY send the Captive Portal option without any explicit | |||
| request. | request. | |||
| In order to support multiple "classes" of clients (e.g. IPv4 only, | In order to support multiple "classes" of clients (e.g. IPv4 only, | |||
| IPv6 only with DHCPv6 ([RFC3315]), and IPv6 only with RA) the captive | IPv6 only with DHCPv6 ([RFC8415]), and IPv6 only with RA) the captive | |||
| network can provision the client with the URI via multiple methods | network can provision the client with the URI via multiple methods | |||
| (IPv4 DHCP, IPv6 DHCP, and IPv6 RA). The captive portal operator | (IPv4 DHCP, IPv6 DHCP, and IPv6 RA). The captive portal operator | |||
| SHOULD ensure that the URIs provisioned by each method are equivalent | SHOULD ensure that the URIs provisioned by each method are equivalent | |||
| to reduce the chance of operational problems. The maximum length of | to reduce the chance of operational problems. The maximum length of | |||
| the URI that can be carried in IPv4 DHCP is 255 bytes, so URIs longer | the URI that can be carried in IPv4 DHCP is 255 bytes, so URIs longer | |||
| than 255 bytes should not be provisioned via IPv6 DHCP or IPv6 RA | than 255 bytes should not be provisioned via IPv6 DHCP nor IPv6 RA | |||
| either. | options. | |||
| In all variants of this option, the URI MUST be that of the captive | In all variants of this option, the URI MUST be that of the captive | |||
| portal API endpoint, conforming to the recommendations for such URIs | portal API endpoint, conforming to the recommendations for such URIs | |||
| [draft-ietf-capport-api]. | [draft-ietf-capport-api]. | |||
| A captive portal server MAY redirect requests that do not have an | ||||
| Accept header field ([RFC7231] Section 5.3) containing a field item | ||||
| whose content-type is "application/capport+json" to the URL conveyed | ||||
| in the "user-portal-url" API key. When performing such content | ||||
| negotiation ([RFC7231] Section 3.4), captive portals implementors | ||||
| need to keep in mind that such responses might be cached, and | ||||
| therefore SHOULD include an appropriate Vary header field ([RFC7231] | ||||
| Section 7.1.4) or mark them explicitly uncacheable (for example, | ||||
| using Cache-Control: no-store [RFC7234] Section 5.2.2.3). | ||||
| A captive portal MAY do content negotiation ([RFC7231] section 3.4) | A captive portal MAY do content negotiation ([RFC7231] section 3.4) | |||
| and attempt to redirect clients querying without an explicit | and attempt to redirect clients querying without an explicit | |||
| indication of support for the captive portal API content type (i.e. | indication of support for the captive portal API content type (i.e. | |||
| without application/capport+json listed explicitly anywhere within an | without application/capport+json listed explicitly anywhere within an | |||
| Accept header vis. [RFC7231] section 5.3). In so doing, the captive | Accept header vis. [RFC7231] section 5.3). In so doing, the captive | |||
| portal SHOULD redirect the client to the value associated with the | portal SHOULD redirect the client to the value associated with the | |||
| "user-portal-url" API key. | "user-portal-url" API key. When performing such content negotiation | |||
| ([RFC7231] Section 3.4), implementors of captive portals need to keep | ||||
| in mind that such responses might be cached, and therefore SHOULD | ||||
| include an appropriate Vary header field ([RFC7231] Section 7.1.4) or | ||||
| mark them explicitly uncacheable (for example, using Cache-Control: | ||||
| no-store [RFC7234] Section 5.2.2.3). | ||||
| The URI SHOULD NOT contain an IP address literal. | The URI SHOULD NOT contain an IP address literal. Exceptions to this | |||
| might include networks with only one operational IP address family | ||||
| where DNS is either not available or not fully functional until the | ||||
| captive portal has been satisfied. | ||||
| Networks with no captive portals MAY explicitly indicate this | Networks with no captive portals MAY explicitly indicate this | |||
| condition by using this option with the IANA-assigned URI for this | condition by using this option with the IANA-assigned URI for this | |||
| purpose (see Section 4.1.1). Clients observing the URI value | purpose. Clients observing the URI value | |||
| "urn:ietf:params:capport-unrestricted" MAY forego time-consuming | "urn:ietf:params:capport:unrestricted" MAY forego time-consuming | |||
| forms of captive portal detection. | forms of captive portal detection. | |||
| 2.1. IPv4 DHCP Option | 2.1. IPv4 DHCP Option | |||
| The format of the IPv4 Captive-Portal DHCP option is shown below. | The format of the IPv4 Captive-Portal DHCP option is shown below. | |||
| Code Len Data | 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 | |||
| | code | len | URI ... | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| +------+------+------+------+------+-- --+-----+ | | Code | Len | URI (variable length) ... | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| . ...URI continued... . | ||||
| | ... | | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| o Code: The Captive-Portal DHCPv4 Option (TBD) (one octet) | o Code: The Captive-Portal DHCPv4 Option (114) (one octet) | |||
| o Len: The length, in octets of the URI. | o Len: The length (one octet), in octets of the URI. | |||
| o URI: The URI for the captive portal API endpoint to which the user | o URI: The URI for the captive portal API endpoint to which the user | |||
| should connect (encoded following the rules in [RFC3986]). | should connect (encoded following the rules in [RFC3986]). | |||
| See [RFC2132], Section 2 for more on the format of IPv4 DHCP options. | ||||
| Note that the URI parameter is not null terminated. | Note that the URI parameter is not null terminated. | |||
| 2.2. IPv6 DHCP Option | 2.2. IPv6 DHCP Option | |||
| The format of the IPv6 Captive-Portal DHCP option is shown below. | The format of the IPv6 Captive-Portal DHCP option is shown below. | |||
| 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 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | option-code | option-len | | | option-code | option-len | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| . URI (variable length) . | . URI (variable length) . | |||
| | ... | | | ... | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| o option-code: The Captive-Portal DHCPv6Option (103) (two octets) | o option-code: The Captive-Portal DHCPv6Option (103) (two octets) | |||
| o option-len: The length, in octets of the URI. | o option-len: The unsigned 16-bit length, in octets, of the URI. | |||
| o URI: The URI for the captive portal API endpoint to which the user | o URI: The URI for the captive portal API endpoint to which the user | |||
| should connect (encoded following the rules in [RFC3986]). | should connect (encoded following the rules in [RFC3986]). | |||
| See [RFC7227], Section 5.7 for more examples of DHCP Options with | See [RFC7227], Section 5.7 for more examples of DHCP Options with | |||
| URIs. | URIs. See [RFC8415], Section 21.1 for more on the format of IPv6 | |||
| DHCP options. | ||||
| Note that the URI parameter is not null terminated. | Note that the URI parameter is not null terminated. | |||
| The maximum length of the URI that can be carried in IPv4 DHCP is 255 | ||||
| bytes, so URIs longer than 255 bytes should not be provisioned via | ||||
| IPv6 DHCP options. | ||||
| 2.3. The Captive-Portal IPv6 RA Option | 2.3. The Captive-Portal IPv6 RA Option | |||
| This section describes the Captive-Portal Router Advertisement | This section describes the Captive-Portal Router Advertisement | |||
| option. | option. | |||
| 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 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Type | Length | URI . | | Type | Length | URI . | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ . | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ . | |||
| . . | . . | |||
| . . | . . | |||
| . . | . . | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Figure 2: Captive-Portal RA Option Format | Figure 2: Captive-Portal RA Option Format | |||
| skipping to change at page 6, line 9 ¶ | skipping to change at page 6, line 28 ¶ | |||
| Length 8-bit unsigned integer. The length of the option (including | Length 8-bit unsigned integer. The length of the option (including | |||
| the Type and Length fields) in units of 8 bytes. | the Type and Length fields) in units of 8 bytes. | |||
| URI The URI for the captive portal API endpoint to which the user | URI The URI for the captive portal API endpoint to which the user | |||
| should connect. This MUST be padded with NULL (0x00) to make the | should connect. This MUST be padded with NULL (0x00) to make the | |||
| total option length (including the Type and Length fields) a | total option length (including the Type and Length fields) a | |||
| multiple of 8 bytes. | multiple of 8 bytes. | |||
| Note that the URI parameter is not guaranteed to be null terminated. | Note that the URI parameter is not guaranteed to be null terminated. | |||
| The maximum length of the URI that can be carried in IPv4 DHCP is 255 | ||||
| bytes, so URIs longer than 255 bytes should not be provisioned via | ||||
| IPv6 RA options. | ||||
| 3. Precedence of API URIs | 3. Precedence of API URIs | |||
| A device may learn about Captive Portal API URIs through more than | A device may learn about Captive Portal API URIs through more than | |||
| one of (or indeed all of) the above options. It is a network | one of (or indeed all of) the above options. Implementations can | |||
| configuration error if the learned URIs are not all identical. | select their own precedence order (e.g., prefer one of the IPv6 | |||
| options before the DHCPv4 option, or vice versa, et cetera). | ||||
| However, if the URIs learned are not in fact all identical the | ||||
| captive device MUST prioritize URIs learned from network provisioning | ||||
| or configuration mechanisms before all other URIs. Specifically, | ||||
| URIs learned via any of the options in Section 2 should take | ||||
| precedence over any URI learned via some other mechanism, such as a | ||||
| redirect. | ||||
| If the URIs learned via more than one option described in Section 2 | If the URIs learned via more than one option described in Section 2 | |||
| are not all identical, this condition should be logged for the device | are not all identical, this condition should be logged for the device | |||
| owner or administrator. Implementations can select their own | owner or administrator; it is a network configuration error if the | |||
| precedence order. | learned URIs are not all identical. | |||
| 4. IANA Considerations | 4. IANA Considerations | |||
| This document requests one new IETF URN protocol parameter | This document requests one new IETF URN protocol parameter | |||
| ([RFC3553]) entry. This document also requests a reallocation of | ([RFC3553]) entry. This document also requests a reallocation of | |||
| DHCPv4 option codes (see Appendix C for background). | DHCPv4 option codes (see Appendix C for background). | |||
| Thanks IANA! | Thanks IANA! | |||
| 4.1. IETF params Registration | 4.1. Captive Portal Unrestricted Identifier | |||
| 4.1.1. Registry name: Captive Portal Unrestricted Identifier | This document registers a new entry under the IETF URN Sub-namespace | |||
| defined in [RFC3553]: | ||||
| Registry name: Captive Portal Unrestricted Identifier | Registry name: Captive Portal Unrestricted Identifier | |||
| URN: urn:ietf:params:capport-unrestricted | URN: urn:ietf:params:capport:unrestricted | |||
| Specification: RFC TBD (this document) | Specification: RFC TBD (this document) | |||
| Repository: RFC TBD (this document) | Repository: RFC TBD (this document) | |||
| Index value: Only one value is defined (see URN above). No hierarchy | Index value: Only one value is defined (see URN above). No | |||
| is defined and therefore no sub-namespace registrations are possible. | hierarchy is defined and therefore no sub-namespace registrations | |||
| are possible. | ||||
| 4.2. BOOTP Vendor Extensions and DHCP Options Code Change | 4.2. BOOTP Vendor Extensions and DHCP Options Code Change | |||
| [ RFC Ed: Please remove before publication: RFC7710 uses DHCP Code | [ RFC Ed: Please remove before publication: RFC7710 uses DHCP Code | |||
| 160 -- unfortunately, it was discovered that this option code is | 160 -- unfortunately, it was discovered that this option code is | |||
| already widely used by Polycom (see appendix). Option 114 (URL) is | already widely used by Polycom (see appendix). Option 114 (URL) is | |||
| currently assigned to Apple (RFC3679, Section 3.2.3 - Contact: Dieter | currently assigned to Apple (RFC3679, Section 3.2.3 - Contact: Dieter | |||
| Siegmund, dieter@apple.com - Reason to recover: Never published in an | Siegmund, dieter@apple.com - Reason to recover: Never published in an | |||
| RFC) Tommy Pauly (Apple) and Dieter Siegmund confirm that this | RFC) Tommy Pauly (Apple) and Dieter Siegmund confirm that this | |||
| codepoint hasn't been used, and Apple is willing to relinquish it for | codepoint hasn't been used, and Apple is willing to relinquish it for | |||
| skipping to change at page 7, line 32 ¶ | skipping to change at page 7, line 49 ¶ | |||
| Tag: 114 | Tag: 114 | |||
| Name: DHCP Captive-Portal | Name: DHCP Captive-Portal | |||
| Data Length: N | Data Length: N | |||
| Meaning: DHCP Captive-Portal | Meaning: DHCP Captive-Portal | |||
| Reference: [THIS-RFC] | Reference: [THIS-RFC] | |||
| Tag: 160 | Tag: 160 | |||
| Name: REMOVED/Unassigned | Name: REMOVED/Unassigned | |||
| Data Length: | Data Length: | |||
| Meaning: | Meaning: | |||
| Reference: [RFC7710][Deprecated] | Reference: [THIS-RFC][RFC7710] | |||
| 5. Security Considerations | 5. Security Considerations | |||
| By removing or reducing the need for captive portals to perform MITM | ||||
| hijacking, this mechanism improves security by making the portal and | ||||
| its actions visible, rather than hidden, and reduces the likelihood | ||||
| that users will disable useful security safeguards like DNSSEC | ||||
| validation, VPNs, etc. In addition, because the system knows that it | ||||
| is behind a captive portal, it can know not to send cookies, | ||||
| credentials, etc. By handing out a URI which is protected with TLS, | ||||
| the captive portal operator can attempt to reassure the user that the | ||||
| captive portal is not malicious. | ||||
| An attacker with the ability to inject DHCP messages or RAs could | An attacker with the ability to inject DHCP messages or RAs could | |||
| include an option from this document to force users to contact an | include an option from this document to force users to contact an | |||
| address of his choosing. As an attacker with this capability could | address of his choosing. As an attacker with this capability could | |||
| simply list himself as the default gateway (and so intercept all the | simply list himself as the default gateway (and so intercept all the | |||
| victim's traffic); this does not provide them with significantly more | victim's traffic); this does not provide them with significantly more | |||
| capabilities, but because this document removes the need for | capabilities, but because this document removes the need for | |||
| interception, the attacker may have an easier time performing the | interception, the attacker may have an easier time performing the | |||
| attack. As the operating systems and application that make use of | attack. As the operating systems and application that make use of | |||
| this information know that they are connecting to a captive-portal | this information know that they are connecting to a captive-portal | |||
| device (as opposed to intercepted connections) they can render the | device (as opposed to intercepted connections) they can render the | |||
| skipping to change at page 8, line 19 ¶ | skipping to change at page 8, line 47 ¶ | |||
| performed with the presently common captive portal mechanisms, so | performed with the presently common captive portal mechanisms, so | |||
| this technique does not give the attackers more capabilities. | this technique does not give the attackers more capabilities. | |||
| Captive portals are increasingly hijacking TLS connections to force | Captive portals are increasingly hijacking TLS connections to force | |||
| browsers to talk to the portal. Providing the portal's URI via a | browsers to talk to the portal. Providing the portal's URI via a | |||
| DHCP or RA option is a cleaner technique, and reduces user | DHCP or RA option is a cleaner technique, and reduces user | |||
| expectations of being hijacked - this may improve security by making | expectations of being hijacked - this may improve security by making | |||
| users more reluctant to accept TLS hijacking, which can be performed | users more reluctant to accept TLS hijacking, which can be performed | |||
| from beyond the network associated with the captive portal. | from beyond the network associated with the captive portal. | |||
| By simplifying the interaction with the captive portal systems, and | ||||
| doing away with the need for interception, we think that users will | ||||
| be less likely to disable useful security safeguards like DNSSEC | ||||
| validation, VPNs, etc. In addition, because the system knows that it | ||||
| is behind a captive portal, it can know not to send cookies, | ||||
| credentials, etc. By handing out a URI which is protected with TLS, | ||||
| the captive portal operator can attempt to reassure the user that the | ||||
| captive portal is not malicious. | ||||
| 6. Acknowledgements | 6. Acknowledgements | |||
| This document is a -bis of RFC7710. Thanks to all of the original | This document is a -bis of RFC7710. Thanks to all of the original | |||
| authors (Warren Kumari, Olafur Gudmundsson, Paul Ebersman, Steve | authors (Warren Kumari, Olafur Gudmundsson, Paul Ebersman, Steve | |||
| Sheng), and original contributors. | Sheng), and original contributors. | |||
| Also thanks to the CAPPORT WG for all of the discussion and | Also thanks to the CAPPORT WG for all of the discussion and | |||
| improvements including contributions and review from Joe Clarke, | improvements including contributions and review from Joe Clarke, | |||
| Lorenzo Colitti, Dave Dolson, Hans Kuhn, Kyle Larose, Clemens | Lorenzo Colitti, Dave Dolson, Hans Kuhn, Kyle Larose, Clemens | |||
| Schimpe, Martin Thompson, Michael Richardson, Remi Nguyen Van, Bernie | Schimpe, Martin Thomson, Michael Richardson, Remi Nguyen Van, Subash | |||
| Volz, and Tommy Pauly. | Tirupachur Comerica, Bernie Volz, and Tommy Pauly. | |||
| 7. References | 7. References | |||
| 7.1. Normative References | 7.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/info/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
| [RFC2131] Droms, R., "Dynamic Host Configuration Protocol", | [RFC2131] Droms, R., "Dynamic Host Configuration Protocol", | |||
| RFC 2131, DOI 10.17487/RFC2131, March 1997, | RFC 2131, DOI 10.17487/RFC2131, March 1997, | |||
| <https://www.rfc-editor.org/info/rfc2131>. | <https://www.rfc-editor.org/info/rfc2131>. | |||
| [RFC3315] Droms, R., Ed., Bound, J., Volz, B., Lemon, T., Perkins, | [RFC2132] Alexander, S. and R. Droms, "DHCP Options and BOOTP Vendor | |||
| C., and M. Carney, "Dynamic Host Configuration Protocol | Extensions", RFC 2132, DOI 10.17487/RFC2132, March 1997, | |||
| for IPv6 (DHCPv6)", RFC 3315, DOI 10.17487/RFC3315, July | <https://www.rfc-editor.org/info/rfc2132>. | |||
| 2003, <https://www.rfc-editor.org/info/rfc3315>. | ||||
| [RFC3553] Mealling, M., Masinter, L., Hardie, T., and G. Klyne, "An | [RFC3553] Mealling, M., Masinter, L., Hardie, T., and G. Klyne, "An | |||
| IETF URN Sub-namespace for Registered Protocol | IETF URN Sub-namespace for Registered Protocol | |||
| Parameters", BCP 73, RFC 3553, DOI 10.17487/RFC3553, June | Parameters", BCP 73, RFC 3553, DOI 10.17487/RFC3553, June | |||
| 2003, <https://www.rfc-editor.org/info/rfc3553>. | 2003, <https://www.rfc-editor.org/info/rfc3553>. | |||
| [RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform | [RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform | |||
| Resource Identifier (URI): Generic Syntax", STD 66, | Resource Identifier (URI): Generic Syntax", STD 66, | |||
| RFC 3986, DOI 10.17487/RFC3986, January 2005, | RFC 3986, DOI 10.17487/RFC3986, January 2005, | |||
| <https://www.rfc-editor.org/info/rfc3986>. | <https://www.rfc-editor.org/info/rfc3986>. | |||
| skipping to change at page 9, line 40 ¶ | skipping to change at page 10, line 10 ¶ | |||
| [RFC7231] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer | [RFC7231] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer | |||
| Protocol (HTTP/1.1): Semantics and Content", RFC 7231, | Protocol (HTTP/1.1): Semantics and Content", RFC 7231, | |||
| DOI 10.17487/RFC7231, June 2014, | DOI 10.17487/RFC7231, June 2014, | |||
| <https://www.rfc-editor.org/info/rfc7231>. | <https://www.rfc-editor.org/info/rfc7231>. | |||
| [RFC7234] Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, | [RFC7234] Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, | |||
| Ed., "Hypertext Transfer Protocol (HTTP/1.1): Caching", | Ed., "Hypertext Transfer Protocol (HTTP/1.1): Caching", | |||
| RFC 7234, DOI 10.17487/RFC7234, June 2014, | RFC 7234, DOI 10.17487/RFC7234, June 2014, | |||
| <https://www.rfc-editor.org/info/rfc7234>. | <https://www.rfc-editor.org/info/rfc7234>. | |||
| [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | ||||
| 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | ||||
| May 2017, <https://www.rfc-editor.org/info/rfc8174>. | ||||
| [RFC8415] Mrugalski, T., Siodelski, M., Volz, B., Yourtchenko, A., | ||||
| Richardson, M., Jiang, S., Lemon, T., and T. Winters, | ||||
| "Dynamic Host Configuration Protocol for IPv6 (DHCPv6)", | ||||
| RFC 8415, DOI 10.17487/RFC8415, November 2018, | ||||
| <https://www.rfc-editor.org/info/rfc8415>. | ||||
| 7.2. Informative References | ||||
| [RFC7710] Kumari, W., Gudmundsson, O., Ebersman, P., and S. Sheng, | [RFC7710] Kumari, W., Gudmundsson, O., Ebersman, P., and S. Sheng, | |||
| "Captive-Portal Identification Using DHCP or Router | "Captive-Portal Identification Using DHCP or Router | |||
| Advertisements (RAs)", RFC 7710, DOI 10.17487/RFC7710, | Advertisements (RAs)", RFC 7710, DOI 10.17487/RFC7710, | |||
| December 2015, <https://www.rfc-editor.org/info/rfc7710>. | December 2015, <https://www.rfc-editor.org/info/rfc7710>. | |||
| 7.2. URIs | 7.3. URIs | |||
| [1] https://tickets.meeting.ietf.org/wiki/IETF106network#Experiments | [1] https://tickets.meeting.ietf.org/wiki/IETF106network#Experiments | |||
| [2] https://tickets.meeting.ietf.org/wiki/CAPPORT | [2] https://tickets.meeting.ietf.org/wiki/CAPPORT | |||
| [3] https://community.polycom.com/t5/VoIP-SIP-Phones/DHCP- | [3] https://community.polycom.com/t5/VoIP-SIP-Phones/DHCP- | |||
| Standardization-160-vs-66/td-p/72577 | Standardization-160-vs-66/td-p/72577 | |||
| Appendix A. Changes / Author Notes. | Appendix A. Changes / Author Notes. | |||
| skipping to change at page 10, line 35 ¶ | skipping to change at page 11, line 19 ¶ | |||
| 1. Clarify that IP string literals are NOT RECOMMENDED. | 1. Clarify that IP string literals are NOT RECOMMENDED. | |||
| 2. Clarify that the option URI SHOULD be that of the captive portal | 2. Clarify that the option URI SHOULD be that of the captive portal | |||
| API endpoint. | API endpoint. | |||
| 3. Clarify that captive portals MAY do content negotiation. | 3. Clarify that captive portals MAY do content negotiation. | |||
| 4. Added text about Captive Portal API URI precedence in the event | 4. Added text about Captive Portal API URI precedence in the event | |||
| of a network configuration error. | of a network configuration error. | |||
| 5. Added urn:ietf:params:capport-unrestricted URN. | 5. Added urn:ietf:params:capport:unrestricted URN. | |||
| 6. Notes that the DHCP Code changed from 160 to 114. | 6. Notes that the DHCP Code changed from 160 to 114. | |||
| Appendix C. Observations From IETF 106 Network Experiment | Appendix C. Observations From IETF 106 Network Experiment | |||
| During IETF 106 in Singapore an experiment [1] enabling Captive | During IETF 106 in Singapore an experiment [1] enabling Captive | |||
| Portal API compatible clients to discover a venue-info-url (see | Portal API compatible clients to discover a venue-info-url (see | |||
| experiment description [2] for more detail) revealed that some | experiment description [2] for more detail) revealed that some | |||
| Polycom devices on the same network made use of DHCPv4 option code | Polycom devices on the same network made use of DHCPv4 option code | |||
| 160 for other purposes [3]. | 160 for other purposes [3]. | |||
| End of changes. 43 change blocks. | ||||
| 78 lines changed or deleted | 104 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||