认识HTTPS以及了解HTTPS的加密过程

Posted 渴望力量的土狗

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了认识HTTPS以及了解HTTPS的加密过程相关的知识,希望对你有一定的参考价值。

目录

简单认识HTTPS:

运营商劫持: 

加密的理解: 

HTTPS的工作过程: 

对称加密: 

非对称加密: 

中间人攻击

证书 


简单认识HTTPS:

HTTPS 也是一个应用层协议。是在 HTTP 协议的基础上引入了一个加密层。加密层之前叫做SSL,现在叫TLS了,所以也叫SSL/TLS协议。

我们知道HTTP是按照文本的明文方式进行传输的,这就使得传输过程中容易出现被篡改的情况。提到这些我们就不得不说一下“运营商劫持”。

运营商劫持: 

运营商劫持的事情想必各位应该都遇到过,比如你想要下载一个qq音乐,正常情况下点击下载后会直接下载qq音乐,而有些情况会出现点击下载后给你下载了一个360手机助手,这就是典型的运营商劫持事件。那为什么会出现运营商劫持?为了钱!!!我们通过网络传输的数据包会经经过运营商的网络设备(如路由器,交换机等等),那么运营商的网络设备就可以解析出你传输的数据内容, 并进行篡改。点击下载本质上就是向服务器发送一个http请求,然后从服务器获得的http响应当中包含了下载的链接,然而运营商劫持之后,就会把给你的响应中的下载链接更换为360手机助手了。

当然,除了运营商之外也会有黑客利用相同的手段来窃取用户的隐私信息和篡改信息来谋取利益。我们都知道在互联网上进行明文传输是非常危险的,试想一下登录支付宝的时候被黑客获取到余额甚至密码有多可怕...

所以HTTPS就是在HTTP的基础上进行了加密,通过加密来进一步保障用户的信息安全。那么具体是怎么加密的呢? 

加密的理解: 

简单来说加密就是把要传输的明文,也就是要传输的信息,通过一些手段进行变换生成密文。  

解密就是把加密过的密文经过一系列的变换还原成明文的过程。

在这个加密和解密的过程中 , 往往需要一个或者多个中间的数据 , 辅助进行这个过程 , 这样的数据称为密钥 。

举个简单的例子:比如我们经常在电视中看到的电报,当A给B发送电报的时候,为了防止电报被直接截取并破译,就会进行一个加密的操作,即使被截获了,敌人也不能在短时间内破译,但是对于AB双方来说,他们之间有一个约定,别人是不知道的,所以B得到加密的电报的时候就可以直接还原成明文了。

在这其中:

密文:发送的电报

密钥:约定

明文:电报本身要传递的信息

HTTPS的工作过程: 

加密的方式有很多, 但是整体可以分成两大类: 对称加密 和 非对称加密

对称加密: 

对于对称加密就是通过同一个密钥,可以把明文加密成密文,也可以把密文还原的明文。

举个例子:我们用按位异或充当一个密钥,假设明文a=1234,密钥key=8888,那么加密后的密文b=a^key=9834。针对b再次进行使用按位异或得到明文为1234。对于字符串来说也是同理,每个字符都可以表示成一个数字。这里只是简单举个例子,HTTPS当中并不是使用按位异或。

 如图:

在这个过程当中客户端发送的是通过密钥加密过的密文,即便黑客截取到了密文,不知道密钥也是无法解密的。尽管如此,我们需要注意的是,这是一个客户端的情况,如果是多个客户端呢?这个时候服务器就需要知道每个对应客户端的密钥是什么了,也就是说服务器需要记录每个客户端的密钥,不仅如此,也想要保证客户端和服务器之间能够传递密钥。但是只要就又会引出一些安全问题:

比如我们在在客户端和服务器建立连接的时候, 双方协商确定这次的密钥是啥。但是这样的话黑客也就可以获取到密钥了!!!



 

如果我们直接这样传输,黑客就轻松的获得了密钥,就变得更危险了,所以我们需要对密钥的内容也进行加密!这样的话我们就需要对密钥再加一个密钥,这就出现了一个无限循环的套娃问题,就行不通了。

所以我们可以考虑使用非对称加密!  

