ESNI(Encrypted Server Name Indication)及检测

【美博翻墙2019.8.5】 前文详细介绍了DNS over HTTPS (DoH) 加密DNS解析及检测,在此基础上,firefox浏览器也为我们带来另一项安全设置加密的SNI,即:加密的服务器名称指示 ESNI(Encrypted Server Name Indication)

一、先说Firefox如何设置ESNI

有了DNS over HTTPS (DoH)之后,进一步设置ESNI,很简单,一个设置完成
打开美博园Firefox浏览器,
在地址栏输入 about:config 后回车,或者点工具栏上的“书签”→其他书签,点里面预设的 about:config
弹出安全警告:点“我了解此风险!”,会进入设置项
在搜索框中输入: network.security.esni.enabled
设为 true

二、检测ESNI是否生效

Cloudflare为大家提供了一个详细的检测网站
Cloudflare ESNI Checker | Cloudflare
https://www.cloudflare.com/ssl/encrypted-sni/

打开网站后:

ESNI(Encrypted Server Name Indication)及检测

点中间橘色Check My Browser条块,就会得到检测结果,如下图所示:

ESNI(Encrypted Server Name Indication)及检测

结果一目了然,绿色勾表示加密,红色X表示没有加密

三、网络连接中的信息泄露/中间人攻击

众所周知 HTTP 明文协议等于裸奔,但即使用了 HTTPS,还是有一些信息会暴露:
1、TLS证书信息的暴露。这一问题在最新版的 TLS1.3 草案中得到了解决。Firefox 也已经支持了 TLS1.3 [5]。
2、DNS 查询会暴露你查询的域名。DNS 未经加密,有被中间人投毒的风险。这一问题的解决方案是加密 DNS 查询,目前有多种解决方案,DNSSEC,DNSCrypt,DoT,DoH... 著名*河蟹*博客编程*河蟹*有篇介绍文章,链接就不放了。Firefox支持了其中的 DNS over HTTPS (DoH) [6],并有很详细的科普[7]。
3、访问的 IP 地址会暴露。这个没有办法,封 IP 基本无解。
4、SNI 暴露域名信息。TLS 验证证书需要域名信息,而同一 IP 可能托管多个域名,所以就有了 SNI (Server Name Indication)。在建立 TLS 链接时 SNI 域名会明文发送,中间人就可以知道你访问了哪个域名,然后*河蟹*。ESNI 就是为了解决这个问题。

四、什么是Encrypted SNI(ESNI)

“服务器名称指示”(Server Name Indication,简称SNI)是一个扩展的TLS计算机联网协议,在该协议下,在握手过程开始时客户端告诉它正在连接的服务器要连接的主机名称。这允许服务器在相同的IP地址和TCP端口号上呈现多个证书,并且因此允许在相同的IP地址上提供多个安全(HTTPS)网站(或其他任何基于TLS的服务),而不需要所有这些站点使用相同的证书。它与HTTP/1.1基于名称的虚拟主机的概念相同,但是用于HTTPS。所需的主机名未加密, 因此窃听者可以查看请求的网站

为了使SNI协议起作用,绝大多数访问者必须使用实现它的Web浏览器。使用未实现SNI浏览器的用户将被提供默认证书,因此很可能会收到证书警告。

随着TLS1.3的发布,让该协议成为有史以来最安全、也是最复杂的TLS协议。在该协议之中,有很多的对于以往协议安全漏洞的修复,包括废弃RSA启用新的秘钥交换机制PSK等等。而Encrypted SNI作为一个TLS1.3的扩展协议用来防止传统的HTTPS流量受到ISP或者陌生网络环境的窥探以及一些网络审查。在过去,由于HTTPS协议之中Server Name Indication - SNI的使用,我们的HTTPS流量经常被窥探我们所访问站点的域名。

为了弥补缺陷因应运而生的ESNI

在上述过程之中,存在的问题就是,在ClientHello环节中,TLS会在这个位置以明文的形式讲要请求的Host写在数据包之中,如果在网络路由中有任何的监听节点,那么用户所访问网站的域名将暴露无遗,这将是巨大的用户隐私泄露:

依靠安全DNS的ESNI

上一个问题没有难倒工程师们,他们设计了这样一个办法。首先让网站提供者在DNS提供商上公布一个记录,这个记录包含着一个公钥,这个公钥由网站提供者生成,其私钥存储在Web服务器等待着被Web程序读取。如此,当用户想通过TLS1.3协议访问这个域名的时候,首先读取这个公开的公钥,在用公钥加密其想访问的域名Host,装在Client Hello里面发送给目标服务器,目标服务器再用自己的私钥解密,从而和用户建立HTTPS链接,这样就不会暴露Host信息。

目前来说,有了HTTPS+TLS1.3+ESNI+DoH/DoT的加持,我们的网络隐私的到了极大的保障,最后还有一个问题是访问服务器IP的泄露仍然无法被避免,迫于IP协议设计的机制,他目前还不能被解决。不过我相信,随着网技术不断的趋于保护个人隐私和更快速的发展方向,这个问题可以最终被解决

原文链接:https://allinfa.com/encrypted-server-name-indication-esni.html
原文标题:ESNI(Encrypted Server Name Indication)及检测 - 美博园
美博园文章均为“原创 - 首发”,请尊重辛劳撰写,转载请以上面完整链接注明来源!
软件版权归原作者!个别转载文,本站会注明为转载。

网 友 留 言

4条评论 in “ESNI(Encrypted Server Name Indication)及检测”
  1. pro

    *河蟹*博客编程*河蟹*是不是编程随想的博客?

  2. B

    请问我沉迷了哔哩哔哩(墙内二次元网站)怎么办?感觉我都无法自拔了,翻墙出来看不见哔哩哔哩,我是不是上瘾了?那该怎么办?

  3. 修心

    您好!
    请问一下,我按要求设了,点检测:假设从左至右显示为第一项,第二项,第三项,第四项.当代理为自由门时,只钩选第三项,当代理设为Toranger socks5 127.0.0.1:9050与Toranger_http_127.0.0.1:8118时,只钩选了第二项和第三项,请问是否安全??? 谢谢!

这里是你留言评论的地方


请留言


7 + 6 =
【您可以使用 Ctrl+Enter 快速发送】
Copyright © 2007 - 2024 , Design by 美博园. 版权所有. 若有版权问题请留言通知本站管理员. 【回到顶部】