文章目录
1、HTTP传输协议的缺点
- 什么是HTTP
超文本传输协议,是一个基于请求与响应,无状态的,应用层的协议,常基于TCP/IP协议传输数据,互联网上应用最为广泛的一种网络协议,所有的WWW文件都必须遵守这个标准。设计HTTP的初衷是为了提供一种发布和接收HTML页面的方法。
- HTTP传输协议的缺点
众所周知,HTTP协议基于TCP进行传输的,其中传输的内容全都裸露在报文中,如果我们获取了一个HTTP消息体,那我们可以知道消息体中所有的内容。这其实存在很大的风险,如果HTTP消息体被劫持,那么整个传输过程将面临:
(1) 窃听风险(eavesdropping):第三方可以获知通信内容。
(2) 篡改风险(tampering):第三方可以修改通信内容。
(3) 冒充风险(pretending):第三方可以冒充他人身份参与通信。
2、加密协议SSL/TLS
安全套接字(Secure Socket Layer,SSL)协议是Web浏览器与Web服务器之间安全交换信息的协议,提供两个基本的安全服务:鉴别与保密。
SSL是Netscape于1994年开发的,后来成为了世界上最著名的web安全机制,所有主要的浏览器都支持SSL协议。
目前有三个版本:2、3、3.1,最常用的是第3版,是1995年发布的。
3、HTTPS传输协议
HTTPS是一种通过计算机网络进行安全通信的传输协议,经由HTTP进行通信,利用SSL/TLS建立全信道,加密数据包。HTTPS使用的主要目的是提供对网站服务器的身份认证,同时保护交换数据的隐私与完整性。
HTTP的缺点就是报文裸露没有加密,如果我们对报文进行加密,那么这个缺点就被解决了。通过HTTP和SLL的结合,诞生的HTTPS就是我们这篇文章的主角。
4、HTTP协议和SSL/TLS加密算法的结合使用
4.1、常见加密算法
对称加密
加密和解密是同一把秘钥。
例如:DES、AES-GCM、ChaCha20-Poly1305等。
非对称加密
加密和解密是不同的秘钥,分为公钥、私钥,公钥是公开的,任何人都可以知道,但是私钥就是保密的只有加密人才能知道。非对称加密的性能非常的低,但是安全性极高。由于加密机制的特性,导致加密的数据长度是有限的。
例如:RSA、DSA、ECDSA、 DH、ECDHE。
哈希算法
将任意长度的信息转换为较短的固定长度的值,通常其长度要比信息小得多,且算法不可逆。
例如:MD5、SHA-1、SHA-2、SHA-256 等
数字签名
签名就是在信息的后面再加上一段内容(信息经过hash后的值),可以证明信息没有被修改过。hash值一般都会加密后(也就是签名)再和信息一起发送,以保证这个hash值不被修改。
4.2、使用对称加密算法加密HTTP消息体
经历TCP三次握手之后,客户端和服务端建立连接,并且用对称加密把报文进行了加密,在理论上我们防止了报文的泄露。但是由于对称加密的密钥在两端是一样的,这就必须维护每一个客户端的的密钥不一致,才能是加密有意义,这就会产生海量的密钥,导致服务端维护困难。另外,因为对称加密需要双方协商一致,一般可用提前约定,或者使用前传输秘钥,不管是哪种方式,都很容易导致秘钥邪泄漏。只要黑客获取到秘钥,那么所谓的加密传输就如同虚设了。所以这种方法是行不通的。
4.3、使用非对称加密算法加密HTTP消息体
用户使用公钥进行加密之后,消息体能够安全的抵达服务器,但是在服务器返回数据的时候,黑客截取到信息之后,能够通过公钥对响应的内容进行解密,最后进行篡改,导致这个加密方案失败。另外,非对称加密不适用与数量太大的报文,大数量的报文导致加密效率降低。
4.4、对称加密和非对称加密的结合使用
- 使用对称加密的方式,保证秘钥不被黑客获取的情况下,整个传输过程是很安全的,并且,对称加密的在速度具有很大的优势。
- 非对称加密在请求发起方时,尽管使用的是公钥加密,但是因为必须使用私钥解密的特点,因此能够保证消息体在向服务器发送的过程中是安全的。缺点在于服务器返回的使用私钥加密的内容会被公钥解开。
结合两者的优缺点的做法:
- 使用对称加密对消息体进行加密。
- 对称加密的算法和对称秘钥使用公钥加密之后,在 ClientHello 时发送给服务器。
- 后续双方的内容进行对称加密。
仔细看看这个图会发现,这样做已经很完美了,因为这个已经极大程度上解决了所有的暴露问题,以及篡改问题。但是细心的人会发现,还是有两个问题:
- 如何将公钥传给客户端?
- 客户端怎么确定公钥是正确的服务端发送的?
那应该怎么做呢? 答案是:使用证书
数字证书是一个经证书授权中心数字签名的包含公开密钥拥有者信息以及公开密钥的文件。最简单的证书包含一个公开密钥、名称以及证书授权中心的数字签名。数字证书还有一个重要的特征就是只在特定的时间段内有效。
数字证书是一种权威性的电子文档,可以由权威公正的第三方机构,即CA(例如中国各地方的CA公司)中心签发的证书,也可以由企业级CA系统进行签发。
简单点说,就是我们可以通过数字证书携带公钥,然后证书传送给客户端,供客户端下载,拿到想要的公钥。 同时由于受第三方权威机构的认证,下载后对证书进行验证,如果证书可信(并非个人签名),并且是我们指定的服务器上的证书,那么说明证书是真是有效的,这就解决了公钥可能是伪造的问题。
看下图:
这样的话就完美解决了上述的问题。这就是HTTPS协议的原理。
感谢大家阅读,如有不对,敬请斧正。如有疑问,评论区敬请留言。