HTTP&HTTPS
@[TOC]
一、HTTP协议的特点
HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)
的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。
1. HTTP是不保存状态的协议
http协议是一种不保存状态,及无状态的协议,http协议自身不对请求和响应之间的通信状态进行保存
。也就是在http这个级别,协议对发送过的请求或响应都不做持久化处理
使用http协议,每当有新的请求发送时,都会有对应的响应产生。协议自身并不保存之前请求或响应报文的信息,目的是为了更快的处理大量业务,保证协议的可伸缩性,特意把http设计成这样简单
但是,随着网络的发展,因为http的无状态使得处理业务变得更加棘手。如用户登陆到一家网站,即使他跳转到该站的其他页面,服务器也应该继续保持登陆状态。所以网站为了能够掌握是谁发送的请求,需要保存用户的状态信息
HTTP/1.1虽然是无状态的协议,但是为了实现可以保持状态的功能,于是引入Cookie技术
1.1 Cookie技术
HTTP是无状态的协议,他不对之前发生过的请求和响应的状态进行管理。也就是说无法根据之前的状态进行本次的通信
假设要求登陆认证的页面无法进行自身状态管理,那么每次跳转到新页面,不是要重新登陆认证就是要请求报文中附加参数来完成状态管理
当然无状态也有它的优点。由于不用保存状态,自然就可以减少服务器的CPU及内存资源消耗
Cookie技术是通过在请求和响应报文当中写入Cookie信息来控制客户端的状态
- Cookie会根据服务器发送的响应报文内叫Set-Cookie的首部字段信息,通知客户端保存Cookie。
- 下次客户端再次向服务器请求时,客户端会自动在请求报文中加入Cookie值后发送出去。
- 服务器端看到客户端发送过来的Cookie后,就会检查是那个客户端发送过来的请求,对比服务器上的记录,得到客户端之前的状态
HTTP的请求响应报文:
2. 持久连接节省通信量
在HTTP的初始版本中
,每进行一次HTTP通信都要进行TCP连接和TCP断开连接
以当年的通信状况来看,因为都是些容量很小的文本传输,所以这种情况下还是没有什么大问题的。但是随着HTTP的普及,文档中的内容逐渐丰富(图片等),每次请求页面的时候,还需要请求页面当中的图片等资源。因此,每次请求资源都会造成不必要的TCP连接和断开,增加通信量的开销
2.1 持久化连接
为了解决上述TCP连接问题,HTTP/1.1想出了持久连接的方法,即只要没有任意一端明确提出断开连接,保持TCP连接状态
。
持久连接的好处就是减少了TCP的重复建立连接和断开连接所造成的额外开销,减轻服务器的负载
。也正是减少的额外开销时间,可以是HTTP的请求和响应更快的结束,提高网页的响应速率
。
2.2 管线化
持久连接使得多数请求以管线化发送成为可能。以前客户端发送一个请求需要等待服务器的响应,得到响应之后客户端才可以发送下一个请求。管线化技术的出现,使得客户端不需要一个一个的等待服务器的响应,可以直接发送下一个请求,这样使得客户端能够同时发出多个请求,服务端也可以同时发送多个响应
3. 通信使用明文可能会被窃听
由于HTTP协议自身不具备加密功能,所以就无法做到对通信整体(使用HTTp协议进行的请求和响应内容)进行加密。所以HTTP协议使用明文(未经加密的原数据)方式发送
3.1 TCP/IP是可能被窃听的网络
如果要问为什么通信不加密是一个缺点,这是因为按造TCP/IP 协议族的工作机制,通信的内容在所有的通信线路上都有可能被窃听。
既然HTTP可能被窃听,那么我们就采用加密技术对通信进行加密处理。
3.2 将通信加密
HTTP自身不带加密机制,但是 可以通过SSL(安全套接层)或者TSL(安全层传输协议)组合使用,对HTTP通信进行加密
。
用SSL建立安全的通信线路之后,就可以在这条线路上进行HTTP通信了,与SSL组合使用的HTTP协议叫 HTTPS(超文本传输安全协议)协议
3.3 内容加密
HTTP自身不带加密机制,但是我们还可以 对HTTP传输报文的内容进行加密
,
4. 不验证通信方的身份可能被伪装
HTTP协议中 的请求和响应不验证通信方的身份,就可能存在服务器是否就是发送请求中URI指定的主机,返回的响应是否真的是实际提出请求的客户端
4.1 任何人都可以发送请求
HTTP协议进行通信时,由于不验证通信方的身份,任何人都可以发送请求,并且服务器接收到请求,不管对方是谁都会回一个响应(这种情况仅限于发送端的IP地址和端口没有被服务器限制访问的情况下)
4.2 缺陷:
- 无法确定请求发送至目标的服务器是否是按造真实意图返回的那台服务器,有可能是被伪装的服务器。
- 无法确定响应到的客户端是否是按造真实意图接收响应的那个客户端,有可能是被伪装的客户端。
- 无法确定正在通信的双方是否具备访问权限。因为服务器上可能保存着重要信息,只给特定用户权限
- 无法确定请求来自何方、出自谁手。
- 服务器即使收到无意义的请求,也会照单全收,回复响应,无法阻止海量的DoS攻击(拒绝服务攻击)。
4.3 查明对手的证书
虽然HTTP协议不提供加密,并且无法得知通信双方,但是SSL可以,SSL不仅提供加密算法,还提供一种证书手段,用来确定通信的对方信息
。
这种用来确定通信双方的证书是由值得信任的权威机构发布的,用来证明服务器和客户端是真实存在的
5. 无法证明报文的完整性,可能被修改
1. 接收到的内容可能有误
因为HTTP协议无法证明报文的完整性,所以在客户端发送请求到服务器端或者服务器端发送响应到客户端这段时间内,请求或者响应的内容很有可能被篡改
二、HTTPS
HTTP + 加密 + 认证 + 完整性保护 == HTTPS(并非一种新协议)
1. HTTPS是身披SSL外衣的HTTP
通常是HTTP直接和TCP进行通信。当使用SSL时,则演变成先和SSL通信,再由SSL和TCP进行通信
使用了SSL后HTTP就有了加密、证书、完整性保护的功能
SSL是独立于HTTP协议的不光是HTTP协议使用SSL,SMTP和Telnet等协议均可配合SSL协议使用,可以说SSL是当今世界最为广泛的网络安全技术
2. 相互交换密钥的公开密钥加密技术
SSL是采用公开密钥加密的加密处理方式,近代的加密算法是公开的,而密钥是保密的,通过这种方式保证加密的安全性。
加密和解密都会用到密钥,没有密钥就无法对密码进行解密,反之一旦有人获得密钥,任何人就可以进行解密了,如果密钥被攻击者拿到,加密就没有意义了
1. 共享密钥加密的困境
加密和解密用同一个密钥的方式称为共享密钥,也被称为对称密钥加密。
共享密钥加密时必须将密钥也发送给对方,这样对方才能拿密钥进行解密
,但是这个密钥可能被第三方获得,那么如何安全的把密钥发送给对方呢??
2. 使用两把密钥的公开密钥加密
公开密钥的加密方式很容易解决共享密钥的困境。
公开密钥使用一对非对称的密钥。一把叫私有密钥,另一把叫公开密钥。私有密钥不能被任何人知道,公开密钥任何人都可以获得
。
使用公开密钥的加密方式,发送密文的一方使用对方公开的密钥进行加密处理,对方收到密文后,再使用自己的私有密钥进行解密
,这种方式不需要使用对方发送过来的私有密钥,也不需要担心密钥被第三方获得,就算被第三方获得也很难被解密。
3. HTTPS采用混合加密机制
注意咋们的老大哥就很聪明,采用“男女混合双打”!!!
HTTPS采用共享密钥加密和公开密钥加密的混合加密技术。若公开密钥能够实现安全交换,会考虑只使用公开密钥进行加密,但是公开密钥相对于共享密钥的处理速度慢。
所以充分利用两者的优势,将多种加密组合起来进行通信,在交换密钥环节使用公开密钥进行加密,之后的建立通信交换报文阶段则使用共享密钥进行
公开密钥的缺点是无法确认公开密钥的正确性
,所以密钥一般都是由数字认证机构和相关机关发布的公开密钥证书
3. HTTPS协议的缺陷
既然HTTPS安全可靠,为什么不一直使用HTTPS呢?
- 通信慢。与HTTP通信相比,SSL通信部分需要消耗网络资源,并且SSL通信部分因为要对通信进行处理,所以通信时间变长了。
- 大量消耗CPU资源。由于HTTPS还要对通信双方的数据进行加密解密处理,因此会消耗CPU和内存硬件资源。
- 购买证书开销大。
因此,只有是敏感信息才使用HTTPS协议进行通信,以节约资源。
三、总结
1.HTTP特点:
1.无状态:协议对客户端没有状态存储,对事物处理没有“记忆”能力,比如访问一个网站需要反复进行登录操作
2.无连接:HTTP/1.1之前,由于无状态特点,每次请求需要通过TCP三次握手四次挥手,和服务器重新建立连接。比如某个客户机在短时间多次请求同一个资源,服务器并不能区别是否已经响应过用户的请求,所以每次需要重新响应请求,需要耗费不必要的时间和流量。
3 . 基于请求和响应:基本的特性,由客户端发起请求,服务端响应
4 . 简单快速、灵活
5.通信使用明文、请求和响应不会对通信方进行确认、无法保护数据的完整性
2.HTTPS特点:
1.内容加密:采用混合加密技术,中间者无法直接查看明文内容
2.验证身份:通过证书认证客户端访问的是自己的服务器
3.保护数据完整性:防止传输的内容被中间人冒充或者篡改
4.混合加密:结合非对称加密和对称加密技术。客户端使用对称加密生成密钥对传输数据进行加密,然后使用非对称加密的公钥再对秘钥进行加密,所以网络上传输的数据是被秘钥加密的密文和用公钥加密后的秘密秘钥,因此即使被黑客截取,由于没有私钥,无法获取到加密明文的秘钥,便无法获取到明文数据。
5.数字摘要:通过单向hash函数对原文进行哈希,将需加密的明文“摘要”成一串固定长度(如128bit)的密文,不同的明文摘要成的密文其结果总是不相同,同样的明文其摘要必定一致,并且即使知道了摘要也不能反推出明文。
6.数字签名技术:数字签名建立在公钥加密体制基础上,是公钥加密技术的另一类应用。它把公钥加密技术和数字摘要结合起来,形成了实用的数字签名技术。
7 . 收方能够证实发送方的真实身份;
8 . 发送方事后不能否认所发送过的报文;
9 . 收方或非法者不能伪造、篡改报文。
评论区