zoukankan      html  css  js  c++  java
  • 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协议):

     

  • 相关阅读:
    zoj 3627#模拟#枚举
    Codeforces 432D Prefixes and Suffixes kmp
    hdu 4778 Gems Fight! 状压dp
    CodeForces 379D 暴力 枚举
    HDU 4022 stl multiset
    手动转一下田神的2048
    【ZOJ】3785 What day is that day? ——KMP 暴力打表找规律
    poj 3254 状压dp
    C++中运算符的优先级
    内存中的数据对齐
  • 原文地址:https://www.cnblogs.com/xuanbingbingo/p/8694412.html
Copyright © 2011-2022 走看看