Https原理

Https原理

本文主要从以下几个问题介绍Https。搞清楚下面的问题,关于Https的知识就清晰了。

1、为什么会有Https,和Http的区别是什么?

2、Https的实现原理,和Http的区别是什么?

为甚么两个问题都会有  和Http的区别是什么?首先第一问,我们从概念上解读和Http的区别,其次第二问,我们从本质的实现原理解读和Http的区别。

一、为什么会有Https,和Http的区别是什么?

  首选Http是七层协议中应用层的协议。传输层使用的是Tcp。Http在传输的过程中并不能保证客户端-》服务端的数据安全性。会存在Hacker劫持,以欺骗客户端或服务端来获取数据。因此Https的出现就是为了保证数据的安全传输。

  所以这里 搞清楚为什么出现 Https,其实就简单的了解了和Http的区别。这里的区别指的是Http和Https两种协议应用场景的区别。要想搞清楚根本的区别。那就要看我们的下一个问题,Https的实现原理。

  事实上,Https为了保证安全,在七层模型应用层和传输层中,这里一般我们用的协议就是Http(应用层)和Tcp(传输层),在这两个协议中间使用了SSL协议来保证安全。

  回到七层网络模型中,在传输层和应用层之前还有一个会话层和表示层,其实表示层就是用来 对传输数据做加解密和压缩等工作的。在这里我们可以理解为 SSL协议即就是在表示层进行了应用。

  那么 其实我们常说的Https,在语义上也就是我们上文提到的,Http+SSL+Tcp。因此Https和Http的区别是什么?明面上Https是比Http多使用了一个SSL(Secure Sockets Layer 安全套接层)协议。

  搞清楚明面上的区别后,那么本质上的区别是什么呢?且看第二问。

