侧边栏壁纸
博主头像
敢敢雷博主等级

永言配命,自求多福

  • 累计撰写 57 篇文章
  • 累计创建 0 个标签
  • 累计收到 2 条评论

目 录CONTENT

文章目录

HTTP和HTTPS

敢敢雷
2020-04-07 / 0 评论 / 0 点赞 / 1,045 阅读 / 4,677 字
温馨提示:
部分素材来自网络,若不小心影响到您的利益,请联系我删除。

在我们访问网站的时候,都是通过域名访问的,域名地址表示网站中不同的页面,而通信协议,简单来说就是浏览器和服务器之间沟通的语言。网站中的通信协议一般就是HTTP协议和HTTPS协议。
关于HTTP协议和HTTPS协议,大家都清楚,HTTP是明文传输,HTTPS是加密传输的。下面就来分析下,为什么要使用HTTPS和具体怎么加密的。。

HTTP协议

HTTP协议(HyperText Transfer Protocol,超文本传输协议)是因特网上应用最为广泛的一种网络传输协议,所有的WWW文件都必须遵守这个标准。
HTTP是一个基于TCP/IP通信协议来传递数据。现在HTTP协议在2019年已经发展到3.0了,而且主流浏览器以及支持2.0了,根据我的观察,还是大部分的网站还是使用的HTTP1.1版本。闲话不谈,进入正题。

HTTP协议的问题

HTTP是明文传输的,那么在传输时,简单的过程就是这样的。
image.png

直接将传输信息通过明文传输,想象一下,现在有个怀胚子,现在就在监听客户端和服务器传输的信息,他可以不费其他力气,来获得传输的信息,更可怕的是通过中间人攻击来完成对传输信息的篡改。这就是HTTP明文传输的缺点处。HTTP协议就是“裸奔”。

中间人攻击

所谓中间人攻击,就是指将受入侵者控制的一台计算机虚拟放置在网络连接中的两台通信计算机之间,这台计算机就称为“中间人”。
image.png

这就是中间人攻击带来的危害。这个“怀胚子”既然可以篡改传输信息,那么必定可以获取传输信息。如果使用HTTP协议明文传输,那么用户的个人信息全会泄露,这就是一个大事。

HTTPS协议

主要问题就是传输信息是明文的,既然明文传输有问题,那把明文加密不就行了,所以,HTTPS协议就是对传输信息加密。HTTPS协议可以理解为HTTP协议的升级,就是在HTTP的基础上增加了数据加密。在数据进行传输之前,对数据进行加密,然后再发送到服务器。这样,就算数据被第三者所截获,但是由于数据是加密的,所以你的个人信息让然是安全的。这就是HTTP和HTTPS的最大区别。

这里先摆出结论,HTTPS是通过对称加密+非对称加密+CA认证+Hash散列算法来完成信息加密的。那么就由浅到深来具体分析下,这些加密的过程是怎么完成对信息的加密的。

对称加密

所谓对称加密,就是单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密。
简单的说,就是假如我们有一个密钥K,传输的数据为Data,简单理解就是这样一个方法

F(K,Data)=X

在服务器传输就是这样

客户端传输数据Data,先进行对称加密
F(K,Data)=X     传输的信息就是X
然后服务器收到信息X,在进行对称解密
F(K,X)=Data	解密获得到的信息就是Data

图片演示就是这样样子
image.png
流程就是

  1. 客户端传输的数据是“给A转账1000块钱”,但是它先通过密钥对称加密,转换成了加密数据,传输给服务端。
  2. 服务端接受到了加密数据,在通过密钥对加密信息解密,获得真实信息“给A转账1000块钱”。再具体操作。
  3. 服务端操作完成,给A传输信息“好的,给A转账了1000块钱”,但是传输前一样,先使用密钥,对传输信息加密后再传给客户端。
  4. 客户端接收到返回信息,再通过密钥,对加密信息解密,获得真实信息“好的,给A转账了1000块钱”。

那么,整个操作就在加密和解密的过程中,完成了对信息安全的传输。“中间人攻击”在监听传输信息就是获得到的一系列加密的信息,即使篡改后,也是一串加密的信息,即使服务端能解析,也很难获得到“中间人”所想表达的意思。

对称加密的问题

表面上,对称加密完成了对信息加密操作,但是它有一个问题,就是密钥K是唯一的。客户端和服务端都是使用的同一个密匙来完成加密和解密操作的,那么这个“中间人”,根据加密和解密都是使用同一个密钥,那么获得这个唯一密钥不就很简单了。简单的一个数学题:假设我的密钥K的值是5;传输的真实Data都是3

K+3=加密数据;
K-加密数据=3

