- 什么是中间人攻击?
攻击者将自己插入通信过程中,以窃取,篡改数据。通信的两端不知道中间人的存在,他们以为在与对方直接通信,实际上他们的通信已经被监听或干扰。WIFI 路由器被破解之后就能进行中间人攻击。
- 中间人攻击为什么能实现
有 3 个原因
-
HTTP 协议以明文传输数据,中间人拦截数据包之后能轻易地还原 HTTP 包文的内容,这使得中间人能监听 HTTP 通信的数据。.
-
使用 HTTP 协议的请求和响应方不验证对方的身份。因此请求方无法确保发起的请求由预计的响应方接受,它收到的数据也不能确保来自预计的响应方;从响应方的角度来看,它接受的请求不一定来自预计的请求方,它返回的数据也不一定被预计的请求方接受。
cookie 和 token 的验证发生在业务层,如果 HTTP 协议层不校验身份,那么数据在传输过程中,网络代理或中间服务器仍然可以携带正确的 cookie 和 token 等业务层的验证数据,然后篡改数据再次发出,由于有正确的验证数据,那么业务层便无妨识别真伪。
- 无法验证数据的完整性。因此数据在传输过程中被篡改了,通信双方都无法知晓。
- 如何防范中间人攻击
- 重视浏览器弹出的警告。
- 在公共网络环境下,不访问没有使用 HTTPS 协议的网站。
- 登录网站时候注意网站是否使用的是 HTTPS 协议。
- 为什么使用 HTTPS 协议能减少中间人攻击
HTTPS 在 HTTP 的基础上加了一层 SSL/TLS,这使得 HTTP 通信不以明文传输,通信双方能验证数据的完整性,通信双方能验证对方的身份。SSL 是 TLS 的前身,后者更安全。SSL 是一个比 TLS 更通用的术语。
- HTTPS 的工作流程
TCP 三次握手 -> SSL/TLS 三次握手 -> 会话,可以看出 HTTPS 在 HTTP 建立连接的基础上加了一层 SSL/TLS 三次握手,下面重点介绍它的工作流程。
****SSL/TLS 第一次握手:****客户端将自己支持的 SSL/TLS 版本、加密算法、压缩方式等发送到服务端,这些数据用明文传输。
****SSL/TLS 第二次握手:****服务端将数字证书、证书链等返回客户端,这些数据用明文传输。
****SSL/TLS 第三次握手:****客户端使用证书颁发机构的公钥验证数字证书是否有效,无效则断开与服务端的连接,有效则拿到服务器公钥,用伪随机数生成会话密钥,客户端使用服务器公钥通过非对称加密算法加密会话密钥,将结果传给服务器,服务器接受到加密后的会话密钥之后,用私钥将其解密。
****会话:****SSL/TLS 三次握手结束之后,客户端和服务端都拥有了会话密钥。服务端响应请求时使用对称加密算法将报文加密,客户端接受到响应后使用会话密钥解密报文。
- 名词介绍
- 数字证书
服务器向证书颁发机构(CA)申请证书,CA 使用它的私钥基于证书的内容生成数字证书,返回给服务器。数字证书中包含数字签名、服务器的公钥、域名、证书的有效期等。
- 数字签名
数字签名包含在数字证书中,它由 CA 的私钥基于服务器提交的证书内容生成,在 SSL/TLS 第二次握手时服务器将数字证书发送到客户端,客户端根据 CA 的公钥来验证证书的数字签名是否合法
- 证书颁发机构私钥,公钥
证书颁发机构私钥由证书颁发机构自己保存,公钥由客户端保存。私钥用于生成数字证书,公钥用于验证数字签名是否有效.
- 服务器私钥,公钥
服务器私钥由服务器自己保存,公钥包含在数字证书中,在 SSL/TLS 第二次握手它被返回给客户端。公钥用于加密会话密钥,私钥用于解密服务器接收到的会话密钥。
- 非对称加密
加密和解密使用不同的密钥
- 对称加密
加密和解密使用相同的密钥
- 会话密钥
在会话阶段,服务器用它加密返回的报文,客户端用它解密接收到的报文。
- 证书链
数字证书不是由一家机构颁发的,而是设立了一家根证书机构,又设立了若干层中间证书机构,由上层证书机构去颁发验证下层证书机构的证书。证书链就是从根证书,然后经过的若干中间证书,最后到服务器证书这一条链路。
- 为什么 HTTPS 并非绝对安全
-
会话密钥泄漏风险:在会话阶段服务端和客户端使用会话密钥加密和解密报文,如果会话密钥泄露,则攻击者能用它解密报文。
-
服务端不验证客户端的身份:客户端将会话密钥发送给服务端,但是服务端不验证客户端的身份,在 SSL/TLS 握手过程中只是客户端验证服务端的身份。
-
证书链中的任意节点被污染:证书链是用于验证服务器身份的关键组成部分。如果证书链中的任何一个证书受到污染或者私钥泄露,攻击者可能会冒充合法的服务器进行中间人攻击,这会损害通信的机密性和完整性。
-
客户端证书链中任何一个节点公钥被污染替换 :类似于服务器证书链,客户端证书链中的污染或替换也可能导致安全问题。这通常涉及到客户端的身份验证,如果恶意方能够替换客户端证书链中的公钥,他们可能会冒充合法客户端与服务器通信。
-
没有妥善处理 HTTP 重定向到 HTTPS:如果一个网站接受 HTTP 的请求,然后重定向到 HTTPS,用户可能在开始重定向前,通过没有加密的方式与服务器通信,比如,用户输入 http://foo.com 或者仅是输入 foo.com。这样为中间人攻击创造了机会。可以利用重定向将用户引导至恶意站点,而不是原始站的安全版本。