https传输过程

2022-02-13  本文已影响0人  前端小白的摸爬滚打

HTTPS传输过程主要涉及到对称加密和非对称加密两种方式,对称加密用来加密数据内容,非对称加密用来加密对称加密的秘钥。

前置知识

对称加密

加密和解密使用相同的密钥

非对称加密

使用公钥进行加密,私钥进行解密;私钥加密的话就使用公钥解密

A向B发送消息 使用B的公钥进行加密 B收到密文后使用自己的私钥进行解密 反之亦然

对称加密+非对称加密

https协议采用的就是这种加密方式

为了解决在对称加密/非对称加密中公钥被窃取的情况。

A先生成一个对话密钥,然后把对话密钥发送给B。但是这个对话密钥要经过B的公钥进行加密,B收到后用自己的私钥进行解密。这样就解决了对称加密时公钥容易被截取的缺陷。

实际上就是对称加密的密钥进行非对称加密

中间人攻击

在非对称加密和对称机密+非对称机密的这两种方式的时候都需要使用B的公钥对传输的内容进行加密,那么B的密钥是哪里来的呢?

B的公钥是在最开始连接建立的时候发送给A的。假如这个时候有一个中间人截取了B的公钥,然后将自己的公钥发送给A。A在给B发送消息时,想用B的公钥进行加密。但实际上用的是中间人的公钥。中间人截取了A给B发送的消息,然后用自己的私钥解密。就可以随意读取消息的内容。
此外,中间人也可以使用B的公钥来加密一些消息传输给B,让B以为中间人就是A

数字证书

用于防止中间人攻击

数字证书是由专业的机构颁发的CA(Certificate Authority)机构

CA机构通过服务端提供的相关信息生成证书,证书的主要内容有:公钥(Public Key)、ISSUER(证书的发布机构)、Subject(证书持有者)、证书有效期、签名算法、指纹及指纹算法。

数字证书是如何保证公钥来自请求的服务器呢?数字证书上由持有人的相关信息,通过这点可以确定其不是一个中间人;但是证书也是可以伪造的,如何保证证书为真呢?

数字证书包括 公钥和数字签名 证书在发布之前,CA机构对证书的内容用指纹算法(一般是sha1或sha256)计算得到一个hash值,这个hash值就是指纹。为什么用hash值作为证书的身份代表呢?首先,hash值具有不可逆性,也就是说无法通过hash值得出原来的信息内容;其次,hash值具有唯一性,即hash计算可以保证不同的内容一定得到不同的hash值。数字证书在发布的时候,CA机构将证书的指纹和指纹算法通过自己的私钥加密得到的就是证书的签名了

检验时 首先通过机构的根公钥去解密证书的签名,解密成功的话会得到证书的指纹和指纹算法,指纹是一个hash值,它代表着证书的原始内容,此时再通过指纹算法计算证书内容得到另外一个hash值,如果这两个hash值相同,则代表证书没有被篡改过,否则就是被篡改了

浏览器接收到证书以后,就要开始进行验证工作了。首先从证书中得知证书的颁发机构,然后从浏览器系统中去寻找此颁发机构的根证书。上面我们也看到,世界上权威CA机构的根证书都是预先嵌入到浏览器中的,如果在浏览器系中没有找到对应的根证书,就代表此机构不是受信任的,那么就会警告无法确认证书的真假,比如以前打开12360网站就会提示,现在不会了

如果我们找到了证书颁发机构的根证书,那么就从根证书中取得那个根公钥,用根公钥去解密此证书的数字签名,成功解密的话就得到证书的指纹和指纹算法,指纹是证书内容通过指纹算法计算得到的一个hash值,这里我们称之为h1,h1代表证书的原始内容;然后用指纹算法对当前接收到的证书内容再进行一次hash计算得到另一个值h2,h2则代表当前证书的内容,如果此时h1和h2是相等的,就代表证书没有被修改过。如果证书被篡改过,h2和h1是不可能相同的,因为hash值具有唯一性,不同内容通过hash计算得到的值是不可能相同的

有人说假如证书上的指纹是不法分子伪造的,伪造是没有用的,因为你伪造的指纹不可能用CA机构的根私钥去加密(根私钥是CA机构绝对保密的),伪造者只能拿自己的秘钥去加密这个伪造的指纹,但当我们拿机构的根公钥去解密伪造指纹的时候是不可能成功的(加密内容只能由一对公钥私钥解密)

在证书没有被修改过的基础上,再检查证书上的使用者的URL(比如csdn.net)和我们请求的URL是否相等,如果相等,那么就可以证明当前浏览器链接的网址也是正确的,而不是一些钓鱼网之类的

但如果浏览器的连接被某个中间人截取了,中间人也可以发一个由权威的CA机构颁发的证书给浏览器,然后也可以通过证书没有被篡改的验证,但是在证书没有被篡改的前提下,通过对比证书上的URL和我们请求的URL是否相同,我们还是可以判断当前证书是不是服务器发的证书。可以这么理解,因为URL具有唯一性,所以中间人的证书的上的URL和我们的证书的URL是不可能相同的,如果中间人修改了自己证书上的URL,那么就通过不了证书没有被篡改的验证,所以中间人的证书也是欺骗不了我们的

到这里我们认证了三点信息:

  1. 证书是否为受信任的权威机构颁发的

  2. 证书是否被篡改

  3. 证书是否为服务器发过来的,而不是第三方发的

HTTP协议存在的问题

什么是HTTPS?

https就是在http和tcp之间加入了一层SSL层。https的安全基础就是ssl。

https协议就是由http+ssl组成的可以进行加密传输和身份认证的网络协议。https的作用:

http和https的区别

https的缺点

http传输过程(SSL握手)

所以在证书验证阶段使用的是非对称加密(即生成会话密钥的阶段),在内容传输的时候还是对称加密

私钥的作用

握手阶段我们需要注意三点:

从上面可以得知,整个会话过程中(包括握手以及之后的数据传输)服务器的公钥和私钥只用到了一次

上一篇下一篇

猜你喜欢

热点阅读