请输入您要查询的百科知识:

 

词条 Server Name Indication
释义

  1. Background of the problem

  2. How SNI fixes the problem

  3. Security implications

  4. Implementation

  5. Support

  6. References

  7. External links

{{Use American English|date=January 2019}}

Server Name Indication (SNI) is an extension to the TLS computer networking protocol by which a client indicates which hostname it is attempting to connect to at the start of the handshaking process.[1] This allows a server to present multiple certificates on the same IP address and TCP port number and hence allows multiple secure (HTTPS) websites (or any other service 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-based virtual hosting, but for HTTPS. The desired hostname is not encrypted in original SNI extension,[2] so an eavesdropper can see which site is being requested.

Background of the problem

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 difficult — 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). Since 2005, CAcert has run experiments on different methods of using TLS on virtual servers.[2] Most of the experiments are unsatisfactory and impractical. For example, it is possible to use subjectAltName to contain multiple domains controlled by one person[3] 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 is 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 can be served from the same IP address.

In practice, this means that an HTTPS server can 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. The result is that many websites are effectively constrained from using secure communications over IPv4. IPv6 address space is not exhausted, so websites served using IPv6 are unaffected by this issue.

How SNI fixes the problem

SNI addresses this issue by having the client send the name of the virtual domain as part of the TLS negotiation.[4] 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 the IETF's Internet RFCs in June 2003 through RFC 3546, Transport Layer Security (TLS) Extensions. The latest version of the standard is RFC 6066.

Security implications

The desired hostname is not encrypted, so an eavesdropper can see which site is being requested. This helps security companies provide a filtering feature[5][6][7] and governments implement censorship.[8] While domain fronting was used as a workaround,[9] now both Google and AWS have taken action to disallow this - and it's therefore becoming less of an alternative.[10]

As of mid 2018, an upgrade called Encrypted SNI (ESNI)[11] is being rolled out in an "experimental phase" to address this risk of domain eavesdropping.[12][13]

Implementation

In 2004, a patch for adding TLS/SNI into OpenSSL was created by the EdelKey project.[14] 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[15]).

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.

Support

Software Type Supported Notes Supported since
Internet Explorer Web browser {{yes}} Since version 7 on Vista (not supported on XP) 2006
Edge Web browser {{yes}} All versions
Mozilla Firefox Web browser {{yes}} Since version 2.0 2006
cURL Command-line tool and library {{yes}} Since version 7.18.1 2008
Safari Web browser {{yes}} Not supported on Windows XP
Google Chrome Web browser {{yes}} Since 6.0[16] 2010
BlackBerry 10 Web browser {{yes}} Supported in all BB10 releases 2013
BlackBerry OS Web browser {{no}} Not supported in 7.1 or earlier
elinks Web browser {{no}} Not supported in 0.12pre6 or earlier
Windows Mobile Web browser {{yes}} Some time after 6.5
Android default browser Web browser {{yes}} Honeycomb (3.x) for tablets and Ice Cream Sandwich (4.x) for phones 2011
Firefox for Android Web browser {{partial}} Supported for browsing. Sync and other services don't support SNI[17][18]
wget Command-line tool {{yes}} Since version 1.14 2012
Nokia Browser for Symbian Web browser {{no}}
Opera Mobile for Symbian Web browser {{no}} Not supported on Series60
IBM HTTP Server Web server {{yes}} Since version 9.0.0[19][20]
Apache Tomcat Web server {{yes}} Not supported before 8.5 (backport from 9)
Apache HTTP Server Web server {{yes}} Since version 2.2.12 2009
Microsoft IIS Web server {{yes}} Since version 8 2012
nginx Web server {{yes}} Since version 0.5.23 2007
Jetty Web server {{yes}} Since version 9.3.0 2015
Qt Library {{yes}} Since version 4.8 2011
Mozilla NSS server side Library {{no}} [21]
4th Dimension Library {{no}} Not supported in 15.2 or earlier
Java Library {{yes}} Since version 1.7 2011
ColdFusion / Lucee Library {{yes}} ColdFusion since Version 10 Update 18, 11 Update 7, Lucee since Version 4.5.1.019, Version 5.0.0.50 2015
Erlang Library {{yes}} Since version r17 2013
Go Library {{yes}} Since version 1.4 2011
Perl Library {{yes}} Since Net::SSLeay version 1.50 and IO::Socket::SSL version 1.56 2012
PHP Library {{yes}} Since version 5.3 2014
Python Library {{yes}} Supported in 2.x from 2.7.9 and 3.x from 3.2 (in ssl, urllib[2] and httplib modules) 2011 for Python 3.x and 2014 for Python 2.x
Ruby Library {{yes}} Since version 2.0 (in net/http) 2011
Hiawatha Web server {{yes}} Since version 8.6 2012

References

