原文:车小胖谈网络车小胖谈网络1周前问题描述说https是在http和tcp两层之间加密的,针对的是传输过程,只有客户端和服务器端可以解密,变成明文。但是很多人说在HTTPS协议下,get请求是不加密的,但是post是需要加密的,这样说的大有人在。我的疑惑是,如果整个数据都加密了,是不是不管get和post都一样?因为不懂抓包技术,所以很好奇。https传输下,抓包都是乱码?您能否捕获URL或标头等信息?另外补充一个问题,网上有中间人抓包模式吗?如果有人在我和服务器之间抓包,伪造证书,搞这种中间人模式,浏览器会不会直接提示证书不安全?如果浏览器无法区分,是不是ssl证书质量不够好?如果ssl证书质量过关,浏览器无法分辨,那https不就没用了吗?该抓还是抓,该截还是拦截?正文先直接说结论,https安全通信方式使用TLS加密传输所有http协议。我再说一遍,是的!通常,TLS加密传输http的通信过程称为https。如果用协议封装的逻辑结构来表示:IP+TCP+TLS+[HTTP],那么[]中的http是完全被加密保护的。既然http已经完全加密了,那么当我们使用https加密并通过互联网传输信息时,互联网上的第三方能否知道我们访问的是什么网站呢?好的!你可能会奇怪,既然http是完全加密的,第三方怎么知道我们访问的是什么网站呢?当我们访问一个网站,比如www.zhihu.com,我们首先使用DNS将网站的域名解析为IP地址,然后我们可以使用IP地址建立TCP连接和TLS安全连接到网站。由于DNS没有加密,第三方可以通过读取明文的DNS查询和响应报文,知道我们又访问了哪些网站。读者将有一个计划。如果我把域名和IP地址的对应关系保存在本地的host文件中,那么下次就不用发送DNS查询报文了,第三方就无法知道我们访问的是什么网站了。是的,对吧?好主意!但是第三方可以通过服务器的IP地址获取服务器的域名,使用DNS反向解析。知乎之类的网站一般都会使用边缘加速。一个边缘加速服务器IP地址会托管上千个网站,DNS反向解析会返回上千个域名,对吧?是的!但是当我们与服务器TLS握手时,我们会在ClientHello消息的“TLSExtension”中携带一个明文“ServerNameIndication”来向边缘服务器表明我们真正想要访问的网站,以及第三方阅读SNI答案后将获得它。就算我们的浏览器有点老,不支持SNI扩展,第三方也没办法知道我们访问的是哪个网站?当然你可以知道,因为在TLS握手的时候,服务器端发送的ServerHello会携带一个明文证书,证书上会明确表示客户端要访问哪个网站。互联网上一般存在三种通信方式:不安全通信、不完全安全通信、安全通信、
