个人网站备案名称填写的注意事项,装修公司十大排名北京哪家好,备案时的网站建设方案书,网络广告推广网站最近#xff0c;群里一个刚入职的小伙因为用公司电脑访问奇怪的网站#xff0c;被约谈了。他很困惑 —— 访问的都是HTTPS的网站#xff0c;公司咋知道他访问了啥#xff1f; 实际上#xff0c;由于网络通信有很多层#xff0c;即使加密通信#xff0c;仍有很多途径暴露…最近群里一个刚入职的小伙因为用公司电脑访问奇怪的网站被约谈了。他很困惑 —— 访问的都是HTTPS的网站公司咋知道他访问了啥 实际上由于网络通信有很多层即使加密通信仍有很多途径暴露你的访问地址比如 DNS查询通常DNS查询是不会加密的所以能看到你DNS查询的观察者比如运营商是可以推断出访问的网站 IP地址如果一个网站的IP地址是独一无二的那么只需看到目标 IP地址就能推断出用户正在访问哪个网站。当然这种方式对于多网站共享同一个IP地址比如CDN的情况不好使 流量分析当访问一些网站的特定页面可能导致特定大小和顺序的数据包这种模式可能被用来识别访问的网站 cookies或其他存储如果你的浏览器有某个网站的cookies显然这代表你曾访问过该网站其他存储信息比如localStorage同理
除此之外还有很多方式可以直接、间接知道你的网站访问情况。
本文将聚焦在HTTPS协议本身聊聊只考虑HTTPS协议的情况下你的隐私是如何泄露的。
欢迎围观朋友圈、加入人类高质量前端交流群带飞
HTTPS简介
我们每天访问的网站大部分是基于HTTPS协议的简单来说HTTPS HTTP TLS其中 HTTP是一种应用层协议用于在互联网上传输超文本比如网页内容。由于HTTP是明文传递所以并不安全 TLS是一种安全协议。TLS在传输层对数据进行加密确保任何敏感信息在两端比如客户端和服务器之间安全传输不被第三方窃取或篡改
所以理论上结合了HTTP和TLS特性的HTTPS在数据传输过程是被加密的。但是TLS建立连接的过程却不一定是加密的。
TLS的握手机制
当我们通过TLS传递加密的HTTP信息之前需要先建立TLS连接比如 当用户首次访问一个HTTPS网站浏览器开始查询网站服务器时会发生TLS连接 当页面请求API时会发生TLS连接
建立连接的过程被称为TLS握手根据TLS版本不同握手的步骤会有所区别。 但总体来说TLS握手是为了达到三个目的 协商协议和加密套件通信的两端确认接下来使用的TLS版本及加密套件 验证省份为了防止“中间人”攻击握手过程中服务器会向客户端发送其证书包含服务器公钥和证书授权中心即CA签名的身份信息。客户端可以使用这些信息验证服务器的身份 生成会话密钥生成用于加密接下来数据传输的密钥
TLS握手机制的缺点
虽然TLS握手机制会建立安全的通信但在握手初期数据却是明文发送的这就造成隐私泄漏的风险。
在握手初期客户端、服务端会依次发送、接收对方的打招呼信息。首先客户端会向服务端打招呼发送client hello信息该消息包含 客户端支持的TLS版本 支持的加密套件 一串称为客户端随机数client random的随机字节 SNI等一些服务器信息
服务端接收到上述消息后会向客户端打招呼发送server hello消息再回传一些信息。
其中SNIServer Name Indication服务器名称指示就包含了用户访问的网站域名。
那么握手过程为什么要包含SNI呢
这是因为当多个网站托管在一台服务器上并共享一个IP地址且每个网站都有自己的SSL证书时那就没法通过IP地址判断客户端是想和哪个网站建立TLS连接此时就需要域名信息辅助判断。
打个比方快递员送货上门时如果快递单只有收货的小区地址IP地址没有具体的门牌号域名那就没法将快递送到正确的客户手上与正确的网站建立TLS连接。
所以SNI作为TLS的扩展会在TLS握手时附带上域名信息。由于打招呼的过程是明文发送的所以在建立HTTPS连接的过程中中间人就能知道你访问的域名信息。
企业内部防火墙的访问控制和安全策略就是通过分析SNI信息完成的。 虽然防火墙可能已经有授信的证书但可以先分析SNI根据域名情况再判断要不要进行深度检查而不是对所有流量都进行深度检查 那么这种情况下该如何保护个人隐私呢
Encrypted ClientHello
Encrypted ClientHelloECH是TLS1.3的一个扩展用于加密Client Hello消息中的SNI等信息。
当用户访问一个启用ECH的服务器时网管无法通过观察SNI来窥探域名信息。只有目标服务器才能解密ECH中的SNI从而保护了用户的隐私。 当然对于授信的防火墙还是不行但可以增加检查的成本 开启ECH需要同时满足 服务器支持TLS的ECH扩展 客户端支持ECH
比如cloudflare SNI测试页支持ECH扩展当你的浏览器不支持ECH时访问该网站sni会返回plaintext 对于chrome在chrome://flags/#encrypted-client-hello中配置ECH支持 再访问上述网站sni如果返回encrypted则代表支持ECH。
总结
虽然HTTPS连接本身是加密的但在建立HTTPS的过程中TLS握手是有数据明文传输的其中SNI中包含了服务器的域名信息。
虽然SNI信息的本意是解决同一IP下部署多个网站每个网站对应不同的SSL证书但也会泄漏访问的网站地址。
ECH通过对TLS握手过程中的敏感信息主要是SNI进行加密为用户提供了更强的隐私保护。