那么获得这个K是不是就很容易了,当“中间人”通过大量分析获得到了这个密钥,那么对称加密也就没什么意义了。(当然,我举的那个数学例子有点牵强哈,理解意思就行)

非对称加密

对称加密的问题在于密钥唯一并且客户端和服务端都是使用的同一个密钥。现在问题找到了,那么根据问题,一次性解决不就好了。
所以这就是非对称加密。非对称加密算法需要两个密钥:公开密钥(PublicKey:简称公钥)和私有密钥(PrivateKey:简称私钥)。公钥与私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥才能解密。因为加密和解密使用的是两个不同的密钥。
这不就很好的解决了。简单理解就是,我这里PuK就是公钥,PrK就是私钥。
其中,客户端拿公钥,服务端拿私钥。

客户端通过公钥加密:F(PuK+Data1) = Y
服务端通过私钥解密:F(PrK+Y)=Data1

服务端通过私钥加密:F(PrK+Data2) = y
客户端通过公钥解密:F(PuK+y)=Data2

这样公钥和私钥成对,保证给数据加密和解密。客户端只使用公钥,服务端只使用私钥。
image.png
这样,因为私钥只在服务端存在,那么中间人永远不可能获得到私钥。

非对称加密的问题

非对称加密,嗯,完美,但是,公钥谁都可以获得到,客户端和服务端连接后,服务端会给客户端发公钥。既然客户端可以获得公钥,那么“中间人”也可以获得公钥,虽然中间人没有办法拿到公钥。无法正确的给客户端伪造信息,但是既然“中间人”可以拿到公钥,就可以正确向服务端发送信息,达到自己的目的就行了。
image.png
虽然中间人不能给客户端伪造正确的信息,但是,它篡改客户端给服务器正确的信息已经达到了。
所以,既然中间人可以获得公钥,根据非对称加密的原理。客户端发送给服务端的信息,因为“中间人”没有私钥,所以,这个信息它没办法解密。但是因为它有公钥的原因,中间人就可以篡改客户端的信息和解密服务端给客户端发送的信息。

对称加密和非对称加密组合使用

既然对称加密和非对称加密都存在问题,那组合使用也可能是一种解决办法。
对称加密和非对称加密组合使用就是使用这两种算法各种的优点和解决他们的缺点。来完成对数据的加密。
对称加密是缺点是只有唯一密钥,服务端和客户端都是同一把密钥,容易被撬,那么解决简单,我把对称加密的密钥通过加密算法生成不就行了。
非对称加密加密的优点是客户端发送给服务端的加密信息,“中间人”没有私钥,不能解密。
那么切入点就在这里,加密算法生成密钥,加上非对称加密,客户端发送的信息“中间人”没办法解密。思路就来了。

  1. 使用非对称加密,客户端获得公钥,然后小声嘀咕,给服务端发送加密信息:“我们使用XXX来作为密钥“。(这条信息,中间人没有私钥没办法解密)
  2. 服务端解密加密信息,获得真实信息,”我们使用XXX来作为密钥“,然后进行判断,返回给服务端信息,”好咧,这条信息是我的标示哦“作为公钥。(这条信息,因为中间人有公钥,可以正确读取,但是它并没有获得到密钥,所以它读取也无所谓)
  3. 客户端获得到服务端返回消息,使用公钥解密,读取到正确标示,那么,对称加密的密钥就成功生成。
  4. 然后客户端和服务端通过密钥以对称加密的方式传输信息。

通过以上四步,就完成了对称加密和非对称加密的组合使用。因为对称加密的密钥是服务端和客户端约定生成的,它就保证了对称加密密钥的不唯一,每台客户端连接的服务端约定好的密钥都是不同的。
image.png

组合使用的问题

既然你加密方法方式可以不断升级,我“中间人”为什么不升级呢。不就是私钥吗,我自己伪造一个我自己的公钥和私钥然后给服务端不就行了。下面用一个图片展示,这个“中间人”是多么鸡贼的。

image.png

简单的说,就是“中间人”伪造成服务端来直接篡改密钥信息。多么鸡贼。看似完美,无懈可击的组合方式,被伪造密钥,又沦陷。

CA证书

好嘛,你伪造信息,你把我的公钥给伪造了,你真行,那好吧,我不找服务端要公钥了,我要去找权威机构了。那么,这个权威机构,就是CA证书。
所谓CA证书,简单理解,就是它自己也有公钥和私钥,然后采用非对称加密,完成对服务端的公钥进行加密和解密。
下面称服务端的公钥为PuK,CA机构的公钥为PPuK,私钥为PPrK。

服务器对自己的公钥加密:F(PPrK,Puk)=加密后的公钥
客户端对加密后的公钥解密:F(PPuK,加密后的公钥)=PuK