1. ^{{Cite IETF|title=Transport Layer Security (TLS) Extensions|rfc=3546|sectionname=Server Name Indication|section=3.1|page=8|last1=Blake-Wilson|first1=Simon|last2=Nystrom|first2=Magnus|last3=Hopwood|first3=David|last4=Mikkelsen|first4=Jan|last5=Wright|first5=Tim|date=June 2003|publisher=IETF|issn=2070-1721}}
2. ^{{cite web |url=http://wiki.cacert.org/wiki/VhostTaskForce |title=CAcert VHostTaskForce |work=CAcert Wiki }}
3. ^{{cite web |url=https://support.godaddy.com/help/article/3908/what-is-a-multiple-domain-ucc-ssl-certificate?locale=en |title=What is a Multiple Domain (UCC) SSL Certificate? |publisher=GoDaddy }}
4. ^{{cite web | url = http://journal.paul.querna.org/articles/2005/04/24/tls-server-name-indication/ | work = Paul's Journal | title = TLS Server Name Indication}}
5. ^{{Cite web|url=https://www3.trustwave.com/software/8e6/hlp/r3000/files/1system_filter.html|title=Web Filter: SNI extension feature and HTTPS blocking|website=www3.trustwave.com|access-date=2019-02-20}}
6. ^{{Cite web|url=https://community.sophos.com/kb/en-us/115865|title=Sophos UTM: Understanding Sophos Web Filtering|website=Sophos Community|language=en|access-date=2019-02-20}}
7. ^{{Cite journal|last=Chrisment|first=Isabelle|last2=Goichot|first2=Antoine|last3=Cholez|first3=Thibault|last4=Shbair|first4=Wazen M.|date=2015-05-11|title=Efficiently Bypassing SNI-based HTTPS Filtering|url=https://hal.inria.fr/hal-01202712/document|language=en|pages=990–995|doi=10.1109/INM.2015.7140423}}
8. ^{{Cite web|url=https://www.bleepingcomputer.com/news/security/south-korea-is-censoring-the-internet-by-snooping-on-sni-traffic/|title=South Korea is Censoring the Internet by Snooping on SNI Traffic|website=BleepingComputer|language=en-us|access-date=2019-02-18}}
9. ^{{Cite web|url=https://www.engadget.com/2016/12/21/signal-egypt-uae-censorship-block-domain-fronting/|title=Encrypted chat app Signal circumvents government censorship|website=Engadget|access-date=2017-01-04}}
10. ^{{Cite web|url=https://signal.org/blog/looking-back-on-the-front/|title= Amazon threatens to suspend Signal's AWS account over censorship circumvention|website=Signal|access-date=2018-05-02}}
11. ^https://tools.ietf.org/html/draft-ietf-tls-esni
12. ^{{cite web | url = https://www.eff.org/deeplinks/2018/09/esni-privacy-protecting-upgrade-https | work = EFF DeepLinks Blog | title = ESNI: A Privacy-Protecting Upgrade to HTTPS}}
13. ^{{cite news |last1=Claburn |first1=Thomas |title=Don't panic about domain fronting, an SNI fix is getting hacked out |url=https://www.theregister.co.uk/2018/07/17/encrypted_server_names/ |accessdate=10 October 2018 |work=The Register |date=17 July 2018}}
14. ^{{Cite web|url=http://www.edelweb.fr/EdelKey/files/|title=EdelKey Project|last=|first=|date=|website=www.edelweb.fr|archive-url=|archive-date=|dead-url=|access-date=2019-02-20}}
15. ^{{cite web |url=//www.openssl.org/news/cl098.txt |title=OpenSSL CHANGES |deadurl=yes |archiveurl=https://web.archive.org/web/20160420213610/https://www.openssl.org/news/cl098.txt |archivedate=20 April 2016 |df=dmy-all }}
16. ^{{cite web |url=https://www.digicert.com/ssl-support/iis8-sni-browser-support.htm |title=IIS 8 and IIS 8.5 SNI Browser Support |publisher=DigiCert |accessdate=31 December 2015 }}
17. ^{{cite web |url=https://bugzilla.mozilla.org/show_bug.cgi?id=765064 |title=Bug 765064 — HttpClient in use by Sync and other services doesn't support SNI |work=Bugzilla@Mozilla |date=29 October 2017 |accessdate=9 November 2017 }}
18. ^{{cite web |url=https://bugzilla.mozilla.org/show_bug.cgi?id=1412650 | title=Bug 1412650 — Switch services.* code to use HttpsURLConnection |work=Bugzilla@Mozilla |date=29 October 2017 |accessdate=9 November 2017 }}
19. ^{{cite web |url=http://publib.boulder.ibm.com/httpserv/ihsdiag/ssl_questions.html#SNI |title=IBM HTTP Server SSL Questions and Answers |publisher=IBM |date= |accessdate=8 March 2011 }}
20. ^{{cite web |url=http://www.ibm.com/developerworks/forums/thread.jspa?threadID=412433&tstart=0 |title=IHS 8 powered by Apache 2.2.x ? |publisher=IBM |archiveurl=https://web.archive.org/web/20151226083713/https://www.ibm.com/developerworks/community/forums/html/topic?id=77777777-0000-0000-0000-000014769679 |deadurl=yes |date=17 October 2013 |archivedate=26 December 2015 |accessdate=9 November 2017 }}
21. ^{{cite web |url=https://bugzilla.mozilla.org/show_bug.cgi?id=360421 |title=Bug 360421 — Implement TLS Server Name Indication for servers |work=Bugzilla@Mozilla |date=11 November 2006 |accessdate=30 October 2012 }}

External links

  • RFC 6066 (obsoletes RFC 4366, which obsoleted RFC 3546)
{{SSL/TLS}}{{Use dmy dates|date=March 2011}}

4 : Internet protocols|Secure communication|Web hosting|Transport Layer Security

随便看

 

开放百科全书收录14589846条英语、德语、日语等多语种百科知识,基本涵盖了大多数领域的百科知识,是一部内容自由、开放的电子版国际百科全书。

 

Copyright © 2023 OENC.NET All Rights Reserved
京ICP备2021023879号 更新时间:2024/11/13 9:47:00