HTTP传输协议缺点
- 之前几篇文章中详细讲解了TCP/IP协议栈中的几个协议,其中个就有对HTTP做了一个比较详细的讲解。HTTP是基于TCP进行传输的,其中传输的内容都是明文报文数据,如果我是一个黑客,我会想办法获取这个HTTP消息体,那我可以直接肉眼就能看出消息中的所有内容。这其实是存在很大风险的,如果HTTP消息被劫持,那么整个传输过程将存在风险,正因为存在以下三种风险,HTTP变成了一种不安全的协议
- 第一,窃听风险(eavesdropping):第三方可以窃取通信内容
- 第二,篡改风险(tampering):第三方可以修改通信内容
- 第三,冒充风险(pretending):第三方可以冒充他人身份参与通信
加密协议SSL/TLS
- 互联网中加密通信协议是通互联网共同发展的一门技术。
- 1994年,NetScape公司设计了SSL协议(Secure Sockets Layer)的1.0版,但是未发布。
- 1995年,NetScape公司发布SSL 2.0版,很快发现有严重漏洞。
- 1996年,SSL 3.0版问世,得到大规模应用。
- 1999年,互联网标准化组织ISOC接替NetScape公司,发布了SSL的升级版TLS 1.0版。
- 2006年和2008年,TLS进行了两次升级,分别为TLS 1.1版和TLS 1.2版。最新的变动是2011年TLS 1.2的修订版。
- 目前应用最广的是TLS1.0,接下来是SSL 3.0。但是,主流浏览器都已经实现了TLS1.2 的支持。
- TLS1.0通常被标记为SSL3.1,TLS1.1为SSL3.2,TLS1.2为SSL3.3
更加安全的HTTPS
加密算法
-
加密算法有历史悠久的发展,在一战二战中,都有广泛使用,所以密码学在社会发展种有广泛的用途
-
第一对称加密:有流式,分组两种,加密和解密都是使用的同一个秘钥,例如DES,AES-GCM,ChaCha20-Poly1305等
-
第二非对称加密:加密使用的秘钥和解密使用的秘钥是不同的,分别称为:公钥,私钥,公钥和算法都是公开的,私钥是保密的。非对称加密性能较低,但是安全性超强,由于加密特性,非对称加密算法能加密的数据长度也是有限的。例如:RSA,DSA,ECDSA,ECDHE
-
第三哈希算法:将任意长度的信息转换为较为固定的长度的值,通常其长度要比信息小得多,且算法不可逆。例如:MD5,SHA-1,SHA-2,SHA-256
-
第四数字签名:签名就是在信息的后面加上一段内容(信息经过hash后的值),经过hash后的值,可以证明信息没有被修改过。hash值一般都会加密后(也就是签名)再和信息一起发送,以保证这个hash值不被修改。
对HTTP消息体对称加密
-
如上图中,展示了HTTP客户端发出的请求很容易被黑客接货,如果此时黑客冒充服务器,或者黑客窃取信息,则其可以放回任意信息给客户端,而且不被客户端察觉,所以我们经常会听到“劫持”这个词
-
如上图是一个简单HTTPS经过TCP 的三次握手后,客户端与服务器建立连接,如果对后续双方传输的内容进行对称加密,那么理论上我们在本次传输中防止了内容的裸奔。缺点在于:
- 但是由于对称加密使用的秘钥两端是一样的,要维持每一个客户端的秘钥不一致,整套加密才有意义(比如我是黑客伪造的客户端,如果秘钥一致,那么黑客还是能拿到秘钥,那没有任何意义)。但是遇到的问题是产生n个不同的秘钥,N=客户端数量,维护困难。
- 另外,因为对称加密需要双方协商一致,一般提前约定,或者使用前传输秘钥,不管哪一种方式,很容易秘钥泄露。只要黑客拿到秘钥,那么所谓加密传输也就失去意义。
对HTTP消息体进行非对称加密
- 如下图我们使用非对称加密
- 上图中客户端用公钥对请求内容加密,服务器使用私钥对内容解密,反之亦然,但是上述过程也存在缺点:
- 公钥是公开的(也就是黑客也会有公钥),所以第4 步私钥加密的信息如果被黑客接货,就可以使用公钥进行解密,获取其中的内容。
- 非对称加密不适用数量太大的报文,大数量的报文导致加密效率降低
对称加密和非对称加密结合使用
-
对称加密的优势:对称加密如果能保证秘钥不被黑客获取,那么他是安全的,并且对称加密的速度具有很大优势
-
非对称加密优势:非对称加密请求发起时候尽管使用的是公钥加密,但是因为必须使用私钥解密的特点,因此能够保证消息体在想服务器发送过程中是安全的。
-
两者结合做法:
- 使用对称加密对消息体进行加密
- 对称加密的算法和对称秘钥使用公钥加密后,在ClientHello时发送给服务器
- 后续双方的内容进行对称加密
-
如上图,我们之前说了秘钥交换在第一步进行,一下几个步骤意义如下:
- 第3 步时候,客户端给服务器说:(之后回话用对称秘钥,这是对称算法XXX,和对称秘钥XXX),这段话用公钥进行加密,然后传给服务器。
- 第4步时候,服务器收到信息后,用私钥解密,提取出对称加密算法和对称秘钥后,服务器回复:(好的)并用对称秘钥加密
- 后续两者之间的信息传输就可以使用对称加密的方式了。
-
使用这个方式时候,还有部分问题:
- 如何将公钥给客户端
- 客户端在获取一个公钥后,如何确认公钥是正确的服务端发出的而不是黑客伪装的
-
如上图的情况第一步中公钥获取是存在风险的,而且直接在某个地方下载公钥也是不可靠的,因为黑客也可以在下载公钥的时候劫持了请求,并伪造公钥返回给客户端。后续的请求都会被黑客欺骗。
-
解决方案是使用证书:
- 证书是一个经证书授权中心数字签名的包含公开秘钥拥有者信息以及公开秘钥的文件,最简单的证书包含:公开秘钥,名称,证书授权中心数字签名。数字证书还有一个重要特征就是旨在特定时间段内有效
- 数字帧数是一种权威性的电子文档,可以由权威工作的第三方机构,即CA(例如中国各地方的CA公司)中心签发的证书,也可以由企业级别CA系统进行签发。
-
如下证书模式HTTPS:
-
如上图,2步骤时候服务器发送了一个SSL证书给客户端,SSL证书中包含的具体内容有:
- 证书发布机构CA
- 证书有效期
- 公钥
- 证书所有者
- 签名
-
客户端在接受服务器发来的SSL证书会对证书进行校验,以浏览器为例说明如下:
- 首先浏览器读取证书中的证书所有者,有效期信息进行校验
- 浏览器开始查找操作系统中已内置的收信人的证书发布机构CA,与服务器发来的证书中的颁发者CA对比,用于校验证书是否为合法机构颁发
- 如果找不到,浏览器报错,说明服务器发来的证书是不可信的。
- 如果找到,浏览器会从操作系统中取出颁发者CA的公钥,然后对服务器发来的证书里面的签名进行解密
- 浏览器使用相同的hash算法计算出服务器发来的证书的hash值,将这个计算的hash值域证书中签名做对比
- 对比结果一致,则证明服务器发来的证书核发,没有被冒充。
- 此时浏览器就可以读取证书中公钥,用于后续加密了。
-
通过SSl证书的形式,即解决了公钥获取问题,又解决了黑客冒充问题,HTTPS加密过程也就此形成。所以对不HTTP,HTTPS传输更安全。
- 所有信息都加密传播
- 具有校验机制,一旦被篡改,通信双方立刻会发现
- 配备身份证书,防止身份被冒充。
上一篇 网络编程-TCP/IP协议栈-UDP/HTTP协议