非对称加密: 

非对称加密要用到两个密钥 , 一个叫做 " 公钥 ", 一个叫做 " 私钥 ";

公钥和私钥是配对的 。最大的缺点就是 运算速度非常慢 ,比对称加密要慢很多 ;

通过公钥对明文加密, 变成密文,通过私钥对密文解密,变成明文。

也可以反着用:
通过私钥对明文加密, 变成密文
通过公钥对密文解密, 变成明文

这里举个例子: 

A 要给 B 一些重要的文件, 但是 B 可能不在. 于是 A 和 B 提前做出约定:
B 说: 我桌子上有个盒子, 然后我给你一把锁, 你把文件放盒子里用锁锁上, 然后我回头拿着钥匙来开锁取文件。在这个场景中, 这把锁就相当于公钥, 钥匙就是私钥。公钥给谁都行(不怕泄露), 但是私钥只有 B 自己持有。持有私钥的人才能解密。

对于非对称加密,服务器生成一对公钥私钥,客户端持有公钥,服务器持有私钥,此时客户端的公钥从服务器拿,黑客也会知道公钥,但是黑客不知道私钥,私钥是服务器自己的,别人没法知道。

客户端使用公钥,对对称密钥进行加密,传输给服务器,然后服务器拿着自己的私钥来解密获得对称密钥,此时客户端服务器就可以使用这个对称密钥进行后续的传输了。

由于对称加密的效率比非对称加密高很多, 因此只是在开始阶段协商密钥的时候使用非对称加密,后续的传输仍然使用对称加密。

同时非对称密钥也不是绝对安全的,比如出现中间人攻击的情况。

中间人攻击

中间人攻击就类似于《毒战》中孙红雷扮演的角色,属于卧底。比如客户端向服务器发出请求,询问公钥,同时黑客在中间截获,向服务器也发出请求获取到服务器生成的非对称密钥中的公钥pub1,于是黑客将公钥告诉客户端公钥是pub2(公钥是黑客生成的非对称密钥中的),之后客户端生成对称密钥key,同时使用使用pub2对对称密钥key进行加密,准备将对称密钥发送给服务器,但由于使用的是pub2加密的key,所以黑客有相应的私钥pri2,可以进行解密,同时把对称密钥通过获取到的pub1公钥发送给服务器,这样黑客就完成了信息的获取。

如图所示:

那么怎么知道公钥是黑客的还是服务器的?(解决中间人攻击的关键)

证书 

证书本质上是引入第三方的公证机构。

服务器(网站)在设立的时候就需要去专门的机构进行认证,申请证书,审核通过会颁发证书。同时服务器生成的公钥也包含在证书中。(类似你去公安局办个身份证,身份证包含了你的各种信息) 

有证书之后,客户端向服务器请求公钥的时候,就不止是请求一个公钥了,是要把整个证书请求过来,当客户端拿到证书之后就可以对证书进行校验(看看证书是不是假的,是不是被改的,是不是无效的等等),如果发现证书无效,浏览器就会弹框报警。

证书中的签名是一个被加密的字符串,客户端可以通过认证机构提供的公钥进行解密,解密之后得到一个hash1值,然后客户端在通过同样的方法对其他字段算一次hash值得到hash2,看看hash1(从签名中接出来的)和hash2(客户端自己算的)是不是相同,相同说明有效,否则无效。同时黑客是无法进行更改证书的,比如把公钥换了,这样hash1和hash2就对不上了,就认为是无效的。而且黑客也无法重新生成签名,因为黑客不知道认证机构的私钥。

 

 

图解HTTPS加密过程

文章目录

HTTP

http在我之前的博客中已经有所讲解。敬请移步
Linux:了解HTTP协议

HTTPS概念即组成

HTTPS (全称:Hyper Text Transfer Protocol over SecureSocket Layer),是以安全为目标的 HTTP 通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性。

HTTPS 在HTTP 的基础下加入SSL/TLS(Secure Sockets Layer 安全套接字协议;Transport Layer Security 传输层安全),TLS与SSL在传输层与应用层之间对网络连接进行加密。

HTTPS 存在不同于 HTTP 的默认端口及一个加密/身份验证层(在 HTTP与 TCP 之间)。

