Movatterモバイル変換


[0]ホーム

URL:


Jump to content
WikipediaThe Free Encyclopedia
Search

Server Name Indication

From Wikipedia, the free encyclopedia
TLS extension to serve multiple HTTPS sites

Server Name Indication (SNI) is an extension to theTransport Layer Security (TLS) computer networking protocol by which aclient indicates whichhostname it is attempting to connect to at the start of the handshaking process.[1] The extension allows a server to present one of multiple possiblecertificates on the sameIP address andTCP port number and hence allows multiple secure (HTTPS) websites (or any otherservice over TLS) to be served by the same IP address without requiring all those sites to use the same certificate. It is the conceptual equivalent to HTTP/1.1 name-basedvirtual hosting, but for HTTPS. This also allows a proxy to forward client traffic to the right server during a TLS handshake. The desired hostname is not encrypted in the original SNI extension, so an eavesdropper can see which site is being requested. The SNI extension was specified in 2003 inRFC 3546

Background of the problem

[edit]

Prior to SNI, when making a TLS connection, the client had no way to specify which site it was trying to connect to. Hence, if one server hosts multiple sites on a single listener, the server has no way to know which certificate to use in the TLS protocol. In more detail, when making a TLS connection, the client requests a digital certificate from the web server. Once the server sends the certificate, the client examines it and compares the name it was trying to connect to with the name(s) included in the certificate. If a match occurs, the connection proceeds as normal. If a match is not found, the user may be warned of the discrepancy and the connection may abort as the mismatch may indicate an attempted man-in-the-middle attack. However, some applications allow the user to bypass the warning to proceed with the connection, with the user taking on the responsibility of trusting the certificate and, by extension, the connection.

However, it may be hard – or even impossible due to lack of a full list of all names in advance – to obtain a single certificate that covers all names a server will be responsible for. A server that is responsible for multiple hostnames is likely to need to present a different certificate for each name (or small group of names). It is possible to usesubjectAltName to contain multiple domains controlled by one person[2] in a single certificate. Such "unified communications certificates" must be reissued every time the list of domains changes.

Name-based virtual hosting allows multiple DNS hostnames to be hosted by a single server (usually a web server) on the same IP address. To achieve this, the server uses a hostname presented by the client as part of the protocol (for HTTP the name is presented in the host header). However, when using HTTPS, the TLS handshake happens before the server sees any HTTP headers. Therefore, it was not possible for the server to use the information in the HTTP host header to decide which certificate to present and as such only names covered by the same certificate could be served from the same IP address.

In practice, this meant that anHTTPS server could only serve one domain (or small group of domains) per IP address for secured and efficient browsing. Assigning a separate IP address for each site increases the cost of hosting, since requests for IP addresses must be justified to the regional Internet registry and IPv4 addresses are now exhausted. ForIPv6, it increases the administrative overhead by having multiple IPs on a single machine, even though the address space is not exhausted. The result was that many websites were effectively constrained from using secure communications.

Technical principles

[edit]

SNI addresses this issue by having the client send the name of the virtual domain as part of the TLS negotiation'sClientHello message.[3] This enables the server to select the correct virtual domain early and present the browser with the certificate containing the correct name. Therefore, with clients and servers that implement SNI, a server with a single IP address can serve a group of domain names for which it is impractical to get a common certificate.

SNI was added to theIETF'sInternet RFCs in June 2003 through RFC 3546,Transport Layer Security (TLS) Extensions. The latest version of the standard is RFC 6066.

Security implications

[edit]

Server Name Indication payload is not encrypted, thus the hostname of the server the client tries to connect to is visible to a passive eavesdropper. This protocol weakness was exploited by security software for network filtering and monitoring[4][5][6] and governments to implement censorship.[7]

Presently, there are multiple technologies attempting to hide Server Name Indication:

Domain fronting

[edit]
Main article:Domain fronting