所以,客户端,以后客户端拿私钥都是直接拿通过CA机构私钥加密后的公钥信息。所以CA证书,一般都是存放在操作系统级别,通过私钥和公钥完成对服务端公钥的加密和解密操作。
根据一张图来演示具体过程。
image.png

这个过程,最需要主要的地方就是CA机构的公钥,所以,CA机构的公钥,在操作系统中已经写死,操作系统内已经存放了大量的CA公钥。而且CA证书都是由一些CA认证机构授权的,所以,在使用CA证书,大多数情况都是需要付费。

中间人继续攻击

接着来看下中间人攻击如果不死心,它继续攻击会怎么样把。

  • 在获得加密后的公钥动手脚
    因为加密后的公钥信息也是通过网络传输,“中间人”还是可以修改这个加密后的公钥信息。但是,这条信息,是没有认证过的,所以,浏览器会警告用户此证书不受信任,需要人工确认是否信任此证书。所有使用自签证书的网站都明确地告诉用户出现这种情况,用户必须点信任并继续浏览。相信大家都遇到过这种情况,它发生原因之一就是证书伪造。
  • 在约定对称加密密钥时动手脚
    约定对称加密密钥是由客户端发起的,“中间人”可以获取约定公钥的加密信息,因为“中间人”没有私钥的原因,它不能解密这条信息,所以它拿到了这条信息也用。它唯一能做的就是直接破坏这条信息,但是这样做对“中间人”没有任何好处,一般也没有铁憨憨这么无聊。

所以,这些就是HTTPS加密的具体实现过程。
但是之前结论是HTTPS是通过对称加密+非对称加密+CA认证+Hash散列算法来完成信息加密的。Hash散列的体现就在于服务端与客户端在约定对称加密的密钥来实现的。

HTTPS全过程

以访问https://www.baidu.com为例子,其实这里涉及到输入URL浏览器发生了什么的问题。。这里就不解释前面的哪些东西,直接以客户端和服务端来分析。

  1. 客户端给服务端发送信息
    第一步是用户主动连接的服务端,在这一步,会使用非对称算法,并且告诉服务端,客户端支持的SSL版本,并且还会发送一个随机数据A。
  2. 服务端给客户端发送信息
    这一步,服务端获得获得了客户端发送的信息。然后会再使用对称算法向客户端发送消息,这条消息包括:确定的SSL版本,随机数B,证书。
  3. 客户端认证证书
    客户端获得了服务端发送回来的证书,进行证书的认证。如果认定证书不安全,会提醒用户,证书不安全。再由用户自己决定是否访问。如果不访问,那么下面的步骤就不会执行。
  4. 客户端给服务器发送消息
    客户端认证证书后,回再向服务端发送一条随机数C,并且会发送一条Hash散列算法,其值是通过第一步和第二步计算来了。所以这一步会发送C和Hash(1,2)的结果。
  5. 服务端端确定客户端安全
    在这里,服务端接收到了客户端发送的消息C和Hash(1,2)的结果。那么现在,服务端肯定要确定客户端是否安全。在这里,因为客户端和服务端都都参与了第1步和第2步的操作。所以,服务端也进行一次Hash(1,2),再与第4步发送来的Hash(1,2)的结果判断,这也是为什么第4步会以1,2步来做Hash运算。判断成功。创建一个对称加密的密钥,也就是我们的随机数A,B,C通过某种算法,生成一个密钥。
  6. 服务端向客户端发送信息
    在第五步,已经完成了在服务端参数一个对称加密的密钥。然后此时,服务端会再进行的一次Hash散列算法,其值是由第1,2,4运算得出的。即Hash(1,2,4)的结果。
  7. 客户端确定服务端安全
    这一步和第5步差不多,它也是通过在第6步传输过来的值Hash(1,2,4)来自己进行一次同样的Hash运算,Hash(1,2,4)来判断是否和接收到的值相同,判断相同,再使用同样的算法,将随机数A,B,C生成一个对称加密的密钥。

闲谈

HTTPS还涉及到很多东西,HTTPS中的最后一个字母S指的是 SSL/TLS 协议,它位于 HTTP 协议与 TCP/IP 协议中间。
这些又涉及到了关于计算机网络的一些知识。以后有心情在写下关于OSI七层模型和TCP/IP模型把。
今天有心情写下这篇文章主要还是因为疫情的原因嘛。病毒入侵人体。病毒不就是那个“中间人”么,通过篡改传输信息,来让自己繁殖。平时晚上睡不着也看了一些关于病毒的科普,感觉。。太特么神奇了。HTTPS协议算法的不断升级,和“中间人”也不断的升级。

0

评论区