https在传输数据之前需要在客户端(浏览器)与服务端(网站)之间进行一次握手,在握手过程中将确立双方加密传输数据的密码信息。
使用的是TLS/SSL协议。
握手过程的简单描述如下:
1、浏览器首先将自己的一套加密规则发送给网站。
2、网站从中选出一组加密算法与hash算法,加密算法用来加密数据,哈希算法用来验证数据的完整性。并将自己的信息以证书的形式发送给浏览器(网站的url,证书颁布机构,加密公钥等)。
3、浏览器拿到证书后
首先验证证书的合法性( 证书中的url与当前网站的url是否一致,证书颁布机构是否合法),如果证书受信任,这浏览器会出现一个小锁的标志。
其次如果证书受信任,或者是用户接受了不受信任的证书,浏览器会生成一段随机数作为密码,并用证书中的公钥进行加密。
最后使用约定好的hash算法计算握手消息,并用随机生成的随机数对消息进行加密,最后将之前生成的所有信息发送给网站。
4、网站拿到信息后,
首先使用自己的私钥,对密码进行解密,然后根据解密的密码对握手信息进行解密,并验证哈西是否与浏览器发来的一致。
然后使用密码加密一段,握手消息发送给浏览器。
5、如果浏览器解密并计算握手信息的哈希与网站发来的哈希一致,此时握手过程结束,之后所有的通信数据将使用之前浏览器生成的随机密码,并利用对称加密算法进行加密。
非对称加密算法:rsa,dsa/dss
对称加密算法:aes,rc4,3des
哈希算法:md5,sha1,sha256