HTTPS原理分析
HTTPS概述
HTTPS协议:超文本传输安全协议,是一种计算机网络进行安全通信的协议。由于HTTP协议的明文传输特点,因此容易被篡改,所有诞生了HTTPS协议。
HTTPS基于HTTP但利用SSL进行加密数据包。
HTTPS = HTTP + SSL。
数据加密
因为HTTP的明文传输特点,因此第一点想到的就是数据加密。加密分为两种方式:对称加密和非对称加密。
对称加密
使用同一个密钥,加密解密。报文通过加密后,只能使用唯一的密钥解密。
漏洞:密钥发过去的过程中存在被拦截问题。因为不发送密钥的话,消息的接收者也无法获知报文内容。
加比如,将消息放入一个加锁的盒子中发给对面,虽然中间人不能打开,但消息接收者也不能打开,必须将钥匙也发送过去,这个钥匙发送过去的时候就存在被截取的问题。
非对称加密
一把私钥对应一把公钥,私钥加密的内容只有公钥可以打开,公钥加密的内容也仅有私钥可以打开
假设A给B要发送一些重要数据。
- B生成一对公私钥,将任意一个发送给A。
- A收到后,用该密钥对数据进行加密后,再将数据发送
- B收到数据,用另一个密钥解开,数据传输完毕。
解决对称加密中的密钥发送不安全问题。
漏洞:
假设B在发送密钥的过程中被C拦截,C生成一对新的密钥,并将自己生成的新的密钥发给A,此时A不知道,这样数据就发送到来坏人C的手中。B完全不知道。
产生这样的问题的关键是:A如何确定收到的密钥就是B发送过来的?
解决方案
第三方机构CA机构。提供一个数字证书,包装公钥,此时这个公钥就是一个得到证明的安全的公钥。第三方的拦截者不能伪造这个数字证书。
新的漏洞
假设C拦截到这个数字证书 ,自己编写了一段数据,并用B发过来的密钥进行加密,然后将数据发送给B。这样B就会收到错误的数据。
本质问题:B如何证明收到的数据就是A发送的?
解决方案
引入数字签名:A也产生一对公钥私钥,并用其中一个对数据摘要加密,然后将数据和另一个密钥(数字证书证明过的)一起发送回去。B收到后如果可以解开数据摘要(MD5算法)就能证明数据是A发过来的。
效率问题
非对称加密发送一个消息,需要波折三次,存在效率低下的问题。因此很多时候都采用非对称加密和对称加密两种方式。
使用非对称加密将对称加密的密钥发送过去,这样两者就能使用对称加密进行通信了。
整个过程如下:
证书验证阶段
- 浏览器发起HTTPS请求
- 服务器回应HTTPS证书
- 客户端验证证书是否合法,如果不合法提出告警。
数据传输阶段
- 证书验证合法后,浏览器本地生成随机数
- 通过公钥加密随机数,并将随机数发送到服务端
- 服务端通过私钥进行解密
- 服务端和浏览器通过随机数生成对称加密算法,对数据进行加密传输