https是使用了SSL的http,也就是说主要是多了加密这一块。
https其实有两个功能:
1,身份验证
2,数据加密
只是说身份验证可以认为是数据加密需要的过程,但是不妨这是一个很重要的功能,具体握手过程为:
(流程都是根据网上搜索个人组织整理的,如果有不完整不完善的请留言)
客户端发起tcp三次握手,正常的传输层建立连接;
客户端发送自己的ssl版本号,支持的加密算法等信息到服务器端;
服务器端发送自己的ssl版本,支持的加密算法,证书等信息给客户端;
客户端根据证书的签发机构找到解密证书的公钥,对服务器端传送过来的证书进行解密校验,如果可以正确解析,则说明对端是可信任的,解析出来的信息还有一个重要信息是公钥;
客户端校验正常,则会产生一个秘钥,用服务器端的公钥对该秘钥进行加密,发送到服务器端,用于通知服务器端后面的交互都是使用该秘钥做对称加密;
服务器端收到了客户端发送过来的用服务器端的公钥加密的客户端产生的密钥,就用服务器端的私钥来解密,拿到客户端发送过来的密钥,保存该密钥,并且返回给客户端响应,可以使用该密钥进行加密做后续的数据交换。
客户端收到了服务器端发送过来的信息后,开始用产生的秘钥对数据加密,发送给服务器端。
服务器端收到了客户端的请求,机密,并且把响应也通过秘钥加密,发给客户端。
客户端解密响应。
总结下来就是:
握手阶段使用的是非对称加密。
请求响应阶段使用的是对称加密。
对于服务器端身份的验证是通过校验服务器端的证书来实现的,公钥是公开的,私钥只有合法的服务器才有,如果可以正常解密,那说明服务器端是在CA结构做过备案的,可信任的。