一日一技:HTTPS 证书和中间人攻击的原理

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: 一日一技:HTTPS 证书和中间人攻击的原理

HTTPS 证书、为什么使用 Charles、Fiddler、MitmProxy 抓 HTTPS 的请求要安装证书、 requests 发送请求的时候,verify 参数除了 False/True 还能填写什么参数。今天我们就这几个问题来做一个简单的介绍。


首先我们定义几个术语:


  • 公钥:一串字符串,在非对称加密里面用来加密数据,随意公开。


  • 私钥:一串字符串,在非对称加密里面用来解密数据,不能泄露。根据私钥可以反推出公钥。


  • 普通密钥:一串字符串。在对称加密里面,加密和解密都用它。


首先关于HTTPS 链接的创建流程,网上已经有太多文章来介绍了。网上给出的流程,大概是这样的:


  1. 客户端发送请求到服务器。


  1. 服务器把自己的公钥下发给客户端。


  1. 客户端使用这个公钥加密一个普通的密钥,并发送给服务器。


  1. 服务器使用私钥解密出这个普通的密钥。


  1. 接下来所有的请求都由这个普通的密钥通过对称加密来实现。


并且,这些文章一般还会说道,对称加密速度快,但是加密解密使用的是同一个密钥。当你要传输这个密钥的时候可能会泄露;非对称加密,公钥可以随意公开,公钥加密,私钥解密。安全性高但是速度慢。所以 HTTPS 使用非对称加密用来传输普通密钥。这个普通密钥再来传输正常的数据。


这个流程看起来没有什么问题,也很合理。但是,它漏掉了一个很重要的东西:如何识别信息有没有被篡改或者监听?


我们说 HTTPS 协议正常情况下是不怕窃听的,也就是说,我即使在你家路由器上面安装一个监控程序,也无法监听到你的数据。但是上面这个流程,无法推导出这个结论:

如果我在你家的路由器上面安装了一个中间人监控的程序。那么,你的客户端第一次往服务器发送请求的时候,我就知道你要请求哪个网站了,这个时候,我首先假装服务器,让你把请求信息都发给我。然后我再假装客户端,把你的请求信息转发给服务器。服务器的公钥下发下来以后,监控程序保留这个公钥。监控程序自己也有一套公钥、私钥。他把自己的公钥发送给你。你以为这个公钥是服务器的,但实际上它是监控程序的。你用这个公钥加密普通密钥,监控程序能就使用自己的私钥来解密,拿到真正的对称加密的密钥。然后它再把普通密钥用服务器下发的公钥加密,传给服务器。接下来,服务器解密以后,用这个普通密钥加密数据,和它以为的客户端正常通信。


在这个过程中,客户端和服务器,完全不知道自己都在跟一个中间人进行通信。那么数据就这样轻易被监听了。


这样一来,HTTPS 的安全性意义在哪里?难道你要给监听的人说:你等一下,等我跟服务器交换完密钥以后,你再来监听?


使用 HTTPS,应该能保证,只要客户端和服务器是正常的,那么监听程序在中间的任何环节出现,我都不害怕。


HTTPS 之所以能这样保证,是因为它使用的是符合X.509标准的证书[1],而不仅仅是公钥和私钥。


国际电信联盟设计了一套专门针对证书格式的标准X.509,其核心提供了一种描述证书的格式。


X.509数字证书不仅包括用户名和密码,而且还包含了与用户有关的其他信息,通过使用证书,CA可以为证书接收者提供一种方法,使他们不仅信任证书主体的公钥,而且还信任有关证书主体的其他信息。


1.png


证书本质上就是一个文本文件。但是这个文件里面记录了很多其他信息,包括这个证书是谁颁发的,过期时间等等。


我们知道,要生成一个 SSL 证书,在 Linux 里面就是一条命令而已,非常简单。但是,国际电信联盟提供了一批值得信任的证书颁发机构,只有使用这些机构颁发的证书,浏览器才认为是安全的,才会出现绿色的锁。否则,如果你使用的不是认证机构颁发的证书,或者干脆你是自己一条命令生成的证书,那么当你访问网站的时候,就会变成下面这样:


