公司之前因为业务安全性问题,已经对所有的网络进行了https的改造,之前一直对https的整体过程不是很清晰,这一次在研究okhttp的过程中正好对https做了一下研究,这篇文章主要是对https的握手过程的一个研究。
1)当我们在说https的时候,我们在说什么?
https是一个基于http的安全协议,由于http请求的过程中是用明文传输的数据,导致数据的传输并不安全,非常容易被劫持利用。https在http的基础上增加了TLS/SSL协议,处于http协议和TCP协议之间,TLS/SSL协议通常分为两层:TLS记录协议和TLS握手协议。
2)https协议是如何保证数据的安全传输的
数据的安全传输是依赖于数据的加密进行传输,数据需要加密就必然要求解密,https这里采用了对称加密技术进行数据的传输。但只有这种方式存在天然的缺陷,劫持者只用劫持到对称加密的密匙,就可以轻松对数据进行解密。
所以在这个基础上,https引入了非对称加密信息,原理是客户端将加密的公匙发给服务端,自己生成一个私匙,服务端通过公匙加密后,返回给客户端数据,客户端通过私匙解密。但这种方式依然存在缺陷,一个是非对称加密的算法的开销特别大,如果数据传输也用到非对称加密,必然会导致性能受到严重影响,所以一般只利用非对称加密来进行对称加密的密匙的传输;另外一个问题就是如果有一个劫持者,在收到客户端的给服务端公钥后并没有发给服务端,而是自己伪造了一个公钥发过去,这时客户端把对称密钥用这个公钥加密发回经过劫持者,劫持者可以用私钥解密并拿到对称密钥,此时他在把此对称密钥用客户端的公钥加密发回给客户端,这样劫持者就拿到了对称密钥,可以解密传输的数据了。
所以在这个基础上,https又引入了证书的概念,首先客户端生成公私钥,将公钥提供给相关机构(CA),CA将公钥放入数字证书并将数字证书颁布给我,此时我就不是简单的把公钥给你,而是给你一个数字证书,数字证书中加入了一些数字签名的机制,保证了数字证书一定是我给你的。
所以综合以上三点:对称加密算法加密数据+非对称加密算法交换密钥+数字证书验证身份=安全
3)https握手的过程
首先,客户端发起握手请求,以明文传输请求信息,包含版本信息,加密套件候选列表,压缩算法候选列表,随机数,扩展字段等信息
服务端返回协商的信息结果,包括选择使用的协议版本 version,选择的加密套件 cipher suite,选择的压缩算法 compression method、随机数 random_S 以及证书。
客户端验证证书的合法性,包括可信性,是否吊销,过期时间和域名。
客户端使用公匙对对称密匙加密,发送给服务端。
服务器用私钥解密,拿到对称加密的密匙。
服务端和客户端开始用对称加密通信。