HTTPS 是怎么保证安全的?可以被中间人攻击吗?
Posted 码农每日一题
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HTTPS 是怎么保证安全的?可以被中间人攻击吗?相关的知识,希望对你有一定的参考价值。
HTTP 的问题
-
被窃听风险:通信使用明文传输(没有加密),传输内容可能会被窃听(第三方可能捕获通信内容)。 -
被冒充风险:不会验证通信方的身份,因此有可能遭到被伪装篡改。 -
被篡改风险:无法证明传输报文的完整性,所以有可能遭篡改的风险。
HTTPS 概况
SSL/TLS 安全层的作用就是为了解决上面提到的 HTTP 存在的问题,下面我们来看看它是怎么解决的:
-
所有的传输信息都是加密传输,第三方无法窃听。 -
传输配备了身份验证,防止身份被冒充风险。 -
具有安全校验机制,传输内容一旦被篡改,通信双方会立刻发现被篡改。
加密
对称加密
如果加密和解密使用同一个秘钥则称为共享秘钥加密,也被称为对称秘钥加密。
-
浏览器先发给服务端 client_random 和一系列的加密方法。 -
接着服务端发送 server_random 和加密方法给 浏览 器。
此时浏览器和服务器有了三个相同的凭证:client_random、server_random 和加密方法。用加密方法把 client_random、server_random 两个随机数混合起来,然后生成秘钥,这个生成的密钥就是浏览器和服务端通信的暗号(对称密钥)。
存在的问题:第三方中间人可以获取到 client_random、server_random 和加密方法,由于这个加密方法同时可以解密,所以中间人可以成功对暗号进行解密,然后拿到数据。
非对称加密
-
首先浏览器会发送给服务端一系列的加密方法。 -
接着服务端会发送给浏览器加密方法以及公钥。
之后浏览器就通过公钥将数据加密传输给服务端,服务端收到公钥加密的数据使用私钥对其进行解密。服务端给浏览器发送数据时,则先使用自己的私钥对数据进行加密,浏览器收到服务端发送过来的私钥加密数据,使用自己的公钥进行解密即可。
存在的问题:非对称加密效率太低,会严重影响加解密速度,进而影响到用户请求速度。此外,无法保证服务端发送给浏览器的数据安全,服务端的数据只能用私钥进行加密,中间人一旦拿到公钥就可以对服务端传来的数据进行解密,然后就被破解了。
HTTPS 使用对称与非对称加密结合
传输数据阶段依然使用对称加密,但是对称加密的秘钥会采用非对称加密传输。如下图:
-
浏览器向服务端发送 client_random 和加密方法列表。 -
服务端收到后返回 server_random、加密方法以及公钥。 -
浏览器收到后生成另一个随机数 pre_master,并用公钥加密,传给服务端( 重点)。 -
服务端用私钥解密这个被加密后的 pre_master。
到此,服务端和浏览器就有了相同的 client_random、server_random 和 pre_master,然后服务端和浏览器会使用这三组随机数生成对称秘钥。有了对称秘钥后,双方就可以使用这个对称加密的密钥来传输数据。
CA(数字证书)
使用对称和非对称混合方式实现了数据加密传输,但这种方式仍存在一个致命问题,服务端可能是被冒充的。这样,浏览器访问的就是被冒充的服务端,冒充者可以在自己的服务器上实现公钥和私钥,而对浏览器来说,它并不完全知道现在访问的是一个被冒充的服务器。所以,服务器需要证明自己的身份,需要使用权威机构颁发的证书,这个权威机构就是 CA(Certificate Authority),颁发的证书就称为数字证书 (Digital Certificate)。
对于浏览器来说,数字证书有两个作用:
-
通过数字证书 CA 向浏览器证明服务器的身份。 -
数字证书里面包含了服务器公钥。
下面是含有数字证书的 HTTPS 请求流程,如下:
相对于不含数字证书的 HTTPS 请求流程,主要有如下两个改动:
-
服务器没有直接返回公钥给浏览器,而是返回了数字证书,而公钥正是包含数字证书中的。 -
在浏览器端多了一个证书验证的操作,验证了证书之后,才继续后序流程。
HTTPS 中间人攻击
HTTPS 从协议上解决了 HTTP 时代的中间人攻击问题,但是 HTTPS 在用户主动信任了伪造证书的时候也会发生中间人攻击(比如早期的 12306 需要手动信任证书),HTTPS 中间人攻击流程如下:
-
客户端用 HTTPS 连接服务器的 443 端口。 -
服务器下发自己的数字证书给客户端。 -
黑客劫持了服务器的真实证书,并伪造了一个假的证书给浏览器。 -
浏览器可以发现得到的网站证书是假的,但是浏览器选择信任。 -
浏览器生成随机对称密钥 A,用伪造的证书中的公钥加密发往服务器。 -
黑客同样可以劫持这个请求,得到浏览器的对称密钥 A,从而能够窃听或者篡改通信数据。 -
黑客利用服务器的真实公钥将客户端的对称密钥 A 加密发往服务器。 -
服务器利用私钥解密这个对称密钥 A 之后与黑客通信。 -
黑客利用对称密钥 A 解密服务器的数据,篡改之后利用对称密钥 A 加密发给客户端。 -
客户端收到的数据已经是不安全的了。
以上就是 HTTPS 中间人攻击的原理,这也就是 HTTPS 抓包为什么要信任证书的原因。所以,操作系统内置权威 CA 公钥来保证数字签名以及数字证书的安全性。实施 HTTPS 中间人攻击需要手动信任攻击者的假证书。
到此常用的就回答完毕了,你能完整回答吗?
点击左下角阅读原文查看历史经典技术问题汇总,看完顺手一键三连呀~
以上是关于HTTPS 是怎么保证安全的?可以被中间人攻击吗?的主要内容,如果未能解决你的问题,请参考以下文章
在HTTPS安全页面中加载HTTP不安全的内容,如何绕过安全警告?