前言
最近又开始忙碌起来了,年底了各种杂七杂八的事情开始多了起来。事情一多,几天前复习的计算机网络相关知识,怕又淡忘了,赶紧打开电脑,写下了这篇总结。
一 有了http,为啥还要设计https?
1.1 先谈谈HTTP的缺点
(1)通信过程使用明文传输,所以内容很容易被截获
(2)无法确定通信双方的真实身份。攻击方很容易伪造客户端身份,向服务端发起通信请求;客户端的请求也很容 易被截获,攻击者伪造成服务端,向移动端发送错误的指令。
(3)无法验证报文的完整性,所以有可能已经遭到篡改。服务端返回数据给客户端的时候,内容也很容易被伪造,导致发送危险信息给客户端。
1.2 怎么避免?
既然http通信过程中,使用的是明文,那么,我们是不是把内容加个密就可以了?这样的话,就算攻击者拿到了通信请求,也不知道是啥?好,那么,我们现在已知的,有哪些加密方式?
(1)通信加密使用ssl或者tsl结合HTTP,加密通信内容,这个也即是我们本文所要介绍的https,这里不做展开,下文有详细解释
(2)将通信内容加密,但这个要求服务端和客户端需要同时具备加密和解密的功能,这个过程将影响通信的性能,而且由于该方式不同于SSL或者TSL的加密方式,内容还是有可能被篡改。比如我们在下载文件的时候,常用md5算法来校验文件的完整性,用pgp来创建数字签名,但是这个过程也是无法保证百分百正确的,因为在传输过程中,如果md5和pgp都被篡改的话,用户也是没有办法去感知的
所以,基于ssl的https传输协议就变得十分的必要了。
二 HTTPS之旅
我们可以简单的这么总结:HTTPS就是在HTTP的基础上,加上了加密处理和认证处理。
2.1 对称加密和非对称加密
什么是对称加密?对称加密指的是加密和解密用的是同一个密钥,而非对称加密,指的是加密用的是一把密钥,而解密用的是另一把密钥。那么,在网络传输如果采用对称加密方式进行传输的话,就需要在发送一个报文的时候,把密钥也传给对方,如果不发送,对方就不能解开这个报文。但是这个工程中,如果密钥被攻击者拿到,那么这个加密过程也就相当于废弃了,所以,网络传输过程使用对称加密,是不能防止被窃听的风险的。
2.2 非对称加密网络传输解析
非对称加密采用的是公钥+私钥的加解密方式,所以只要我们保存好私钥,公钥被别人拿到,因为没有私钥,所以攻击者也解不开这个报文。所以在网络传输过程中,我们可以把公钥发送客户端,客户端拿到这个公钥,对所要发送的内容进行加密,传输给服务端,服务端拿着私钥去对报文进行解密。这样就完成了整个通信过程。
2.3 采用混合加密机制的HTTPS
由于公开密钥的处理速度要比共享密钥慢,所以https采用的是混合加密机制。即在交换密钥环节采用公开密钥的加密方式,之后建立通信交换报文的阶段,采用的是共享密钥的加密方式。
三 HTTPS之TSL握手
在分析流程之前,先放上一张自己认为比较经典的图(来自图解HTTP)
这张图仅仅说明了从服务端公开密钥证书建立HTTPS通信的整个过程,那么,我们接下来就仔细分析,从client say hello 开始完整的HTTPS握手的过程
第一步:客户端发起https通信请求,也即是client hello,这个时候client的附加请求包含
1 一个随机字符串client_rand1(random number)
2 当前客户端支持的ssl版本(ssl version)
3 当前支持的加密方法(supported cliphers)
4 压缩算法(etc)
第二步:服务端接到client hello,响应server hello给客户端,这个时候,server返回的数据包括
1 Cipher suite (加密方法 RSA,TSL版本号和压缩算法)
2 server Certificate 服务端证书
3 随机字符串server_rand1
4 client certificate request 客户端验证请求。有些类似银行的通信,需要客户端也校验自己的身份
5 server key exchange 服务端证书没有提供方足够信息是,可以发送这个内容
第三步:客户端再此回应。
1 client key exchange 即当服务端需要客户端提供身份验证时,客户端发送这个给服务端,包括:客户端的证书认证
2 第三个随机数client_rand2,这个也即是PreMaster Secret,通过公钥加密,发送给服务端
3 ChangeCipherSpec 告知服务端,客户端已经切换到之前协商好的加密套件(Cipher Suite)的状态,准备使用之前协商好的加密套件加密数据并传输了
4 client finish 表明当前client 握手结束,这个数据是为了对刚刚建立的握手机制进行加解密验证
第四步:server 回应
服务端接收到preMaster secret,通过私钥,得到premasterkey。
至此,https 握手机制完成。
四 HTTPS 缺点
1 效率较低
第一:通信慢,出去原有的tcp http 请求和响应,还要加入tsl、ssl通信,整体通信量不可避免的增加
第二:服务端和客户端的加解密过程将会耗费大量的cpu计算
2 购买证书需要费用
备注:
本文参考了
1 https://segmentfault.com/a/1190000002554673
2 《图解http》