SSL/TLS概念

SSL(Secure Socket Layer 安全套接层)是基于HTTPS下的一个协议加密层,最初是由网景公司(Netscape)研发,后被IETF(The Internet Engineering Task Force - 互联网工程任务组)标准化后更名为TSL。

TSL/SSL对用户最重要的意义是加密以及解密

我们知道,在OSI参考模型中,将网络通信的工作分为七层物理层,数据链路层,网络层,传输层,会话层,表示层和应用层。通常将上三层统称为应用层,下两层称为网络接口层。

应用层的代表性协议有HTTP和HTTPS,而HTTPS拥有特殊的一层处于应用层与传输层中间。

SSL/TSL处于应用层与传输层中间。

SSL/TLS的运作流程

TLS/SSL对用户最重要的意义是加密以及解密。接下来详谈加密以及解密的工作流程。

在了解加密解密的工作流程前,还需要明确几组概念

对称加密 / 非对称加密

对称加密:对称加密指的就是加密和解密使用同一个秘钥,所以叫做对称加密。对称加密只有一个秘钥,作为私钥。

非对称加密:加密和解密使用不同的秘钥,一把作为公开的公钥,另一把作为私钥。公钥加密的信息,只有私钥才能解密。私钥加密的信息,只有公钥才能解密。 私钥只能由一方安全保管,不能外泄,而公钥则可以发给任何请求它的人。非对称加密使用这对密钥中的一个进行加密,而解密则需要另一个密钥。

了解这样一组概念之后,进入正题,第一个重要的概念为

HTTPS密钥协商

该过程使用对称加密与非对称加密两种方法结合,从而保证数据的安全。

服务器端(server)与客户端(client)各拥有一个对称密钥进行加密解密,同时server端拥有一个非对称私钥,server端会把非对称公钥发送给client端,client使用这个非对称公钥对对称密钥进行加密,之后将加密后的对称密钥发送给server端,server端使用非对称私钥对其进行解密

HTTPS密钥协商过程

Q:既然非对称加密很安全,为何不直接使用非对称加密?
A:非对称加密算法一般比较复杂,对称加密算法简单;如果使用非对称加密对所有数据加密解密,会消耗远远超出组合使用来加密解密的时间。
一个字:快!!!

HTTPS中间人攻击劫持问题

通俗地讲,就是一个黑客通过私自搭建的服务器攻击用户的电脑。

本来client直接向server请求数据;而现在多了一个中间服务器,黑客可以将client从server获取的非对称公钥替换成黑客公钥,再获得client的端口,之后client发送数据就会经过中间服务器,中间服务器便可轻易获得client端的数据。

当然,我们要保证客户端的安全客户端,因此需要对远端服务器进行身份认证;以及防止中间信息被篡改问题

远端服务器身份认证问题

在合法服务器进行建站时,官方公正部门会颁发证书(我国叫做ca证书),包含server公钥,权威信息(以数据签名方式呈现)等;client绕过中间人内置证书信息;在client发起请求时会先请求ca证书,然后对其进行解密,与内置证书信息进行对比;若相同则服务器身份认证成功,否则失败。

远端服务器身份认证

中间信息被篡改问题

哈希算法中的开散列方法,将文本转为定长的字符序列;称为数据摘要。这种方法可以保证微小区别的文本所形成的数据摘要是不同的。

client向server端发送数据时(加密后的对称密钥等),会对数据形成数据摘要,同时会将数据摘要进行密钥加密,加密的数据摘要叫做数据签名(指纹)。数据签名时不能轻易被破解的。
server端拿到数据之后,也会对数据生成数据摘要再生成数据签名,然后与client端发送来的数据签名进行对比,如果不同,就说明数据是被篡改过的,便不做处理。

以上是关于认识HTTPS以及了解HTTPS的加密过程的主要内容,如果未能解决你的问题,请参考以下文章

图解HTTPS协议加密解密全过程

iOS HTTPS的基本用法 以及连接建立过程

你是否了解HTTPS的加密原理?(面试常问)

图解HTTPS加密过程

图解HTTPS加密过程

图解HTTPS加密过程