二、Https的实现原理,和Http的区别是什么?

    在正式介绍Https得实现原理之前,我们先要搞清楚为什么Http得传输不安全。知道这一点后,我们再回过头来看,Https是如何利用了SSL实现了安全传输。知其然并知其所以然。才能理解技术得本质。

    在介绍Http的传输为什么不安全之前,我们需要了解一些知识,方便理解下面介绍的通讯过程。

      对称加密:   对称加密,指的是一把钥匙,客户端使用这把钥匙对数据进行加密,服务端使用这把钥匙进行解密,同样,服务端使用这把钥匙进行加密,客户端使用这把钥匙进行解密。即同一把钥匙加解密,称为对称加密。

              这里多个客户端都可以拥有这把钥匙,只不过钥匙的内容是一样的。(这也是后面Hacker达到欺骗的手段)

      非对称加密:  顾名思义,和对称加密相反,非对称加密使用了两把钥匙,一把公钥一把私钥。私钥一般是服务端私有的。不对外公开。而公钥是和服务端进行通讯的客户端都可以拥有,但实质上钥匙是一样的。可以理解为,客户端

              大家都有一把钥匙,钥匙都是一样的,都是用来解密服务端私钥加密的数据的(这也是后面Hacker达到欺骗的手段)。同样也可以使用这把公钥进行加密。服务端使用私钥进行解密。

              注意*:这里一般使用私钥加密的操作,常配合摘要算法做的是签名这个操作。我们暂时理解为私钥加密。后文会提到签名这个详细操作过程。

    1、Http为什么传输不安全?

        使用Http协议传输数据,当客户端和服务端建立起Tcp连接后,假设传输数据使用 对称加密的手段,那么Hacker可以利用数据劫持等技术手段,可以简单理解为 抓包,即获取了客户端这次请求的数据包。由于Hacker也可以是一个客户端,他也可以

        正常的访问服务端,因此它也可以获取对称加密的密钥,至于什么时候获取,实质上这个过程是一个假设的过程。因为正如我们这里解释的目的一样,使用对称加密是不能达到安全传输的目的的。因此当然不会在建立连接的时候去传输这个密钥。当然,

        一些特殊应用场景除外,所以我们这里可以暂且理解为客户端想要和服务端通讯,建立起连接后,客户端就获得了对称加密需要的钥匙。

        回到上文,那么Hacker也可以获取这把钥匙。那么他就可以作为中间人,来欺骗客户端和服务端。怎么欺骗?且看下图。

        使用对称加密传输:

        

        使用非对称加密:

        

    2、Https的实现原理 

    在介绍Https的实现原理之前,同样首选需要了解一些知识,方便理解后续Https的通讯过程如何保证了安全传输。

      非对称加密算法:非对称加密上文已经介绍了,这里主要介绍一下常见的算法:RSA、DSA

      对称加密算法:对称加密算法上文也已经介绍,这里提一下相关的算法:DES、AES

      摘要算法:  什么是摘要?摘要就是对数据进行一个不可逆算法后,产生的一序列字串,这个字串具有唯一性,并且无法被还原回原数据即不可逆。这里可以简单的理解为使用Hash函数产生一堆字串。常见的摘要算法有MD5,SHA-256,SHA-1

             一个好的摘要算法是体现在不可逆特点上的,也可以说一个不够好的摘要算法,如果通过‘撞库’等操作可以破解出原文,那么说明这个摘要算法不够好。

      签名:  签名的过程实质上是,对明文数据,先做摘要算法得到摘要,然后使用非对称加密的私钥进行加密。叫做签名。

      验签:  验签当然和上面的签名是对应的,1、拿到签名使用公钥进行解密,获取明文摘要。2、然后使用摘要算法对明文也进行摘要,摘要后和刚才第一步获取的摘要比对,比对结果一致,验签通过。

           这里需要注意:验签的时候,首先要保证验签的这一方 1、是知道进行了 摘要的明文的,2、然后也是知道摘要算法的,3、同样也是拥有服务端的公钥的。至于 验签这方 是怎么提前知道这三个内容的,这里就是Https的

           CA证书的内容验签的实现细节。

      CA证书: CA是证书的签发机构,CA证书当然就是CA机构签发的证书了,它是公钥基础设施(Public Key Infrastructure,PKI)的核心。这里就不多介绍基础知识了,主要介绍一下CA证书的主要内容。

           这里介绍CA证书几个关键的内容,了解了这几个内容就明白了Https是如何利用CA证书做了安全传输,CA证书主要包含:首先要知道,大型公司一般是向CA购买证书的,用来保证客户端请求自己得服务的时候保证安全。所以CA证书一般是

           CA机构签发给需要购买的公司,所以CA证书首先包括了  1、购买公司的信息,公司域名邮箱  2、有效期   3、证书名称   4、非对称加密的私钥公钥。即CA证书的私钥公钥。

      注意:这里有个关键知识需要了解一下,就是一般操作系统都会内置了一些权威机构的CA证书,当然这里和CA机构签发给公司的不一样,这里只是代表的CA机构,操作系统这里的CA证书一般可以获取这个CA机构的公钥。

          就是要用来解密这个CA签发给公司的证书签名用来做验签的。具体流程看下述流程图。

      接下来我们直接看Https的流程图:来看一下CA证书是如何保证了安全传输。

      

      

      看完这里流程后,发现Hacker不管怎么做劫持,客户端要么会提示风险访问,要么就会验签失败。所以到这里,相信在一定程度上已经明白了HTTPs是如何利用了CA证书保证了安全传输。、

      注意:上文流程图只介绍了CA是如何避免Hacker做了劫持,至于后续的通讯建立,实质上,后面客户端验签通过后,客户端和服务端使用的是对称加密的方式在传输数据,并且CA证书的验证只在第一次建立请求的时候做了验证。

          那么问题来了,1、使用对称加密后续传输岂不是又回到了开始的介绍,又不安全了。2、后续都没有CA证书,后续的通讯安全是如何保障的

                    其实,只在第一次使用CA证书验证,是因为CA证书的内容实质上是很大的,在每次通讯中都传递证书是很浪费带宽的,而且是没有必要的。这里,验签通过后,客户端会保存一个服务端的sessionId,每次使用

                    对称加密,服务端收到后,先去检测sessionId是否存在且有效。如果存在且有效就正常通讯,如果无效,则需要使用CA证书重新和客户端建立连接。

                    所以,这里 也可以理解为,Https是在SSL协议中使用了CA证书保证建立了安全连接,后续的通讯使用的是Http的协议,并且使用了对称加密。因此,下文我们补充介绍一些SSL协议建立握手的通讯流程。

三、Https补充

    上面对于Htpps使用CA证书建立起安全通讯的流程做了介绍。这里再对Https使用SSL协议做一些介绍

    前文提到过 Https = SSL + Http

    而且Https使用了CA证书,那么在整个通讯流程中,什么时候传递了CA证书给客户端,什么时候建立了连接,这里我们做一下SSL协议四次握手的简单的介绍。

    下面截取了一张网上的图来帮助大家了解SSL建立连接的过程,可以看到在第三次握手的时候,服务端传递了证书给客户端。

     

     另外:SSL建立连接需要客户端和服务端进行四次握手,相比较Tcp三次握手来说慢了许多,那么SSL慢在哪里呢?

    下面是网上的一段回答

    1. 通信慢

      和使用 HTTP 相比, 网络负载可能会变慢 2 到 100 倍。 除去和TCP 连接、 发送 HTTP 请求 • 响应以外, 还必须进行 SSL通信,因此整体上处理通信量不可避免会增加;

    2. 处理速度慢

      由于SSL必须进行加密处理,要大量消耗CPU 及内存等资源, 导致处理速度变慢。在服务器和客户端都需要进行加密和解密的运算处理。 因此从结果上讲, 比起 HTTP 会更多地消耗服务器和客户端的硬件资源, 导致负载增强

    但是SSL协议在一定程度上保障了安全,而且在握手建立连接以后,和正常Http通讯是没有多少区别的。因此为了安全消耗一定的带宽和效率。当然是值得的。

原文地址:https://www.cnblogs.com/wa1l-E/p/14151437.html