一、初识HTTPS
在介绍https前先来认识一下HTTP,HTTP(HyperText Transfer Protocol)即超文本传输协议,是互联网应用最为广泛的一种网络协议,所有的WWW文件都遵守这个协议。
但HTTP存在许多不足指出,举例如下:
1、HTTP协议传输的数据是未加密的,即已明文方式传输,意味有可能被监听。
2、不验证通信方的 身份,容易被伪装入侵
3、无法证明明文的完整性,存在传输过程被篡改可能性
在所有未加密的协议传输中都存在这些问题,基于http协议的不足,于是网景公司设计SSL(Secure Sockets Layer)协议用于对Http协议进行加密,从而诞生HTTPS。
PS:互联网处处存在被窃听的风险,只需要收集互联网流动的数据包(帧)就可以了,收集回来的数据包的解析工具可以交给抓包工具(packetCapture)或嗅探器(Sniffer)工具。
二、HTTPS验证原理
Https 在真正请求数据之前,会先跟服务有几次握手验证,以证明身份,图示如下:
2.1 验证流程
1、客户端发起一个https的请求,把自身支持的一系列Cipher Suite(密钥算法套件,简称Cipher)发给服务端
2、服务端接收到客户端的Cipher后与自身对比,不支持则断开,支持则会从中选出一种加密算法和HASH算法以证书的形式返回客户端,证明包含了公钥、颁证机构、网址、失效日期等
3、客户端收到服务端响应后会做几件事
3.1 验证证书合法性
颁发证书的机构是否合法与是否过期,证书包含的网址与正在访问的网址是否一致;
证书验证通过后,在浏览器的地址栏会加上一把小锁(不同浏览器不一样)
3.2 生成随机密码
如果证书通过,此时浏览器会生成一串随机数,用于证书中的公钥加密。
3.3 HASH握手信息
在最开始约定好的HASH方式,把握手信息取HASH值,然后用随机数加密“握手信息+握手消息HASH(签名)”并一起发送给服务端
在这里去握手信息的HASH值,主要把握手信息做一个签名,用于验证握手信息传输过程没有被篡改过。
4、服务端拿到客户端传来的密文,用自己的私钥来解密握手信息取出随机数密码,再用随机数密码解密握手消息和HASH值,并与传过来的HASH值做对比来确认是否一致。
然后用随机密码加密一段握手消息(握手消息+握手消息HASH值)给客户端
5、客户端用随机数解密并计算握手消息的HASH,如果与服务端发来的HASH一致,握手过程结束,之后所有的通信数据将由之前浏览器生产的随机密码并利用对称加密算法进行加密,因此这段密钥只有客户端和服务端知道,所以即便中间请求被拦截也是无法解密数据的,保证通信的安全。
非对称加密算法:RSA,DSA/DSS 在客户端与服务端相互验证的过程中用的是对称加密
对称加密算法:AES,RC4,3DES 客户端与服务端相互验证通过后,以随机数作为密钥时,就是对称加密
HASH算法:MD5,SHA1,SHA256 在确认握手消息没有被篡改时