很多人只知道Https比Http更安全,至于为什么更安全,那就不太清楚了,因为别人都这么说。其实,Https就是在Http基础上通过SSL协议进行加密之后的网络传输,并通过非对称和对称加密算法来对密码和数据进行加密。
我们先来看一张图,再辅以说明其通信过程:
1、Client明文将自己支持的一套加密规则、一个随机数(Random_C)发送给Server。
2、Server返回自己选择的加密规则、CA证书(服务器地址、加密公钥、证书颁发机构)以及一个通过加密规则和HASH算法生成的随机数(Random_S)。
3、Client收到Server的消息之后会有以下行为:
a、验证证书(地址是否是正在访问的、机构是否合法的);
b、自己生成一个随机的密码(Pre_master)并使用CA证书中的加密公钥进行加密(enc_pre_master);
c、计算出一个对称加密的enc_key,通过Random_C、Random_S、Pre_master生成握手信息;
d、使用约定好的Hash算法计算握手信息,并通过enc_key和约定好的加密算法对消息进行加密。
4、Client将enc_pre_master、加密之后的握手消息发送给Server。
5、Server收到握手消息之后会有以下行为:
a、收到enc_pre_master之后,会通过私钥进行解密(非对称加密算法)得到pre_master;
b、通过pre_master、Random_C、Random_S计算得到协商密码enc_key;
c、通过enc_key解密握手信息,验证Hash是否和客户端发来的一致;
d、生成握手信息同样使用enc_key和约定好的加密算法。
6、Server发送握手信息给Client,也就是说Server验证通过了Client,并再次发送消息给Client让其验证自己。
7、Client拿到握手信息解密,握手结束。客户端解密并计算握手信息的Hash,如果与Server发来的Hash一致,此时握手过程结束。
8、正常加密通信,握手成功之后,所有的通信数据将由之前协商密钥enc_key及约定好的算法进行加密解密。
其中Https使用到的加密算法如下:
非对称加密算法:RSA,DSA/DSS;
对称加密算法:AES,RC4,3DES;
HASH算法:MD5,SHA1,SHA256。