draft-ietf-rtcweb-ip-handling-12.txt | rfc8828.txt | |||
---|---|---|---|---|
Network Working Group J. Uberti | Internet Engineering Task Force (IETF) J. Uberti | |||
Internet-Draft Google | Request for Comments: 8828 Google | |||
Intended status: Standards Track July 2, 2019 | Category: Standards Track G. Shieh | |||
Expires: January 3, 2020 | ISSN: 2070-1721 January 2021 | |||
WebRTC IP Address Handling Requirements | WebRTC IP Address Handling Requirements | |||
draft-ietf-rtcweb-ip-handling-12 | ||||
Abstract | Abstract | |||
This document provides information and requirements for how IP | This document provides information and requirements for how IP | |||
addresses should be handled by WebRTC implementations. | addresses should be handled by Web Real-Time Communication (WebRTC) | |||
implementations. | ||||
Status of This Memo | Status of This Memo | |||
This Internet-Draft is submitted in full conformance with the | This is an Internet Standards Track document. | |||
provisions of BCP 78 and BCP 79. | ||||
Internet-Drafts are working documents of the Internet Engineering | ||||
Task Force (IETF). Note that other groups may also distribute | ||||
working documents as Internet-Drafts. The list of current Internet- | ||||
Drafts is at https://datatracker.ietf.org/drafts/current/. | ||||
Internet-Drafts are draft documents valid for a maximum of six months | This document is a product of the Internet Engineering Task Force | |||
and may be updated, replaced, or obsoleted by other documents at any | (IETF). It represents the consensus of the IETF community. It has | |||
time. It is inappropriate to use Internet-Drafts as reference | received public review and has been approved for publication by the | |||
material or to cite them other than as "work in progress." | Internet Engineering Steering Group (IESG). Further information on | |||
Internet Standards is available in Section 2 of RFC 7841. | ||||
This Internet-Draft will expire on January 3, 2020. | 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/rfc8828. | ||||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2019 IETF Trust and the persons identified as the | Copyright (c) 2021 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 | |||
carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
described in the Simplified BSD License. | described in the Simplified BSD License. | |||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | 1. Introduction | |||
2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 2 | 2. Terminology | |||
3. Problem Statement . . . . . . . . . . . . . . . . . . . . . . 2 | 3. Problem Statement | |||
4. Goals . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 | 4. Goals | |||
5. Detailed Design . . . . . . . . . . . . . . . . . . . . . . . 5 | 5. Detailed Design | |||
5.1. Principles . . . . . . . . . . . . . . . . . . . . . . . 5 | 5.1. Principles | |||
5.2. Modes and Recommendations . . . . . . . . . . . . . . . . 5 | 5.2. Modes and Recommendations | |||
6. Implementation Guidance . . . . . . . . . . . . . . . . . . . 7 | 6. Implementation Guidance | |||
6.1. Ensuring Normal Routing . . . . . . . . . . . . . . . . . 7 | 6.1. Ensuring Normal Routing | |||
6.2. Determining Associated Local Addresses . . . . . . . . . 7 | 6.2. Determining Associated Local Addresses | |||
7. Application Guidance . . . . . . . . . . . . . . . . . . . . 8 | 7. Application Guidance | |||
8. Security Considerations . . . . . . . . . . . . . . . . . . . 8 | 8. Security Considerations | |||
9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 8 | 9. IANA Considerations | |||
10. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 8 | 10. References | |||
11. References . . . . . . . . . . . . . . . . . . . . . . . . . 8 | 10.1. Normative References | |||
11.1. Normative References . . . . . . . . . . . . . . . . . . 8 | 10.2. Informative References | |||
11.2. Informative References . . . . . . . . . . . . . . . . . 9 | Acknowledgements | |||
Appendix A. Change log . . . . . . . . . . . . . . . . . . . . . 10 | Authors' Addresses | |||
Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 12 | ||||
1. Introduction | 1. Introduction | |||
One of WebRTC's key features is its support of peer-to-peer | One of WebRTC's key features is its support of peer-to-peer | |||
connections. However, when establishing such a connection, which | connections. However, when establishing such a connection, which | |||
involves connection attempts from various IP addresses, WebRTC may | involves connection attempts from various IP addresses, WebRTC may | |||
allow a web application to learn additional information about the | allow a web application to learn additional information about the | |||
user compared to an application that only uses the Hypertext Transfer | user compared to an application that only uses the Hypertext Transfer | |||
Protocol (HTTP) [RFC7230]. This may be problematic in certain cases. | Protocol (HTTP) [RFC7230]. This may be problematic in certain cases. | |||
This document summarizes the concerns, and makes recommendations on | This document summarizes the concerns and makes recommendations on | |||
how WebRTC implementations should best handle the tradeoff between | how WebRTC implementations should best handle the trade-off between | |||
privacy and media performance. | privacy and media performance. | |||
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 BCP | "OPTIONAL" in this document are to be interpreted as described in BCP | |||
14 [RFC2119][RFC8174] when, and only when, they appear in all | 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
capitals, as shown here. | capitals, as shown here. | |||
3. Problem Statement | 3. Problem Statement | |||
In order to establish a peer-to-peer connection, WebRTC | In order to establish a peer-to-peer connection, WebRTC | |||
implementations use Interactive Connectivity Establishment (ICE) | implementations use Interactive Connectivity Establishment (ICE) | |||
[RFC8445], which attempts to discover multiple IP addresses using | [RFC8445]. ICE attempts to discover multiple IP addresses using | |||
techniques such as Session Traversal Utilities for NAT (STUN) | techniques such as Session Traversal Utilities for NAT (STUN) | |||
[RFC5389] and Traversal Using Relays around NAT (TURN) [RFC5766] and | ||||
[RFC5389] and Traversal Using Relays around NAT (TURN) [RFC5766], and | ||||
then checks the connectivity of each local-address-remote-address | then checks the connectivity of each local-address-remote-address | |||
pair in order to select the best one. The addresses that are | pair in order to select the best one. The addresses that are | |||
collected usually consist of an endpoint's private physical or | collected usually consist of an endpoint's private physical or | |||
virtual addresses and its public Internet addresses. | virtual addresses and its public Internet addresses. | |||
These addresses are provided to the web application so that they can | These addresses are provided to the web application so that they can | |||
be communicated to the remote endpoint for its checks. This allows | be communicated to the remote endpoint for its checks. This allows | |||
the application to learn more about the local network configuration | the application to learn more about the local network configuration | |||
than it would from a typical HTTP scenario, in which the web server | than it would from a typical HTTP scenario, in which the web server | |||
would only see a single public Internet address, i.e., the address | would only see a single public Internet address, i.e., the address | |||
from which the HTTP request was sent. | from which the HTTP request was sent. | |||
The information revealed falls into three categories: | The additional information revealed falls into three categories: | |||
1. If the client is multihomed, additional public IP addresses for | 1. If the client is multihomed, additional public IP addresses for | |||
the client can be learned. In particular, if the client tries to | the client can be learned. In particular, if the client tries to | |||
hide its physical location through a Virtual Private Network | hide its physical location through a Virtual Private Network | |||
(VPN), and the VPN and local OS support routing over multiple | (VPN), and the VPN and local OS support routing over multiple | |||
interfaces (a "split-tunnel" VPN), WebRTC can discover not only | interfaces (a "split-tunnel" VPN), WebRTC can discover not only | |||
the public address for the VPN, but also the ISP public address | the public address for the VPN, but also the ISP public address | |||
over which the VPN is running. | over which the VPN is running. | |||
2. If the client is behind a Network Address Translator (NAT), the | 2. If the client is behind a Network Address Translator (NAT), the | |||
client's private IP addresses, often [RFC1918] addresses, can be | client's private IP addresses, often [RFC1918] addresses, can be | |||
learned. | learned. | |||
3. If the client is behind a proxy (a client-configured "classical | 3. If the client is behind a proxy (a client-configured "classical | |||
application proxy", as defined in [RFC1919], Section 3), but | application proxy", as defined in [RFC1919], Section 3), but | |||
direct access to the Internet is permitted, WebRTC's STUN checks | direct access to the Internet is permitted, WebRTC's STUN checks | |||
will bypass the proxy and reveal the public IP address of the | will bypass the proxy and reveal the public IP address of the | |||
client. This concern also applies to the "enterprise TURN | client. This concern also applies to the "enterprise TURN | |||
server" scenario described in [RFC7478], Section 2.3.5.1, if, as | server" scenario described in [RFC7478], Section 2.3.5.1 if, as | |||
above, direct Internet access is permitted. However, when the | above, direct Internet access is permitted. However, when the | |||
term "proxy" is used in this document, it is always in reference | term "proxy" is used in this document, it is always in reference | |||
to an [RFC1919] proxy server. | to an [RFC1919] proxy server. | |||
Of these three concerns, the first is the most significant, because | Of these three concerns, the first is the most significant, because | |||
for some users, the purpose of using a VPN is for anonymity. | for some users, the purpose of using a VPN is for anonymity. | |||
However, different VPN users will have different needs, and some VPN | However, different VPN users will have different needs, and some VPN | |||
users (e.g., corporate VPN users) may in fact prefer WebRTC to send | users (e.g., corporate VPN users) may in fact prefer WebRTC to send | |||
media traffic directly, i.e., not through the VPN. | media traffic directly -- i.e., not through the VPN. | |||
The second concern is less significant but valid nonetheless. The | The second concern is less significant but valid nonetheless. The | |||
core issue is that web applications can learn about addresses that | core issue is that web applications can learn about addresses that | |||
are not exposed to the internet; typically these address are IPv4, | are not exposed to the Internet; typically, these address are IPv4, | |||
but they can also be IPv6, as in the case of NAT64 [RFC6146]. While | but they can also be IPv6, as in the case of NAT64 [RFC6146]. While | |||
disclosure of the [RFC4941] IPv6 addresses recommended by | disclosure of the [RFC4941] IPv6 addresses recommended by [RFC8835] | |||
is fairly benign due to their intentionally short lifetimes, IPv4 | ||||
[I-D.ietf-rtcweb-transports] is fairly benign due to their | addresses present some challenges. Although private IPv4 addresses | |||
intentionally short lifetimes, IPv4 addresses present some | often contain minimal entropy (e.g., 192.168.0.2, a fairly common | |||
challenges. Although private IPv4 addresses often contain minimal | address), in the worst case, they can contain 24 bits of entropy with | |||
entropy (e.g., 192.168.0.2, a fairly common address), in the worst | an indefinite lifetime. As such, they can be a fairly significant | |||
case, they can contain 24 bits of entropy with an indefinite | fingerprinting surface. In addition, intranet web sites can be | |||
lifetime. As such, they can be a fairly significant fingerprinting | attacked more easily when their IPv4 address range is externally | |||
surface. In addition, intranet web sites can be attacked more easily | known. | |||
when their IPv4 address range is externally known. | ||||
Private IP addresses can also act as an identifier that allows web | Private IP addresses can also act as an identifier that allows web | |||
applications running in isolated browsing contexts (e.g., normal and | applications running in isolated browsing contexts (e.g., normal and | |||
private browsing) to learn that they are running on the same device. | private browsing) to learn that they are running on the same device. | |||
This could allow the application sessions to be correlated, defeating | This could allow the application sessions to be correlated, defeating | |||
some of the privacy protections provided by isolation. It should be | some of the privacy protections provided by isolation. It should be | |||
noted that private addresses are just one potential mechanism for | noted that private addresses are just one potential mechanism for | |||
this correlation and this is an area for further study. | this correlation and this is an area for further study. | |||
The third concern is the least common, as proxy administrators can | The third concern is the least common, as proxy administrators can | |||
already control this behavior through organizational firewall policy, | already control this behavior through organizational firewall policy, | |||
and generally, forcing WebRTC traffic through a proxy server will | and generally, forcing WebRTC traffic through a proxy server will | |||
have negative effects on both the proxy and on media quality. | have negative effects on both the proxy and media quality. | |||
Note also that these concerns predate WebRTC; Adobe Flash Player has | Note also that these concerns predate WebRTC; Adobe Flash Player has | |||
provided similar functionality since the introduction of Real-Time | provided similar functionality since the introduction of Real-Time | |||
Media Flow Protocol (RTMFP) support [RFC7016] in 2008. | Media Flow Protocol (RTMFP) support [RFC7016] in 2008. | |||
4. Goals | 4. Goals | |||
WebRTC's support of secure peer-to-peer connections facilitates | WebRTC's support of secure peer-to-peer connections facilitates | |||
deployment of decentralized systems, which can have privacy benefits. | deployment of decentralized systems, which can have privacy benefits. | |||
As a result, blunt solutions that disable WebRTC or make it | As a result, blunt solutions that disable WebRTC or make it | |||
significantly harder to use are undesirable. This document takes a | significantly harder to use are undesirable. This document takes a | |||
more nuanced approach, with the following goals: | more nuanced approach, with the following goals: | |||
o Provide a framework for understanding the problem so that controls | * Provide a framework for understanding the problem so that controls | |||
might be provided to make different tradeoffs regarding | might be provided to make different trade-offs regarding | |||
performance and privacy concerns with WebRTC. | performance and privacy concerns with WebRTC. | |||
o Using that framework, define settings that enable peer-to-peer | * Using that framework, define settings that enable peer-to-peer | |||
communications, each with a different balance between performance | communications, each with a different balance between performance | |||
and privacy. | and privacy. | |||
o Finally, provide recommendations for default settings that provide | * Finally, provide recommendations for default settings that provide | |||
reasonable performance without also exposing addressing | reasonable performance without also exposing addressing | |||
information in a way that might violate user expectations. | information in a way that might violate user expectations. | |||
5. Detailed Design | 5. Detailed Design | |||
5.1. Principles | 5.1. Principles | |||
The key principles for our framework are stated below: | The key principles for our framework are stated below: | |||
1. By default, WebRTC traffic should follow typical IP routing, | 1. By default, WebRTC traffic should follow typical IP routing | |||
i.e., WebRTC should use the same interface used for HTTP traffic, | (i.e., WebRTC should use the same interface used for HTTP | |||
and only the system's 'typical' public addresses (or those of an | traffic) and only the system's 'typical' public addresses (or | |||
enterprise TURN server, if present) should be visible to the | those of an enterprise TURN server, if present) should be visible | |||
application. However, in the interest of optimal media quality, | to the application. However, in the interest of optimal media | |||
it should be possible to enable WebRTC to make use of all network | quality, it should be possible to enable WebRTC to make use of | |||
interfaces to determine the ideal route. | all network interfaces to determine the ideal route. | |||
2. By default, WebRTC should be able to negotiate direct peer-to- | 2. By default, WebRTC should be able to negotiate direct peer-to- | |||
peer connections between endpoints (i.e., without traversing a | peer connections between endpoints (i.e., without traversing a | |||
NAT or relay server) when such connections are possible. This | NAT or relay server) when such connections are possible. This | |||
ensures that applications that need true peer-to-peer routing for | ensures that applications that need true peer-to-peer routing for | |||
bandwidth or latency reasons can operate successfully. | bandwidth or latency reasons can operate successfully. | |||
3. It should be possible to configure WebRTC to not disclose private | 3. It should be possible to configure WebRTC to not disclose private | |||
local IP addresses, to avoid the issues associated with web | local IP addresses, to avoid the issues associated with web | |||
applications learning such addresses. This document does not | applications learning such addresses. This document does not | |||
require this to be the default state, as there is no currently | require this to be the default state, as there is no currently | |||
defined mechanism that can satisfy this requirement as well as | defined mechanism that can satisfy this requirement as well as | |||
the aforementioned requirement to allow direct peer-to-peer | the aforementioned requirement to allow direct peer-to-peer | |||
connections. | connections. | |||
4. By default, WebRTC traffic should not be sent through proxy | 4. By default, WebRTC traffic should not be sent through proxy | |||
servers, due to the media quality problems associated with | servers, due to the media-quality problems associated with | |||
sending WebRTC traffic over TCP, which is almost always used when | sending WebRTC traffic over TCP, which is almost always used when | |||
communicating with such proxies, as well as proxy performance | communicating with such proxies, as well as proxy performance | |||
issues that may result from proxying WebRTC's long-lived, high- | issues that may result from proxying WebRTC's long-lived, high- | |||
bandwidth connections. However, it should be possible to force | bandwidth connections. However, it should be possible to force | |||
WebRTC to send its traffic through a configured proxy if desired. | WebRTC to send its traffic through a configured proxy if desired. | |||
5.2. Modes and Recommendations | 5.2. Modes and Recommendations | |||
Based on these ideas, we define four specific modes of WebRTC | Based on these ideas, we define four specific modes of WebRTC | |||
behavior, reflecting different media quality/privacy tradeoffs: | behavior, reflecting different media quality/privacy trade-offs: | |||
Mode 1: Enumerate all addresses: WebRTC MUST use all network | Mode 1 - Enumerate all addresses: | |||
interfaces to attempt communication with STUN servers, TURN | WebRTC MUST use all network interfaces to attempt communication | |||
servers, or peers. This will converge on the best media | with STUN servers, TURN servers, or peers. This will converge on | |||
path, and is ideal when media performance is the highest | the best media path and is ideal when media performance is the | |||
priority, but it discloses the most information. | highest priority, but it discloses the most information. | |||
Mode 2: Default route + associated local addresses: WebRTC MUST | Mode 2 - Default route + associated local addresses: | |||
follow the kernel routing table rules, which will typically | WebRTC MUST follow the kernel routing table rules, which will | |||
cause media packets to take the same route as the | typically cause media packets to take the same route as the | |||
application's HTTP traffic. If an enterprise TURN server is | application's HTTP traffic. If an enterprise TURN server is | |||
present, the preferred route MUST be through this TURN | present, the preferred route MUST be through this TURN server. | |||
server. Once an interface has been chosen, the private IPv4 | Once an interface has been chosen, the private IPv4 and IPv6 | |||
and IPv6 addresses associated with this interface MUST be | addresses associated with this interface MUST be discovered and | |||
discovered and provided to the application as host | provided to the application as host candidates. This ensures that | |||
candidates. This ensures that direct connections can still | direct connections can still be established in this mode. | |||
be established in this mode. | ||||
Mode 3: Default route only: This is the the same as Mode 2, except | Mode 3 - Default route only: | |||
that the associated private addresses MUST NOT be provided; | This is the same as Mode 2, except that the associated private | |||
the only IP addresses gathered are those discovered via | addresses MUST NOT be provided; the only IP addresses gathered are | |||
mechanisms like STUN and TURN (on the default route). This | those discovered via mechanisms like STUN and TURN (on the default | |||
may cause traffic to hairpin through a NAT, fall back to an | route). This may cause traffic to hairpin through a NAT, fall | |||
application TURN server, or fail altogether, with resulting | back to an application TURN server, or fail altogether, with | |||
quality implications. | resulting quality implications. | |||
Mode 4: Force proxy: This is the same as Mode 3, but when the | Mode 4 - Force proxy: | |||
application's HTTP traffic is sent through a proxy, WebRTC | This is the same as Mode 3, but when the application's HTTP | |||
media traffic MUST also be proxied. If the proxy does not | traffic is sent through a proxy, WebRTC media traffic MUST also be | |||
support UDP (as is the case for all HTTP and most SOCKS | proxied. If the proxy does not support UDP (as is the case for | |||
[RFC1928] proxies), or the WebRTC implementation does not | all HTTP and most SOCKS [RFC1928] proxies), or the WebRTC | |||
support UDP proxying, the use of UDP will be disabled, and | implementation does not support UDP proxying, the use of UDP will | |||
TCP will be used to send and receive media through the | be disabled, and TCP will be used to send and receive media | |||
proxy. Use of TCP will result in reduced media quality, in | through the proxy. Use of TCP will result in reduced media | |||
addition to any performance considerations associated with | quality, in addition to any performance considerations associated | |||
sending all WebRTC media through the proxy server. | with sending all WebRTC media through the proxy server. | |||
Mode 1 MUST NOT be used unless user consent has been provided. The | Mode 1 MUST NOT be used unless user consent has been provided. The | |||
details of this consent are left to the implementation; one potential | details of this consent are left to the implementation; one potential | |||
mechanism is to tie this consent to getUserMedia (device permissions) | mechanism is to tie this consent to getUserMedia (device permissions) | |||
consent, described in [I-D.ietf-rtcweb-security-arch], Section 6.2. | consent, described in [RFC8827], Section 6.2. Alternatively, | |||
Alternatively, implementations can provide a specific mechanism to | implementations can provide a specific mechanism to obtain user | |||
obtain user consent. | consent. | |||
In cases where user consent has not been obtained, Mode 2 SHOULD be | In cases where user consent has not been obtained, Mode 2 SHOULD be | |||
used. | used. | |||
These defaults provide a reasonable tradeoff that permits trusted | These defaults provide a reasonable trade-off that permits trusted | |||
WebRTC applications to achieve optimal network performance, but gives | WebRTC applications to achieve optimal network performance but gives | |||
applications without consent (e.g., 1-way streaming or data channel | applications without consent (e.g., 1-way streaming or data-channel | |||
applications) only the minimum information needed to achieve direct | applications) only the minimum information needed to achieve direct | |||
connections, as defined in Mode 2. However, implementations MAY | connections, as defined in Mode 2. However, implementations MAY | |||
choose stricter modes if desired, e.g., if a user indicates they want | choose stricter modes if desired, e.g., if a user indicates they want | |||
all WebRTC traffic to follow the default route. | all WebRTC traffic to follow the default route. | |||
Future documents may define additional modes and/or update the | Future documents may define additional modes and/or update the | |||
recommended default modes. | recommended default modes. | |||
Note that the suggested defaults can still be used even for | Note that the suggested defaults can still be used even for | |||
organizations that want all external WebRTC traffic to traverse a | organizations that want all external WebRTC traffic to traverse a | |||
proxy or enterprise TURN server, simply by setting an organizational | proxy or enterprise TURN server, simply by setting an organizational | |||
firewall policy that allows WebRTC traffic to only leave through the | firewall policy that allows WebRTC traffic to only leave through the | |||
proxy or TURN server. This provides a way to ensure the proxy or | proxy or TURN server. This provides a way to ensure the proxy or | |||
TURN server is used for any external traffic, but still allows direct | TURN server is used for any external traffic but still allows direct | |||
connections (and, in the proxy case, avoids the performance issues | connections (and, in the proxy case, avoids the performance issues | |||
associated with forcing media through said proxy) for intra- | associated with forcing media through said proxy) for intra- | |||
organization traffic. | organization traffic. | |||
6. Implementation Guidance | 6. Implementation Guidance | |||
This section provides guidance to WebRTC implementations on how to | This section provides guidance to WebRTC implementations on how to | |||
implement the policies described above. | implement the policies described above. | |||
6.1. Ensuring Normal Routing | 6.1. Ensuring Normal Routing | |||
skipping to change at page 7, line 38 ¶ | skipping to change at line 312 ¶ | |||
IPv6), which allows the OS to route WebRTC traffic the same way as it | IPv6), which allows the OS to route WebRTC traffic the same way as it | |||
would HTTP traffic. STUN and TURN will work as usual, and host | would HTTP traffic. STUN and TURN will work as usual, and host | |||
candidates can still be determined as mentioned below. | candidates can still be determined as mentioned below. | |||
6.2. Determining Associated Local Addresses | 6.2. Determining Associated Local Addresses | |||
When binding to a wildcard address, some extra work is needed to | When binding to a wildcard address, some extra work is needed to | |||
determine the associated local address required by Mode 2, which we | determine the associated local address required by Mode 2, which we | |||
define as the source address that would be used for any packets sent | define as the source address that would be used for any packets sent | |||
to the web application host (assuming that UDP and TCP get the same | to the web application host (assuming that UDP and TCP get the same | |||
routing treatment). Use of the web application host as a destination | routing treatment). Use of the web-application host as a destination | |||
ensures the right source address is selected, regardless of where the | ensures the right source address is selected, regardless of where the | |||
application resides (e.g., on an intranet). | application resides (e.g., on an intranet). | |||
First, the appropriate remote IPv4/IPv6 address is obtained by | First, the appropriate remote IPv4/IPv6 address is obtained by | |||
resolving the host component of the web application URI [RFC3986]. | resolving the host component of the web application URI [RFC3986]. | |||
If the client is behind a proxy and cannot resolve these IPs via DNS, | If the client is behind a proxy and cannot resolve these IPs via DNS, | |||
the address of the proxy can be used instead. Or, if the web | the address of the proxy can be used instead. Or, if the web | |||
application was loaded from a file:// URI [RFC8089], rather than over | application was loaded from a file:// URI [RFC8089] rather than over | |||
the network, the implementation can fall back to a well-known DNS | the network, the implementation can fall back to a well-known DNS | |||
name or IP address. | name or IP address. | |||
Once a suitable remote IP has been determined, the implementation can | Once a suitable remote IP has been determined, the implementation can | |||
create a UDP socket, bind() it to the appropriate wildcard address, | create a UDP socket, bind() it to the appropriate wildcard address, | |||
and then connect() to the remote IP. Generally, this results in the | and then connect() to the remote IP. Generally, this results in the | |||
socket being assigned a local address based on the kernel routing | socket being assigned a local address based on the kernel routing | |||
table, without sending any packets over the network. | table, without sending any packets over the network. | |||
Finally, the socket can be queried using getsockname() or the | Finally, the socket can be queried using getsockname() or the | |||
equivalent to determine the appropriate local address. | equivalent to determine the appropriate local address. | |||
7. Application Guidance | 7. Application Guidance | |||
The recommendations mentioned in this document may cause certain | The recommendations mentioned in this document may cause certain | |||
WebRTC applications to malfunction. In order to be robust in all | WebRTC applications to malfunction. In order to be robust in all | |||
scenarios, the following guidelines are provided for applications: | scenarios, the following guidelines are provided for applications: | |||
o Applications SHOULD deploy a TURN server with support for both UDP | * Applications SHOULD deploy a TURN server with support for both UDP | |||
and TCP connections to the server. This ensures that connectivity | and TCP connections to the server. This ensures that connectivity | |||
can still be established, even when Mode 3 or 4 are in use, | can still be established, even when Mode 3 or 4 is in use, | |||
assuming the TURN server can be reached. | assuming the TURN server can be reached. | |||
o Applications SHOULD detect when they don't have access to the full | * Applications SHOULD detect when they don't have access to the full | |||
set of ICE candidates by checking for the presence of host | set of ICE candidates by checking for the presence of host | |||
candidates. If no host candidates are present, Mode 3 or 4 above | candidates. If no host candidates are present, Mode 3 or 4 is in | |||
is in use; this knowledge can be useful for diagnostic purposes. | use; this knowledge can be useful for diagnostic purposes. | |||
8. Security Considerations | 8. Security Considerations | |||
This document describes several potential privacy and security | This document describes several potential privacy and security | |||
concerns associated with WebRTC peer-to-peer connections, and | concerns associated with WebRTC peer-to-peer connections and provides | |||
provides mechanisms and recommendations for WebRTC implementations to | mechanisms and recommendations for WebRTC implementations to address | |||
address these concerns. | these concerns. | |||
9. IANA Considerations | 9. IANA Considerations | |||
This document requires no actions from IANA. | This document has no IANA actions. | |||
10. Acknowledgements | ||||
Several people provided input into this document, including Bernard | ||||
Aboba, Harald Alvestrand, Youenn Fablet, Ted Hardie, Matthew | ||||
Kaufmann, Eric Rescorla, Adam Roach, and Martin Thomson. | ||||
11. References | 10. References | |||
11.1. Normative References | 10.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>. | |||
[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 35 ¶ | skipping to change at line 399 ¶ | |||
[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/info/rfc8174>. | May 2017, <https://www.rfc-editor.org/info/rfc8174>. | |||
[RFC8445] Keranen, A., Holmberg, C., and J. Rosenberg, "Interactive | [RFC8445] Keranen, A., Holmberg, C., and J. Rosenberg, "Interactive | |||
Connectivity Establishment (ICE): A Protocol for Network | Connectivity Establishment (ICE): A Protocol for Network | |||
Address Translator (NAT) Traversal", RFC 8445, | Address Translator (NAT) Traversal", RFC 8445, | |||
DOI 10.17487/RFC8445, July 2018, | DOI 10.17487/RFC8445, July 2018, | |||
<https://www.rfc-editor.org/info/rfc8445>. | <https://www.rfc-editor.org/info/rfc8445>. | |||
11.2. Informative References | 10.2. Informative References | |||
[I-D.ietf-rtcweb-security-arch] | ||||
Rescorla, E., "WebRTC Security Architecture", draft-ietf- | ||||
rtcweb-security-arch-18 (work in progress), February 2019. | ||||
[I-D.ietf-rtcweb-transports] | ||||
Alvestrand, H., "Transports for WebRTC", draft-ietf- | ||||
rtcweb-transports-17 (work in progress), October 2016. | ||||
[RFC1918] Rekhter, Y., Moskowitz, B., Karrenberg, D., de Groot, G., | [RFC1918] Rekhter, Y., Moskowitz, B., Karrenberg, D., de Groot, G. | |||
and E. Lear, "Address Allocation for Private Internets", | J., and E. Lear, "Address Allocation for Private | |||
BCP 5, RFC 1918, DOI 10.17487/RFC1918, February 1996, | Internets", BCP 5, RFC 1918, DOI 10.17487/RFC1918, | |||
<https://www.rfc-editor.org/info/rfc1918>. | February 1996, <https://www.rfc-editor.org/info/rfc1918>. | |||
[RFC1919] Chatel, M., "Classical versus Transparent IP Proxies", | [RFC1919] Chatel, M., "Classical versus Transparent IP Proxies", | |||
RFC 1919, DOI 10.17487/RFC1919, March 1996, | RFC 1919, DOI 10.17487/RFC1919, March 1996, | |||
<https://www.rfc-editor.org/info/rfc1919>. | <https://www.rfc-editor.org/info/rfc1919>. | |||
[RFC1928] Leech, M., Ganis, M., Lee, Y., Kuris, R., Koblas, D., and | [RFC1928] Leech, M., Ganis, M., Lee, Y., Kuris, R., Koblas, D., and | |||
L. Jones, "SOCKS Protocol Version 5", RFC 1928, | L. Jones, "SOCKS Protocol Version 5", RFC 1928, | |||
DOI 10.17487/RFC1928, March 1996, | DOI 10.17487/RFC1928, March 1996, | |||
<https://www.rfc-editor.org/info/rfc1928>. | <https://www.rfc-editor.org/info/rfc1928>. | |||
skipping to change at page 10, line 34 ¶ | skipping to change at line 439 ¶ | |||
[RFC7230] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer | [RFC7230] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer | |||
Protocol (HTTP/1.1): Message Syntax and Routing", | Protocol (HTTP/1.1): Message Syntax and Routing", | |||
RFC 7230, DOI 10.17487/RFC7230, June 2014, | RFC 7230, DOI 10.17487/RFC7230, June 2014, | |||
<https://www.rfc-editor.org/info/rfc7230>. | <https://www.rfc-editor.org/info/rfc7230>. | |||
[RFC7478] Holmberg, C., Hakansson, S., and G. Eriksson, "Web Real- | [RFC7478] Holmberg, C., Hakansson, S., and G. Eriksson, "Web Real- | |||
Time Communication Use Cases and Requirements", RFC 7478, | Time Communication Use Cases and Requirements", RFC 7478, | |||
DOI 10.17487/RFC7478, March 2015, | DOI 10.17487/RFC7478, March 2015, | |||
<https://www.rfc-editor.org/info/rfc7478>. | <https://www.rfc-editor.org/info/rfc7478>. | |||
Appendix A. Change log | [RFC8827] Rescorla, E., "WebRTC Security Architecture", RFC 8827, | |||
DOI 10.17487/RFC8827, January 2021, | ||||
Changes in draft -12: | <https://www.rfc-editor.org/info/rfc8827>. | |||
o Editorial updates from IETF LC review. | ||||
Changes in draft -11: | ||||
o Editorial updates from AD review. | ||||
Changes in draft -10: | ||||
o Incorporate feedback from IETF 102 on the problem space. | ||||
o Note that future versions of the document may define new modes. | ||||
Changes in draft -09: | ||||
o Fixed confusing text regarding enterprise TURN servers. | ||||
Changes in draft -08: | ||||
o Discuss how enterprise TURN servers should be handled. | ||||
Changes in draft -07: | ||||
o Clarify consent guidance. | ||||
Changes in draft -06: | ||||
o Clarify recommendations. | ||||
o Split implementation guidance into two sections. | ||||
Changes in draft -05: | ||||
o Separated framework definition from implementation techniques. | ||||
o Removed RETURN references. | ||||
o Use origin when determining local IPs, rather than a well-known | ||||
IP. | ||||
Changes in draft -04: | ||||
o Rewording and cleanup in abstract, intro, and problem statement. | ||||
o Added 2119 boilerplate. | ||||
o Fixed weird reference spacing. | ||||
o Expanded acronyms on first use. | ||||
o Removed 8.8.8.8 mention. | ||||
o Removed mention of future browser considerations. | ||||
Changes in draft -03: | ||||
o Clarified when to use which modes. | ||||
o Added 2119 qualifiers to make normative statements. | ||||
o Defined 'proxy'. | ||||
o Mentioned split tunnels in problem statement. | ||||
Changes in draft -02: | ||||
o Recommendations -> Requirements | ||||
o Updated text regarding consent. | ||||
Changes in draft -01: | ||||
o Incorporated feedback from Adam Roach; changes to discussion of | ||||
cam/mic permission, as well as use of proxies, and various | ||||
editorial changes. | ||||
o Added several more references. | [RFC8835] Alvestrand, H., "Transports for WebRTC", RFC 8835, | |||
DOI 10.17487/RFC8835, January 2021, | ||||
<https://www.rfc-editor.org/info/rfc8835>. | ||||
Changes in draft -00: | Acknowledgements | |||
o Published as WG draft. | Several people provided input into this document, including Bernard | |||
Aboba, Harald Alvestrand, Youenn Fablet, Ted Hardie, Matthew | ||||
Kaufmann, Eric Rescorla, Adam Roach, and Martin Thomson. | ||||
Author's Address | Authors' Addresses | |||
Justin Uberti | Justin Uberti | |||
747 6th St S | 747 6th St S | |||
Kirkland, WA 98033 | Kirkland, WA 98033 | |||
USA | United States of America | |||
Email: justin@uberti.name | Email: justin@uberti.name | |||
Guo-wei Shieh | ||||
333 Elliott Ave W #500 | ||||
Seattle, WA 98119 | ||||
United States of America | ||||
Email: guoweis@gmail.com | ||||
End of changes. 50 change blocks. | ||||
227 lines changed or deleted | 135 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/ |