Cloudflare:不加密,无隐私 加密SNI工作原理

时间:2021-07-15 | 标签: | 作者:Q8 | 来源:Alessandro Ghedini网络

小提示:您能找到这篇{Cloudflare:不加密,无隐私 加密SNI工作原理}绝对不是偶然,我们能帮您找到潜在客户,解决您的困扰。如果您对本页介绍的Cloudflare:不加密,无隐私 加密SNI工作原理内容感兴趣,有相关需求意向欢迎拨打我们的服务热线,或留言咨询,我们将第一时间联系您!


< font-size: 16px;">

< font-size: 16px;">加密SNI,连同Cloudflare已经免费提供的其他互联网安全功能,将使在互联网上(恶意)检查内容和跟踪用户变得更加困难。继续往下读,来了解它是如何工作的吧。

< font-size: 16px;">为什么需要SNI?

< font-size: 16px;">TLS服务器名称指示(SNI)扩展最初是在2003年标准化的,它允许服务器在同一组IP地址上托管多个启用了TLS的站点,要求客户端在初始TLS握手期间指定要连接到哪个站点。例如,如果没有SNI,服务器就不知道要向客户端提供哪个证书,或者要向连接应用什么配置。

< font-size: 16px;">客户端将包含其连接到的站点主机名的SNI扩展添加到ClientHello消息。它在TLS握手期间将ClientHello发送到服务器。不幸的是,由于客户端和服务器此时不共享加密密钥,因此ClientHello消息未被加密发送。

< font-size: 16px;">

< font-size: 16px;">TLS 1.3 with Unencrypted SNI

< font-size: 16px;">这意味着该网路上的观察者(例如互联网服务提供商、咖啡店老板或防火墙)可以拦截明文ClientHello消息,并确定客户端要连接到哪个网站。这使得观察者可以跟踪用户正在访问的站点。

< font-size: 16px;">但是,使用了SNI加密,即使ClientHello的其余部分以明文形式发送,客户端也会加密SNI。

< font-size: 16px;">

< font-size: 16px;">TLS 1.3 with Encrypted SNI

< font-size: 16px;">那么为什么以前无法对原始SNI进行加密,现在却又可以加密了呢?如果客户端和服务器尚未协商,加密密钥又从何而来?

< font-size: 16px;">如果必须先有鸡后有蛋,那么你的鸡又在哪里呢?

< font-size: 16px;">与许多其他Internet功能一样,答案就是“DNS”。



< font-size: 16px;">服务器在已知的DNS记录上发布一个公钥,客户端可以在连接之前获取该公钥(A、AAAA和其他记录已经是这样做的了)。然后,客户端将ClientHello中的SNI扩展替换为“加密的SNI”扩展,该扩展不同于原来的SNI扩展,而是使用对称加密密钥(用服务器公共密钥派生的密钥)进行加密的,如下所述。拥有私钥的服务器也可以派生对称加密密钥,然后可以解密扩展并终止连接(或将其转发到后端服务器)。因为只有客户端和它所连接的服务器可以派生加密密钥,所以加密的SNI不能被第三方解密和访问。

< font-size: 16px;">请务必注意,这是TLS 1.3及更高版本的扩展,不适用于该协议的早期版本。原因很简单:TLS 1.3引入的一项更改(存在问题)内容是将服务器发送的证书消息移至TLS握手的加密部分(这在1.3之前是以明文形式发送的)。如果没有对协议进行根本性的更改,攻击者仍然可以通过简单地观察在网络上发送的明文证书来确定服务器的身份。

< font-size: 16px;">底层加密机制涉及使用Diffie-Hellman密钥交换算法,该算法允许客户端和服务器在不受信任的通道上生成共享密钥。因此,已加密的SNI加密密钥是在客户端上计算得出的,通过使用服务器的公共密钥(实际上是Diffie-Hellman半静态密钥共享的公共部分)和由服务器生成的临时Diffie-Hellman共享的私有部分(动态地由客户端本身生成,且在ClientHello发送到服务器后立即被丢弃)。额外的数据(例如客户端作为其ClientHello消息的一部分发送的一些加密参数)也混合到加密过程中,以达到更好的加密效果。

