明了Https的SSL握手过程

版权声明:原创文章,未经允许不得转载. https://blog.csdn.net/shengqianfeng/article/details/86507323

经常会有人问到这个问题,以前看了很多次没有记住,这里有必要坐下总结,希望可以通俗易懂便于记忆:

Https协议由两部分组成:http+ssl,即在http协议的基础上增加了一层ssl的握手过程.

1 浏览器作为发起方,向网站发送一套浏览器自身支持的加密规则,比如客户端支持的加密算法,Hash算法,ssl版本,以及一个28字节的随机数client_random。

2 网站选出一套加密算法和hash算法,生成一个服务端随机数server_random并以证书的形式返回给客户端浏览器,这个证书还包含网站地址、公钥public_key、证书的颁发机构CA以及证书过期时间。

3 浏览器解析证书是否有效,如果无效则浏览器弹出提示框告警。如果证书有效,则根据server_random生成一个preMaster_secret和Master_secret会话密钥) master_secret 的生成需要 preMaster_key ,并需要 client_random 和 server_random 作为种子。浏览器向服务器发送经过public_key加密的preMaster_secret,以及对握手消息取hash值并使用master_secret进行加密发送给网站.-----------------客户端握手结束通知,表示客户端的握手阶段已经结束。这一项同时也是前面发送的所有内容的hash值,用来供服务器校验       

4 服务器使用private_key 解密后得到preMaster_secret,再根据client_random 和 server_random 作为种子得到master_secret.然后使用master_secret解密握手消息并计算hash,跟浏览器发送的hash值对比是否一致.然后把握手消息通过master_secret进行对称加密后返回给浏览器.以及把握手消息进行hashmaster_secret加密后发给浏览器.--------------服务器握手结束通知,表示服务器的握手阶段已经结束。这一项同时也是前面发送的所有内容的hash值,用来供客户端校验。

5 客户端同样可以使用master_secret进行解密得到握手消息.校验握手消息的hash值是否跟服务器发送过来的hash值一致,一致则握手结束.通信开始。

6 以后的通信都是通过master_secret+对称加密算法的方式进行. 客户端与服务器进入加密通信,就完全是使用普通的HTTP协议,只不过用"会话密钥"加密内容。SSL握手过程中如果有任何错误,都会使加密连接断开,从而阻止了隐私信息的传输。


  • 非对称加密算法:RSADSA/DSS
  • 对称加密算法:AESRC43DES
  • HASH算法:MD5SHA1SHA256

参考: 阮一峰日志

猜你喜欢

转载自blog.csdn.net/shengqianfeng/article/details/86507323