2.png


这是因为,浏览器不知道你现在这个网站的证书,是真正服务器就用的自签证书,还是被中间人替换了。所以会给你发报警。如果你确认服务器就是这个自签证书,那么你就可以点高级-继续访问,如下图所示:


3.png


访问成功以后,浏览器地址栏也会提示你请求不安全:


4.png

如果你用 requests 请求这个网站,也会报错,如下图所示:


5.png


我们知道,requests 可以设置参数verify=False来强行访问使用了非认证机构颁发的证书的网站:


6.png


这里的verify=False,其实就相当于我们在浏览器上面点击了高级-继续访问

除此之外,requests 的verify参数,还可以填写成一个文件地址:


7.png


这里的这个test.cer文件,就是我在使用openssl生成网站自签证书的时候,一并自动生成的。它同时包含了公钥和私钥。它长下面这样:


8.png


我们再来看看 Charles 的根证书:


9.png


他们的格式是一样的。所以,当我们要使用 Charles/Fiddler/MitmProxy 抓HTTPS 的时候,需要信任根证书,实际上就相当于使用requests的时候,把verify=设置为根证书的地址。


为什么 Charles 的根证书被信任了以后就可以抓包了?为什么requests 指定了根证书以后,访问使用自签证书的 https 网站就不报错了?这是因为,我们现在有办法可以检测数据是否被篡改过。


可以对数据进行加密,私钥对数据进行解密。但是实际上,我们还可以用私钥对数据进行“加密”,公钥进行“解密”!注意这里的加密解密,我打了引号,是因为准确的说,应该叫做用私钥对数据明文的摘要加密得到数字签名,用公钥可以验证这个数字签名是不是自己对应的那个私钥生成的。


服务器发给客户端的数据,除了客户端索要的数据外,还包括一份经过签名的摘要数据。客户端收到数据以后,用公钥就可以从签名里面解析出客户端需要的数据对应的摘要。客户端再把自己收到的数据使用摘要算法计算出一个摘要,两边一对比,就知道数据有没有被篡改。


自签证书不能伪装成可信机构签发的证书,就在于证书里面有一段数字签名,可信任机构颁发的证书,这个签名都是唯一的,自签证书如果修改了机构信息,那么新的摘要信息就跟那么这个数字签名解密后的摘要信息不匹配了。于是浏览器就会给你发出警报。

但当你信任了一个根证书以后,浏览器就不会发送警报了。所以如果你安装了来路不明的证书,那么你的客户端和服务器的通信就可能会被监听。


如果你看明白这篇文章,那么你应该会知道,如果你想使用 Charles 等等抓包工具,那么,根证书应该是安装到你的客户端,而不是安装到电脑上。例如你想抓手机的数据包,那么你应该把根证书安装到手机上,而不是安装到运行 Charles 的电脑上。


参考文献


[1] 符合X.509标准的证书: https://zh.wikipedia.org/wiki/X.509


请关注微信公众号【未闻Code】获取更多精彩文章。

