Mobile是怎么用SSL pinning防止抓包的

通常的https请求是这样的

image.png

这个过程可以使用SSL加密/TLS加密来实现,我们先简单地了解一下这个通信的过程,会对了解SSL pinning有所帮助。主要是了解证书发送的过程。

为什么能通过Charles能抓包?

当移动应用程序与服务器通信时,它们通常使用 SSL 来保护传输的数据免受窃听和篡改。默认情况下应用程序中使用的 SSL,只要服务器具有操作系统信任库信任的证书,都是默认为安全信任的(证书为操作系统附带的证书颁发机构列表)。

image.png
Charles能够抓包主要依靠的是以下几个步骤:
  1. 在建立通信的中间过程中,服务器把CA证书发给mobile的时候,会被Charles拦截(这里已经拿到服务器的公钥了),并替换成Charles包装好的带着自己公钥假的CA证书,再发给mobile。
  2. mobile拿到包装好的Charles假证书,在本地系统的证书列表校验通过之后,会拿着证书里面的公钥加密对称密钥,发给服务器。
  3. 发给服务器的时候又被Charles拦截了,它用自己的私钥解密,得到mobile的对称密钥。再用步骤1得到的服务器公钥加密自己生成的假的对称密钥,发给服务器。
  4. 就依靠前面几步建立通信,然后之后的每一次通信都会被中间挟持。

这也是为什么一开始使用Charles抓包的时候,是需要安装并且信任它的证书的原因。

大概是这样:

image.png

简单来说,就是证书被替换了,中间通信的时候被挟持,Charles和服务器建立通信之后用的是Charles的对称公钥在通信,而Charles和mobile建立通信之后用的是mobile的对称公钥在通信,像这样

image.png

SSL pinning是怎么避免中间人攻击

使用 SSL pinning,应用程序可以先配置证书在本地,每当发起网络请求建立连接到服务器时,它都会先把拿到的服务器证书与本地的固定证书进行比较,当且当它们匹配的时候,才会认为这个服务器是受信任的,并建立 SSL 连接。

证书校验失败大致过程如下

图片1.png

简单来说,就是服务器必须返回带有mobile预置好的证书,才能通过本地证书的校验,不然是建立不了通信的。

image.png

Reference documents

https://www.huaweicloud.com/zhishi/ssl003.html
https://www.guardsquare.com/blog/ios-ssl-certificate-pinning-bypassing

你可能感兴趣的:(Mobile是怎么用SSL pinning防止抓包的)