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协议):

     

  • 相关阅读:
    CentOS6.4安装OpenSSL
    Linux下设置Tomcat开机启动
    Linux下Tomcat8.0.44配置使用Apr
    CentOS6.4将MySQL5.1升级至5.5.36
    Linux下实现MySQL数据库自动备份
    Linux将MySQL数据库目录挂载至新数据盘
    MySQL创建数据库与创建用户以及授权
    Node.js Mongoose数据库连接失败 提示:Authentication failed
    JBoss7.1.1远程无法访问
    mongodb3.4 远程连接认证失败
  • 原文地址:https://www.cnblogs.com/xuanbingbingo/p/8694412.html
Copyright © 2011-2022 走看看