目录
相关文章
|
2月前
|
安全 算法 网络安全
HTTPS原理
HTTPS 通过加密、数字证书、握手过程等多种手段,确保了网络通信的安全和可靠。它为用户提供了更高级别的隐私保护和数据安全,是现代互联网中重要的安全保障机制。随着网络安全威胁的不断增加,HTTPS 的应用也越来越广泛,成为保障网络安全的重要基石。
126 70
|
3天前
|
域名解析 安全 数据建模
没有域名只有IP地址怎么申请https证书?
IP 地址 SSL 证书是一种特殊的 SSL/TLS 证书,允许直接为 IP 地址配置 HTTPS 加密,适用于内部服务、私有网络和无域名的设备管理。与基于域名的证书不同,申请过程较为复杂,需选择支持 IP 的证书颁发机构(CA),并完成额外的身份验证步骤。浏览器对 IP 地址的支持有限,可能会显示警告。通过正确配置服务器(如 Nginx 或 Apache),可以确保通信安全。
|
17天前
|
网络协议 应用服务中间件 网络安全
免费泛域名https证书教程—无限免费续签
随着互联网安全意识提升,越来越多网站采用HTTPS协议。本文介绍如何通过JoySSL轻松获取并实现免费泛域名SSL证书的无限续签。JoySSL提供永久免费通配符SSL证书,支持无限制域名申请及自动续签,全中文界面适合国内用户。教程涵盖注册账号、选择证书类型、验证域名所有权、下载与安装证书以及设置自动续签等步骤,帮助网站简化SSL证书管理流程,确保长期安全性。
|
12天前
|
安全 算法 网络协议
【网络原理】——图解HTTPS如何加密(通俗简单易懂)
HTTPS加密过程,明文,密文,密钥,对称加密,非对称加密,公钥和私钥,证书加密
|
15天前
|
网络协议 安全 网络安全
探索网络模型与协议:从OSI到HTTPs的原理解析
OSI七层网络模型和TCP/IP四层模型是理解和设计计算机网络的框架。OSI模型包括物理层、数据链路层、网络层、传输层、会话层、表示层和应用层,而TCP/IP模型则简化为链路层、网络层、传输层和 HTTPS协议基于HTTP并通过TLS/SSL加密数据,确保安全传输。其连接过程涉及TCP三次握手、SSL证书验证、对称密钥交换等步骤,以保障通信的安全性和完整性。数字信封技术使用非对称加密和数字证书确保数据的机密性和身份认证。 浏览器通过Https访问网站的过程包括输入网址、DNS解析、建立TCP连接、发送HTTPS请求、接收响应、验证证书和解析网页内容等步骤,确保用户与服务器之间的安全通信。
67 1
|
1月前
|
安全 算法 网络协议
ip地址https证书免费试用—政企单位专用
IP地址HTTPS证书为基于公网IP的服务提供加密保护,JoySSL等机构提供免费试用,帮助政企用户降低安全成本。用户需注册账号、申请证书、提交CSR并验证IP所有权,最后安装证书并测试。免费证书有效期短,但能有效保障数据安全,提升用户信任度及合规性。
|
27天前
|
安全 网络安全 数据安全/隐私保护
内网/局域网IP地址申请https证书方法
为内网/局域网IP地址申请HTTPS证书,可增强数据传输的安全性。首先确定固定的内网IP地址,选择可信的证书颁发机构,注册并申请免费或付费SSL证书,提交相关信息,支付费用(如有)。证书申请成功后,下载并配置于服务器,确保通过浏览器访问时显示为安全连接。注意定期更新证书,确保持续的安全保障。此过程适用于局域网内部通信加密,提升内网服务的安全水平。
|
1月前
|
安全 数据安全/隐私保护
IP地址https证书免费申请教程
本教程详细介绍如何免费申请IP地址HTTPS证书,涵盖准备、申请、审核、下载与部署阶段。从确认IP地址、选择CA、注册账户到验证控制权,最后完成证书部署,确保数据传输安全。注意证书有效期较短,需及时续签。
|
2月前
|
安全 物联网 数据建模
IP地址能否申请HTTPS证书?
IP地址可申请HTTPS证书,但需满足特定条件。首先,该IP须为公网IP,具备唯一性和可控性。证书类型限于DV或OV级别,不支持EV。申请过程包括所有权验证及端口开放。适用于服务器间通信及IoT设备等场景。申请时需注意成本、浏览器兼容性和安全性问题。
|
2月前
|
安全 算法 网络协议
网易面试:说说 HTTPS 原理?HTTPS 如何保证 数据安全?
45岁老架构师尼恩在其读者交流群中分享了关于HTTP与HTTPS的深入解析,特别针对近期面试中常问的HTTPS相关问题进行了详细解答。文章首先回顾了HTTP的工作原理,指出了HTTP明文传输带来的三大风险:窃听、篡改和冒充。随后介绍了HTTPS如何通过结合非对称加密和对称加密来解决这些问题,确保数据传输的安全性。尼恩还详细解释了HTTPS的握手过程,包括如何通过CA数字证书验证服务器身份,防止中间人攻击。最后,尼恩强调了掌握这些核心技术的重要性,并推荐了自己的技术资料,帮助读者更好地准备面试,提高技术水平。

热门文章

最新文章