zoukankan      html  css  js  c++  java
  • https如何工作

    一、http

    网络协议基于分层架构构建了七层模型,是ISO建立的用于计算机或者通信系统之间的互联的标准体系。下图展示了其中的五层:

    http被称为超文本传输协议,是互联网上应用最为广泛的一种网络协议,建立在应用层当中。主要用于从www服务器传输超文本到本地浏览器,更加得高效。

    由于http协议是明文传输,也不要求验证主体,所以在传输过程很容易被获取数据内容,这对于互联网数据来说是很不安全的,因此,https就应运而生。

    二、加密算法

    在了解https之前,需要对一些加密算法有一个概念:

    1、对称加密

    我们使用密钥A去加密一段数据内容,再使用密钥B去解密这段数据内容,如果加密的密钥A和解密的密钥B是一样的,那么这就是对称加密。如:AES、DES加密算法

    2、非对称加密

    非对称加密则加密的密钥A和解密的密钥B不一样,所以非对称加密需要两个密钥,它们是成对存在的。通常称用于加密和传输的密钥为公钥,用于解密的密钥为私钥,私钥不在网络中传输。被公钥加密的数据,必须使用对应的私钥才能解密。如:数字签名

    3、hash算法(下文不涉及hash算法,这里简单提及)

    hash算法是一种简单的单向算法,通过hash算法可以针对数据内容生成一段特定长度、唯一的hash值,但是hash值是不可逆的,经常用于不需要数据还原的完整性校验上。如:MD5、SHA算法

    三、https

    在上文中,我们了解了http是不安全的明文传输,那https是怎么做到安全传输的呢?

    其实https并不是应用层上的一个新的通信协议,它只是在http的基础上加入了一层SSL或TLS,如图:

    下面我们通过一个思考过程来了解https是如何工作的:

    1、简单对称加密

    既然http是不安全的协议,那么我如果希望传输的数据是安全的要怎么办呢?我们能想到的最简单的办法就是对被传输的数据进行加密处理,当传到服务器以后进行数据解密。如图:

    这样存在什么问题呢?很显然,如何有人在传输过程截获了data和key,那么他便可以进行解密,所以这样简单的解密过程并不能保证通信安全。

    2、非对称加密解决安全问题

    我们看到,简单的对称加密是不能保证通信安全的。并且,我们发现不安全的主要原因是在于key是可以被截获并用来解密数据的。

    根据这个问题点,我们考虑一下非对称加密。非对称加密中私钥用来解密,公钥用来加密和传输。那么用来解密的私钥就不会被截获,或者截获了公钥却并不能解密。这么一看,似乎非对称加密已经能够解决通信安全方面的问题了,如图:

    通过传输公钥来加密,以及通过私钥来解密达到了传输过程解决安全问题。但是非对称加密算法的效率是远不及对称算法的,如果存在大量的数据传输,那么非对称加密为了安全性就需要付出很大的低效成本,这对于当前互联网环境来说是不可接受的,那么如何解决效率问题呢?

    3、混合使用解决安全和效率问题

    我们可以这么思考,既然对称加密高效,非对称加密安全,那么我们能否设计一个流程同时利用这两个特性呢?

    基于这个想法,我们想数据data通过对称加密,而需要用来解密数据的key通过非对称加密。到服务端以后,先解密key,然后再通过key对称解密大量数据的data,这样既解决了安全性问题,又解决了大量数据传输效率的问题。如图:

    在上面这个思考过程中,我们从对称加密的不安全到解决非对称加密的效率,了解了https是如何实现安全通信的。

    四、证书

    上面的过程中,我们使用公钥私钥等来加密解密,但是这里面存在一个问题。客户端或者服务端如何知道对方是否是伪造的呢?

    从现实生活中类比,如果你需要购买一颗钻石,但你怎么知道这颗钻石是否是真钻呢,为此你需要查看这颗钻石是否配有相应的证书。密钥也一样,密钥需要证书来证明它是可以被信任的。

    这里的类比你可能会存在以下两个疑惑:

    1、客户端或者浏览器等如何知道密钥是有效的可以被信任的?

    其实浏览器之类的客户端内置了很多根证书,所以一个需要被验证的密钥会根据这些内置的根证书进行验证。如:Android已经将150+个CA证书内置在手机当中,这些证书被全世界所信赖。

    2、它们又是如何知道证明密钥有效的证书是不是也是被伪造的呢?

    在这里要先提及一个证书链的概念,如:

    证书A是可信任的,证书A信任证书B,证书B信任证书C,根据这样的依托关系,那么证书B、C也是可信任的,这个即证书链。

    所以当我们要验证证书是否有效的时候,只需要去验证证书是否在可信任的证书链当中即可。如:阿里云给你颁发了证书,那么它会在阿里云的证书链上去验证证书的有效性。所以如果是一个伪造的证书是无法进入证书链的,也就是无效的不被信任的证书。

    参考文章:

    http://www.songzhw.com/2016/09/13/how-does-https-work/

    https://blog.csdn.net/wen303614/article/details/62422856

  • 相关阅读:
    团队项目-第一阶段冲刺7
    团队项目-第一阶段冲刺6
    Spring Boot 揭秘与实战(七) 实用技术篇
    Spring Boot 揭秘与实战(七) 实用技术篇
    Spring Boot 揭秘与实战(六) 消息队列篇
    Spring Boot 揭秘与实战(五) 服务器篇
    Spring Boot 揭秘与实战(五) 服务器篇
    Spring Boot 揭秘与实战(五) 服务器篇
    Spring Boot 揭秘与实战(五) 服务器篇
    Spring Boot 揭秘与实战(四) 配置文件篇
  • 原文地址:https://www.cnblogs.com/lay2017/p/9447757.html
Copyright © 2011-2022 走看看