https

https

https就是安全版本的http,譬如一些支付等操作基本都是基于https的,因为http请求的安全系数太低了。

简单来看,https与http的区别就是: 在请求前,会建立ssl链接,确保接下来的通信都是加密的,无法被轻易截取分析

一般来说,如果要将网站升级成https,需要后端支持(后端需要申请证书等),然后https的开销也比http要大(因为需要额外建立安全链接以及加密等),所以一般来说http2.0配合https的体验更佳(因为http2.0更快了)

一般来说,主要关注的就是SSL/TLS的握手流程,如下(简述):

  1. 浏览器请求建立SSL链接,并向服务端发送一个随机数–Client random和客户端支持的加密方法,比如RSA加密,此时是明文传输。

  2. 服务端从中选出一组加密算法与Hash算法,回复一个随机数–Server random,并将自己的身份信息以证书的形式发回给浏览器 (证书里包含了网站地址,非对称加密的公钥,以及证书颁发机构等信息)

  3. 浏览器收到服务端的证书后

    • 验证证书的合法性(颁发机构是否合法,证书中包含的网址是否和正在访问的一样),如果证书信任,则浏览器会显示一个小锁头,否则会有提示

    • 用户接收证书后(不管信不信任),浏览会生产新的随机数–Premaster secret,然后证书中的公钥以及指定的加密方法加密 Premastersecret,发送给服务器。

    • 利用Client random、Server random和Premaster secret通过一定的算法生成HTTP链接数据传输的对称加密key- session key

    • 使用约定好的HASH算法计算握手消息,并使用生成的 session key对消息进行加密,最后将之前生成的所有信息发送给服务端。

  4. 服务端收到浏览器的回复

    • 利用已知的加解密方式与自己的私钥进行解密,获取 Premastersecret

    • 和浏览器相同规则生成 session key

    • 使用 session key解密浏览器发来的握手消息,并验证Hash是否与浏览器发来的一致

    • 使用 session key加密一段握手消息,发送给浏览器

  5. 浏览器解密并计算握手消息的HASH,如果与服务端发来的HASH一致,此时握手过程结束,

之后所有的https通信数据将由之前浏览器生成的 session key并利用对称加密算法进行加密。

这里放一张图(来源:阮一峰-图解SSL/TLS协议):

 

posted @ 2018-04-02 16:01  炫冰G爱  阅读(582)  评论(0编辑  收藏  举报