Domain fronting is a technique of replacing the desired host name in SNI with another one hosted by the same server or, more frequently, network of servers known as acontent delivery network. When a client uses domain fronting, it replaces the server domain in SNI (unencrypted), but leaves it in the HTTP host header (which is encrypted by TLS) so that server can serve the right content. Domain fronting violates the standard defining SNI itself,[citation needed][where?] so its compatibility is limited (many services check that SNI host matches the HTTP header host and reject connections with domain-fronted SNI as invalid). While domain fronting was used in the past to avoid government censorship,[8] its popularity dwindled because major cloud providers (Google, Amazon's AWS and CloudFront) explicitly prohibit it in their TOS and have technical restrictions against it.[9]

Encrypted Client Hello

[edit]

Encrypted Client Hello (ECH) is aTLS 1.3 protocol extension that enables encryption of the whole Client Hello message, which is sent during the early stage of TLS 1.3 negotiation.[10] ECH encrypts the payload with a public key that the relying party (a web browser) needs to know in advance, which means ECH is most effective with largeCDNs known to browser vendors in advance.

The initial 2018 version of this extension was called Encrypted SNI (ESNI)[11] and its implementations were rolled out in an "experimental" fashion to address this risk of domain eavesdropping.[12][13][14] In contrast to ECH, Encrypted SNI encrypted just the SNI rather than the whole Client Hello.[15] Opt-in support for this version was incorporated into Firefox in October 2018[16] and required enablingDNS over HTTPS (DoH).[17] But it was removed in January 2021 with the release of Firefox 85.[18]

In March 2020, ESNI was reworked into the ECH extension, after analysis demonstrated that encrypting only the SNI is insufficient. For example, specifications permit the Pre-Shared Key extension to contain any data to facilitate session resumption, even transmission of a cleartext copy of exactly the same server name that is encrypted by ESNI. Also, encrypting extensions one-by-one would require an encrypted variant of every extension, each with potential privacy implications, and even that exposes the set of extensions advertised. Lastly, real-world deployment of ESNI has exposed interoperability limitations.[19] The short name wasECHO in March 2020[15] and changed toECH in May 2020.[20]

Both ESNI and ECH are compatible only with TLS 1.3 because they rely on KeyShareEntry which was first defined in TLS 1.3.[21][22]

AnotherInternet Draft incorporates a parameter for transmitting the ECH public keys viaHTTPS and SVCB DNS record types, shortening the handshake process.[23][24]

In August 2020, theGreat Firewall of China started blocking ESNI traffic, while still allowing ECH traffic.[25]

In October 2020, Russian ISPRostelecom and its mobile operatorTele2 started blocking ESNI traffic.[26] In September of the same year, Russian censorship ministryRoscomnadzor planned to ban a range of encryption protocols, among which were TLS 1.3 and ESNI, which hindered web site access censorship.[27][28][29]

In July 2023, in theIETF117 meeting, members working on ECH informed Chrome and Firefox were doing a 1% sample trial, and the team expects the final draft to be submitted to theIESG evaluation by January 2024.[30][31]

In Sep 2023, Cloudflare started to support ECH for hosted domains.[32]

ECH is enabled in Firefox by default since version 119, and is recommended by Mozilla to be used along withDNS over HTTPS.[33] In September 2023,Chromium version 117 (used inGoogle Chrome,Microsoft Edge,Samsung Internet, andOpera) enabled it by default, also requiring keys to be deployed in HTTPS resource records in DNS.[34][35]

Implementation

[edit]

In 2004, a patch for adding TLS/SNI intoOpenSSL was created by the EdelKey project.[36] In 2006, this patch was then ported to the development branch of OpenSSL, and in 2007 it was back-ported to OpenSSL 0.9.8 (first released in 0.9.8f[37]). First web browsers with SNI support appeared in 2006 (Mozilla Firefox 2.0, Internet Explorer 7), web servers later (Apache HTTP Server in 2009, Microsoft IIS in 2012).

For an application program to implement SNI, the TLS library it uses must implement it and the application must pass the hostname to the TLS library. Further complicating matters, the TLS library may either be included in the application program or be a component of the underlying operating system. Because of this, some browsers implement SNI when running on any operating system, while others implement it only when running on certain operating systems.[citation needed]

Support

[edit]
Support
SNI SupportECH Support
SoftwareTypeSupportedNotesSinceSupportedNotes
Alpine (email client)IMAPemail clientYesSince version 2.22[38]2019-02-18
Internet ExplorerWeb browserYesSince version 7 onVista (not supported onXP)2006No
EdgeWeb browserYesAll versionsYesSince v105 behind flag[39]
Mozilla FirefoxWeb browserYesSince version 2.02006YesIntroduced in v85 behind flag.[40] Enabled by default in v118 whenDoH is enabled.[41]
cURLCommand-line tool and libraryYesSince version 7.18.12008Partial[42][43]
SafariWeb browserYesNot supported onWindows XPNo[44]
Google ChromeWeb browserYes2010YesSince v105 behind flag.[40]
BlackBerry 10Web browserYesSupported in all BB10 releases2013No
BlackBerry OSNo
BarracudaWAFReverse ProxyYesSupported since version 7.8[45]2013
BarracudaADCLoad balancerYesFrontend support since version 4.0 and backend support from v5.2[46]Frontend 2013 / Backend 2015
Windows MobileWeb browserSome time after 6.5No
Android browser
(discontinued in Android 4.2)
Web browserYesHoneycomb (3.x) for tablets andIce Cream Sandwich (4.x) for phones2011No
Firefox for AndroidWeb browserYesSupported for browsing. Sync and other services support SNI only since version 86.[47]Only on Firefox Beta and Nightly is possible to enableDoH by a flag.
wgetCommand-line toolYesSince version 1.142012
Nokia Browser for SymbianWeb browserNoNo
Opera Mobile for SymbianWeb browserNoNot supported on Series60No
DilloWeb browserYesSince version 3.12016
IBM HTTP ServerWeb serverYesSince version 9.0.0[48][49]
Apache TomcatWeb serverYesNot supported before 8.5 (backport from 9)
Apache HTTP ServerWeb serverYesSince version 2.2.122009
Microsoft IISWeb serverYesSince version 8 (part ofWindows Server 2012)2012
nginxWeb serverYesSince version 0.5.232007No[50]
Caddy (web server)Web serverYesYes[51]
JettyWeb serverYesSince version 9.3.02015
HCL DominoWeb serverYesSince version 11.0.12020
HCL NotesWorkflow clientYesSince version 14.02023[52]
H2OWeb serverYesYes[53][54]
BoringSSLLibraryYesYes[55]
BSAFE Micro Edition SuiteLibraryYesVersion 5.0[56]
GnuTLSLibraryYesNoWork in progress as July 2023.[57]
LibreSSLLibraryYesNo[58]
Mbed TLSLibraryYesNo
MozillaNSS client sideLibraryYesSince version 3.11.1[59]2006Yes[60]
MozillaNSS server sideLibraryNo[61]No
OpenSSLLibraryYesNo[62]
PicotlsLibraryYesYes[63]
RustlsLibraryYesNoSupports client-side ECH; server-side ECH still todo as of August 2024[64]
SwiftNIO SSLLibraryYesNo[65]
wolfSSLLibraryYesYesSince v5.6.3[66]
4th DimensionStandard libraryNoNot supported in 15.2 or earlierNo
ColdFusion /LuceeStandard libraryYesColdFusion since Version 10 Update 18, 11 Update 7, Lucee since Version 4.5.1.019, Version 5.0.0.502015
ErlangStandard libraryYesSince version r172013
GoStandard libraryYesSince version 1.42011Cloudflare/go fork provides support[67]
JavaStandard libraryYesSince version 1.72011
PerlStandard libraryYesSinceNet::SSLeay version 1.50 andIO::Socket::SSL version 1.562012
PHPStandard libraryYesSince version 5.32014
PythonStandard libraryYesSupported in 2.x from 2.7.9 and 3.x from 3.2 (inssl,urllib[2] andhttplib modules)2011 for Python 3.x and 2014 for Python 2.x
QtStandard libraryYesSince version 4.82011
RubyStandard libraryYesSince version 2.0 (innet/http)2011
HiawathaWeb serverYesSince version 8.62012NoDepends onMbed TLS.[68]
lighttpdWeb serverYesSince version 1.4.242009YesSince version 1.4.77[69]
HAProxyLoad balancerYesSince version 1.5-dev12[70]2012No[71]
OpenBSD httpdWeb serverYesSince OpenBSD version 6.1[72]2017-04-11NoDepends on OpenSSL.[73]

References

[edit]
  1. ^Blake-Wilson, Simon; Nystrom, Magnus; Hopwood, David; Mikkelsen, Jan; Wright, Tim (June 2003)."Server Name ssl_ocsp_responderIndication".Transport Layer Security (TLS) Extensions.IETF. p. 8. sec. 3.1.doi:10.17487/RFC3546.ISSN 2070-1721.RFC3546.
  2. ^"What is a Multiple Domain (UCC) SSL Certificate?".GoDaddy.
  3. ^"TLS Server Name Indication".Paul's Journal. Retrieved3 July 2024.
  4. ^"Web Filter: SNI extension feature and HTTPS blocking".www3.trustwave.com. Retrieved3 July 2024.
  5. ^"Sophos UTM: Understanding Sophos Web Filtering".Sophos Community. Retrieved20 February 2019.
  6. ^Chrisment, Isabelle; Goichot, Antoine; Cholez, Thibault; Shbair, Wazen M. (11 May 2015)."Efficiently Bypassing SNI-based HTTPS Filtering".2015 IFIP/IEEE International Symposium on Integrated Network Management (IM)(PDF). pp. 990–995.doi:10.1109/INM.2015.7140423.ISBN 978-1-4799-8241-7.S2CID 14963313.
  7. ^"South Korea is Censoring the Internet by Snooping on SNI Traffic".BleepingComputer. Retrieved18 February 2019.
  8. ^"Encrypted chat app Signal circumvents government censorship".Engadget. 21 December 2016. Retrieved3 July 2024.
  9. ^"Amazon threatens to suspend Signal's AWS account over censorship circumvention".Signal. Retrieved2 May 2018.
  10. ^Rescorla, Eric; Oku, Kazuho; Sullivan, Nick; Wood, Christopher A. (9 October 2023).TLS Encrypted Client Hello (Report). Internet Engineering Task Force.
  11. ^Rescorla, Eric; Oku, Kazuho; Sullivan, Nick; Wood, Christopher A. (6 April 2023)."Draft-ietf-TLS-esni-14".
  12. ^"ESNI: A Privacy-Protecting Upgrade to HTTPS".EFF DeepLinks Blog. 24 September 2018.
  13. ^Claburn, Thomas (17 July 2018)."Don't panic about domain fronting, an SNI fix is getting hacked out".The Register. Retrieved10 October 2018.
  14. ^Ghedini, Alessandro (24 September 2018)."Encrypt it or lose it: how encrypted SNI works".The Cloudflare Blog. Retrieved13 May 2019.
  15. ^ab"ESNI -> ECHO · tlswg/draft-ietf-tls-esni".GitHub.
  16. ^Eric, Rescorla (18 October 2018)."Encrypted SNI Comes to Firefox Nightly".Mozilla Security Blog. Retrieved15 June 2020.
  17. ^Daniel, Stenberg."Curl: Re: Support of Encrypted SNI (curl-library mailing list archive)".curl.se. Retrieved15 June 2020.
  18. ^"1667743 - Clean up unused esni code".bugzilla.mozilla.org. Retrieved7 April 2022.
  19. ^Jacobs, Kevin (7 January 2021)."Encrypted Client Hello: the future of ESNI in Firefox".Mozilla Security Blog. Retrieved9 January 2021.
  20. ^"s/ECHO/ECH · tlswg/draft-ietf-tls-esni".GitHub.
  21. ^Ghedini, Alessandro (24 September 2018)."Encrypt it or lose it: how encrypted SNI works".The Cloudflare Blog. Retrieved13 May 2019.this is an extension to TLS version 1.3 and above, and doesn't work with previous versions of the protocol
  22. ^"Make ESNI TLS 1.2 compatible · Issue #38 · tlswg/draft-ietf-tls-esni".GitHub. Retrieved9 August 2020.
  23. ^Schwartz, Benjamin M.; Bishop, Mike; Nygren, Erik (11 March 2023)."Service binding and parameter specification via the DNS (DNS SVCB and HTTPS RRs)". Internet Engineering Task Force. Retrieved25 July 2023.
  24. ^Schwartz, Benjamin M.; Bishop, Mike; Nygren, Erik (26 September 2023)."Bootstrapping TLS Encrypted ClientHello with DNS Service Bindings". Internet Engineering Task Force. Retrieved1 October 2023.
  25. ^Cimpanu, Catalin."China is now blocking all encrypted HTTPS traffic that uses TLS 1.3 and ESNI".ZDNet. Retrieved9 August 2020.
  26. ^"Почему Ростелеком блокирует ESNI трафик?".qna.habr.com (in Russian). 11 October 2020. Retrieved30 October 2020.
  27. ^"Russia's Digital Development Ministry wants to ban the latest encryption technologies from the RuNet".Meduza. Retrieved18 June 2021.
  28. ^Cimpanu, Catalin."Russia wants to ban the use of secure protocols such as TLS 1.3, DoH, DoT, ESNI".ZDNet. Retrieved18 June 2021.
  29. ^Sherman, Justin (25 September 2020)."Russia Is Trying Something New to Isolate Its Internet From the Rest of the World".Slate Magazine. Retrieved18 June 2021.
  30. ^TLS Working Group (26 July 2023)."Minutes IETF117: tls: Wed 20:00".IETF Datatracker.Archived from the original on 2 August 2023. Retrieved2 August 2023.
  31. ^TLS Working Group (26 July 2023).IETF117-TLS-20230726-2000.YouTube (video). San Francisco: Internet Engineering Task Force. Retrieved2 August 2023.
  32. ^Achiel van der Mandele; Alessandro Ghedini; Christopher Wood; Rushil Mehra."Encrypted Client Hello - the last puzzle piece to privacy".The Cloudflare Blog. Retrieved1 October 2023.
  33. ^"Encrypted Client Hello (ECH) - Frequently asked questions | Firefox Help".support.mozilla.org. Retrieved1 December 2024.
  34. ^"How to disable TLS Encrypted ClientHello in Google Chrome using PowerShell". Chaser Systems Ltd. 9 October 2023.
  35. ^"Feature: TLS Encrypted Client Hello (ECH)".Chrome Platform Status.Google. 12 December 2023. Retrieved21 February 2024.
  36. ^"EdelKey Project".edelweb.fr. Retrieved20 February 2019.
  37. ^"OpenSSL CHANGES". Archived fromthe original on 20 April 2016.
  38. ^"Public Git Hosting - alpine.git/Commit".
  39. ^"How to improve privacy in Microsoft Edge by enabling Encrypted Client Hello".Neowin. 25 July 2023.Archived from the original on 5 December 2022. Retrieved25 July 2023.
  40. ^ab"Developing ECH for OpenSSL (DEfO)".defo.ie. Tolerant Networks Limited. 24 August 2022. Archived fromthe original on 1 September 2022.
  41. ^"Understand Encrypted Client Hello (ECH) | Firefox Help".support.mozilla.org. Retrieved4 October 2023.
  42. ^"curl/docs/ECH.md at cbe7fad20d969626a5c4eb0501a273dfe812bcd3 · curl/curl".GitHub. Retrieved26 July 2023.
  43. ^"curl/docs/ROADMAP.md at 50490c0679fcd0e50bb3a8fbf2d9244845652cf0 · curl/curl".GitHub. Retrieved26 July 2023.
  44. ^"Feature: TLS Encrypted Client Hello (ECH)".Chrome Platform Status.Archived from the original on 28 May 2023. Retrieved25 July 2023.Safari: No signal
  45. ^"Release Notes Version 7.8".Campus@Barracuda. September 2013. Retrieved5 January 2021.
  46. ^"Release Notes Version 5.2".Campus@Barracuda. September 2015. Retrieved5 January 2021.
  47. ^"Bug 765064 – HttpClient in use by Sync and other services doesn't support SNI".Bugzilla@Mozilla. 29 October 2017. Retrieved9 November 2017.
  48. ^"IBM HTTP Server SSL Questions and Answers".IBM. Retrieved8 March 2011.
  49. ^"IHS 8 powered by Apache 2.2.x ?".IBM. 17 October 2013. Archived fromthe original on 26 December 2015. Retrieved9 November 2017.
  50. ^"#2275 (Support Encrypted Client Hello) – nginx".trac.nginx.org. Retrieved6 July 2023.
  51. ^https://github.com/caddyserver/caddy/releases/tag/v2.10.0
  52. ^"Performance improvements".help.hcltechsw.com. Retrieved6 February 2024.
  53. ^"ECH by kazuho · Pull Request #3164 · h2o/h2o".GitHub. Retrieved6 July 2023.
  54. ^"Base Directives - Configure".H2O - the optimized HTTP/2 server.Archived from the original on 29 May 2023. Retrieved18 July 2023.
  55. ^"Update to draft-ietf-tls-esni-13".BoringSSL code repository. Retrieved6 July 2023.
  56. ^"Dell BSAFE Micro Edition Suite 5.0 Release Advisory". Retrieved18 October 2022.
  57. ^"Support ECH (#595) · Issues · gnutls / GnuTLS · GitLab".GitLab. 27 October 2018. Retrieved26 July 2023.
  58. ^"Support ESNI · Issue #546 · libressl/portable".GitHub. Retrieved26 July 2023.
  59. ^"116168 - TLS server name indication extension support in NSS".bugzilla.mozilla.org. Retrieved6 July 2023.
  60. ^"D101050 Bug 1681585 - Add ECH support to selfserv".phabricator.services.mozilla.com. Retrieved6 July 2023.
  61. ^"Bug 360421 – Implement TLS Server Name Indication for servers".Bugzilla@Mozilla. 11 November 2006. Retrieved30 October 2012.
  62. ^"Support Encrypted Client Hello (formerly known as ESNI) · Issue #7482 · openssl/openssl".GitHub. Retrieved6 July 2023.
  63. ^"[ech] rewrite ESNI to ECH draft 15 by kazuho · Pull Request #437 · h2o/picotls".GitHub. Retrieved6 July 2023.
  64. ^McCarney, Daniel (31 May 2024)."Server-side Encrypted Client Hello (ECH) support".GitHub. Retrieved22 August 2024.
  65. ^"Certificate selection for servers is missing · Issue #310 · apple/swift-nio-ssl".GitHub. Retrieved26 July 2023.
  66. ^"Adds support for TLS v1.3 Encrypted Client Hello (ECH) draft-ietf-tls… · wolfSSL/wolfssl@6b6ad38".GitHub. Retrieved25 July 2023.
  67. ^"crypto/tls: implement draft-ietf-tls-esni-13 · cloudflare/go@4c13101".GitHub. Retrieved25 July 2023.
  68. ^"src/tls.c · master · Hugo Leisink / Hiawatha web server · GitLab".GitLab. 5 April 2023. Retrieved26 July 2023.
  69. ^"lighttpd TLS ECH".
  70. ^"HAProxy 1.5 changelog". Retrieved28 December 2020.
  71. ^"ECH (Encrypted client hello) support · Issue #1924 · haproxy/haproxy".GitHub. Retrieved26 July 2023.
  72. ^"OpenBSD 6.1 What's New". Retrieved13 June 2021.
  73. ^"src/lib/libtls/tls.c at master · openbsd/src".GitHub. Retrieved26 July 2023.

External links

[edit]
Protocols and technologies
Public-key infrastructure
See also
History
Implementations
Notaries
Vulnerabilities
Theory
Cipher
Protocol
Implementation
Retrieved from "https://en.wikipedia.org/w/index.php?title=Server_Name_Indication&oldid=1322851718"
Categories:
Hidden categories:

[8]ページ先頭

©2009-2025 Movatter.jp