< font-size: 16px;">然后,客户端的ESNI扩展将不仅包括实际的加密SNI位,还包括客户端的公钥共享,用于加密的密码套件以及服务器的ESNI DNS记录的摘要。另一方面,服务器使用其自己的私钥共享和客户端共享的公共部分来生成加密密钥并解密扩展。

< font-size: 16px;">虽然这看起来可能过于复杂,但这可以确保加密密钥以密码方式绑定到为其生成的特定TLS会话,并且不能跨多个连接重复使用。这样可以防止攻击者观察到客户端发送的加密扩展,从而避免攻击者在单独的会话中捕获它并将其重新放到服务器,暴露用户试图连接到的网站的身份(这被称为“剪切和粘贴”攻击)。

< font-size: 16px;">然而,服务器私钥的妥协将危及派生自服务器私钥的所有ESNI对称密钥(这将使观察者可以解密以前收集的加密数据),这就是为什么Cloudflare的SNI加密执行每小时轮转服务器秘钥以提高安全性,但同时也会跟踪几个小时前的秘钥,以便DNS完成缓存和响应延迟。因此,密钥稍微过时的客户端仍然可以毫无问题地使用ESNI(但最终所有密钥都会被丢弃和遗忘)。

< font-size: 16px;">但先等等,DNS?说真的?

< font-size: 16px;">细心的读者可能已经意识到,仅使用DNS(默认情况下为未加密)将使整个加密SNI的想法完全没有意义:路径上的观察者将能够简小红书刷粉单地通过观察客户端本身发送的纯文本DNS查询来确定客户端连接到哪个网站,无论连接中是否使用了加密的SNI。

< font-size: 16px;">但是随着DNS的一些特性的引入,例如DNS over TLS(DoT)以及DNS over HTTPS(DoH),以及有向用户提供这些特性的公共DNS解析器(例如Cloudflare自己的1.1.1.1),DNS查询现在可以被加密并且防止被观察者和追踪者窥视。

< font-size: 16px;">然而,尽管在一定程度上(因为仍存在有害的解析器)来自DoT/DoH DNS解析器的请求是可以被信任的,但一个下定决心的攻击者仍然有可能通过拦截解析器与权威DNS服务器的通信并注入恶意数据来毒害解析器的缓存。也就是说,除非权威服务器和解析器都支持DNSSEC [1]-,DNS解析器的请求才可以被信任。顺便说一句,Cloudflare的权威DNS服务器可以对返回给解析器的响应进行签名,而1.1.1.1解析器可以验证这危机公关内部报告些响应。



Cloudflare:不加密,无隐私 加密SNI工作原理

上一篇:Skype有哪些状态,分别表示什么意思?
下一篇:如何在iOS设备上使用WhatsApp群聊功能给多个联系人


版权声明:以上主题为“Cloudflare:不加密,无隐私 加密SNI工作原理"的内容可能是本站网友自行发布,或者来至于网络。如有侵权欢迎联系我们客服QQ处理,谢谢。
相关内容
推荐内容
扫码咨询
    Cloudflare:不加密,无隐私 加密SNI工作原理
    打开微信扫码或长按识别二维码

小提示:您应该对本页介绍的“Cloudflare:不加密,无隐私 加密SNI工作原理”相关内容感兴趣,若您有相关需求欢迎拨打我们的服务热线或留言咨询,我们尽快与您联系沟通Cloudflare:不加密,无隐私 加密SNI工作原理的相关事宜。

关键词:Cloudflare:不加密,无隐私

关于 | 业务 | 案例 | 免责 | 隐私
客服邮箱:sales@1330.com.cn
电话:400-021-1330 | 客服QQ:865612759
沪ICP备12034177号 | 沪公网安备31010702002418号