Android中HTTPS协议原理
2019-07-28 本文已影响0人
MengkZhang
简介
理解HTTPS为什么相较Http是安全的。
个人对于ssl握手解决的问题实质的理解
- 非对称加密用来验证服务端的合法性,并“加密”对称加密秘钥(实际只加密了一个随机数Random3)
- 对称加密用来加密数据
- SSL握手是为了安全地协商出一份对称加密的秘钥
SSL握手和TCP握手的先后顺序
SSL层在TCP层之上,SSL握手是在TCP握手完成之后,除了这点之外,两者应该是相对独立的过程。在服务端,这两个过程有可能不在同一台主机上,比如服务端用LVS+Nginx实现负载均衡,LVS是四层负载均衡,只解析到TCP层,并不会解析SSL层,而Nginx实现的是七层负载均衡,可以解析到应用层。因此,LVS与客户端只建立TCP连接,而SSL握手是在Nginx上实现的。
SSL握手过程
这里只解释单方认证,即客户端辨别服务端的身份真假。且以RSA为例子。
下面是示意图
示意图解释如下(C代表客户端,S代表服务端)
第一步:C—>S: SSL协议版本号,客户端支持的加密套件(加密算法种类),客户端生成的随机数Random1
第二步:从客户端发过来的加密算法中选一种;利用非对称加密,生成含有公钥的证书;服务端自己生成一个随机数Random2(至此客户端和服务端都拥有了两个随机数(Random1+ Random2),这两个随机数会在后续生成对称秘钥时用到)
第三步:确认数字证书有效;生成随机数Random3并用公钥加密;
第四步:服务端用自己的私钥解密获得Random3;
第五步:客户端,服务端根据约定的对称加密算法,使用三个随机数组合起来生成“对称加密的秘钥”,后面传输的数据都用这个秘钥来加密。