内容简介:都说https是在http和tcp两层之间加密,针对的是传输过程,只有客户端和服务端才能解密,变成明文。但是又有很多人说,https协议下,用get请求不加密,需要用post才会加密,而且这么说的人很多。我的疑惑就是,如果把整个数据都加密了,是不是无论get和post都是一样的?
问题描述
都说https是在http和tcp两层之间加密,针对的是传输过程,只有客户端和服务端才能解密,变成明文。但是又有很多人说,https协议下,用get请求不加密,需要用post才会加密,而且这么说的人很多。
我的疑惑就是,如果把整个数据都加密了,是不是无论get和post都是一样的?
因为不懂抓包技术,所以比较好奇。https传输下,抓包者抓到的都是乱码? 能抓到URL,或者header之类的信息嘛?
另外再补充一个问题哈,网上还有一种中间人抓包模式?
如果有人在我和服务器之间抓包,伪造证书,搞这个中间人模式, 那么 浏览器是不是直接提示证书不安全?
如果浏览器也分辨不出来的话,是不是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地址会host成千上百个网站,使用DNS反向解析会返回上千个域名,对吗?
对的!
但是我们与服务器TLS握手时,会在Client Hello报文的“ TLS Extension ”里携带一个明文的“ Server Name Indication ”用于指示边缘服务器我们真正要访问哪个网站,第三方读取一下SNI就会得到答案。
即使我们的浏览器有点古老,不支持SNI扩展, 第三方就没有办法知道我们访问哪个网站了?
当然可以知道,因为TLS握手时,服务器推送过来的Server Hello里会携带明文的证书,证书里会清清楚楚地标明客户端正要访问什么网站。
现在互联网上大体有以下三种通信模式:
-
不安全通信
-
不完全安全通信
-
安全通信
具体这三种通信模式有什么联系与与区别,这三种通信模式是如何产生的,也许会在稍后的文章里阐述,也许不会,主要取决于掌声够不够热烈!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
C Primer Plus(第6版)中文版
普拉达 (Stephen Prata) / 姜佑 / 人民邮电出版社 / 2016-4-1 / CNY 89.00
《C Primer Plus(第6版)中文版》详细讲解了C语言的基本概念和编程技巧。 《C Primer Plus(第6版)中文版》共17章。第1、2章介绍了C语言编程的预备知识。第3~15章详细讲解了C语言的相关知识,包括数据类型、格式化输入/输出、运算符、表达式、语句、循环、字符输入和输出、函数、数组和指针、字符和字符串函数、内存管理、文件输入输出、结构、位操作等。第16章、17章介绍C......一起来看看 《C Primer Plus(第6版)中文版》 这本书的介绍吧!