ReactNative 中使用SSL Pinning防止中间人攻

2021-03-18  本文已影响0人  liuxingzi

如果你看懂了标题的话,我就不多解释这是做什么用的了,
如果你没有看懂标题,估计也不会点进来了。

一句话,就是在使用Charles抓包时,看不到网络请求。

RN侧使用 https://github.com/MaxToyberman/react-native-ssl-pinning 组件

其底层
iOS是用AFNetworking 实现的
安卓是用实现的

使用方法

1、生成证书文件

openssl s_client -connect google.com:443 </dev/null 2>/dev/null | openssl x509 -outform DER > https.cer

其中 google.com 为你要用到的域名

2、iOS
把https.cer文件放到项目中,只要能打包进去就行。

3、RN侧
使用方法

import { fetch } from 'react-native-ssl-pinning'

fetch("https://XXXX.com/test", {
    method: "GET",
    // body: body,
    // // your certificates array (needed only in android) ios will pick it automatically
    pkPinning: true,
    sslPinning: {
      certs: ["https"] // your certificates name (without extension), for example cert1.cer, cert2.cer
    },
    headers: {
      Accept: "application/json; charset=utf-8", "Access-Control-Allow-Origin": "*",
    }
  })
    .then(response => {
      console.log(`response received ${JSON.stringify(response)}`)
    })
    .catch(err => {
      console.log(`error: ${err}`)
    })

结束了,
可以使用Charles 去抓包试一下,如果不能看到真实的请求数据,就OK了

参考:
[1] APP安全机制(十七) —— 阻止使用SSL Pinning 和 Alamofire的中间人攻击
AFNetworking设置SSL链接

上一篇下一篇

猜你喜欢

热点阅读