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链接