1、判断是否有网络代理(不推荐)

当进行网络请求的时候,客户端判断当前是否设置了代理,如果设置了代理,不允许进行访问,附带判断是否设置代理的代码:

+ (BOOL)getProxyStatus {NSDictionary *proxySettings = NSMakeCollectable([(NSDictionary *)CFNetworkCopySystemProxySettings() autorelease]);NSArray *proxies = NSMakeCollectable([(NSArray *)CFNetworkCopyProxiesForURL((CFURLRef)[NSURL URLWithString:@"http://www.baidu.com"], (CFDictionaryRef)proxySettings) autorelease]);NSDictionary *settings = [proxies objectAtIndex:0];NSLog(@"host=%@", [settings objectForKey:(NSString *)kCFProxyHostNameKey]);NSLog(@"port=%@", [settings objectForKey:(NSString *)kCFProxyPortNumberKey]);NSLog(@"type=%@", [settings objectForKey:(NSString *)kCFProxyTypeKey]);if ([[settings objectForKey:(NSString *)kCFProxyTypeKey] isEqualToString:@"kCFProxyTypeNone"]){//没有设置代理return NO;}else{//设置代理了return YES;}
}

结果:


没有代理:
[20383:1874008] type=kCFProxyTypeNone
(lldb) po proxies
<__NSArrayM 0x1c064e5e0>(
{
kCFProxyTypeKey = kCFProxyTypeNone;
}
)


设置了代理
[20391:1874714] type=kCFProxyTypeHTTP
(lldb) po proxies
<__NSArrayM 0x1c005f8c0>(
{
kCFProxyHostNameKey = “127.0.0.1”;
kCFProxyPortNumberKey = 1380;
kCFProxyTypeKey = kCFProxyTypeHTTP;
}
)


2、SSL Pinning(AFN+SSL Pinning)推荐

SSL Pinning,即SSL证书绑定。通过SSL证书绑定来验证服务器身份,防止应用被抓包。
1、取到证书
客户端需要证书(Certification file), .cer格式的文件。可以跟服务器端索取。
如果他们给个.pem文件,要使用命令行转换

    openssl x509 -inform PEM -in name.pem -outform DER -out name.cer

如果给了个.crt文件,请这样转换:

    openssl x509 -in name.crt -out name.cer -outform der

如果啥都不给你,你只能自己动手了:

openssl s_client -connect www.website.com:443 </dev/null 2>/dev/null | openssl x509 -outform DER > myWebsite.cer**

2、把证书加进项目中
把生成的.cer证书文件直接拖到你项目的相关文件夹中,记得勾选Copy items if neede和Add to targets。
3、参数名意思
AFSecurityPolicy
SSLPinningMode

AFSecurityPolicy是AFNetworking中网络通信安全策略模块。它提供三种SSL Pinning Mode

/**## SSL Pinning ModesThe following constants are provided by `AFSSLPinningMode` as possible SSL pinning modes.enum {AFSSLPinningModeNone,AFSSLPinningModePublicKey,AFSSLPinningModeCertificate,}`AFSSLPinningModeNone`Do not used pinned certificates to validate servers.`AFSSLPinningModePublicKey`Validate host certificates against public keys of pinned certificates.`AFSSLPinningModeCertificate`Validate host certificates against pinned certificates.
*/

AFSSLPinningModeNone:完全信任服务器证书;
AFSSLPinningModePublicKey:只比对服务器证书和本地证书的Public Key是否一致,如果一致则信任服务器证书;
AFSSLPinningModeCertificate:比对服务器证书和本地证书的所有内容,完全一致则信任服务器证书;
选择那种模式呢?
AFSSLPinningModeCertificate:最安全的比对模式。但是也比较麻烦,因为证书是打包在APP中,如果服务器证书改变或者到期,旧版本无法使用了,我们就需要用户更新APP来使用最新的证书。
AFSSLPinningModePublicKey:只比对证书的Public Key,只要Public Key没有改变,证书的其他变动都不会影响使用。
如果你不能保证你的用户总是使用你的APP的最新版本,所以我们使用AFSSLPinningModePublicKey

allowInvalidCertificates

/**Whether or not to trust servers with an invalid or expired SSL certificates. Defaults to `NO`.*/
@property (nonatomic, assign) BOOL allowInvalidCertificates;

是否信任非法证书,默认是NO。
validatesDomainName

/**Whether or not to validate the domain name in the certificate's CN field. Defaults to `YES`.*/
@property (nonatomic, assign) BOOL validatesDomainName;

是否校验证书中DomainName字段,它可能是IP,域名如*.google.com,默认为YES,严格保证安全性。

4、使用AFSecurityPolicy设置SLL Pinning

+ (AFHTTPSessionManager *)manager
{static AFHTTPSessionManager *manager = nil;static dispatch_once_t onceToken;dispatch_once(&onceToken, ^{NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];manager =  [[AFHTTPSessionManager alloc] initWithSessionConfiguration:config];AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModePublicKey withPinnedCertificates:[AFSecurityPolicy certificatesInBundle:[NSBundle mainBundle]]];manager.securityPolicy = securityPolicy;});return manager;
}

扩展
Android 防止抓包
1、单个接口访问不带代理的

 URL url = new URL(urlStr);  urlConnection = (HttpURLConnection) url.openConnection(Proxy.NO_PROXY);

2、OkHttp框架

    OkHttpClient client = new OkHttpClient().newBuilder().proxy(Proxy.NO_PROXY).build();

更多:
https://www.cnblogs.com/zhanggui/p/5754977.html
https://www.jianshu.com/p/23545f8d36d2

iOS 防止抓包(SSL Pinning)相关推荐

  1. iOS 10.3下解决Fiddler代理抓包ssl证书信任问题

    iOS 10.3下解决Fiddler代理抓包ssl证书信任问题 参考文章: (1)iOS 10.3下解决Fiddler代理抓包ssl证书信任问题 (2)https://www.cnblogs.com/ ...

  2. IOS系统抓包之短链-破解双向证书

    前言 上次文章iOS系统抓包入门实践之短链有说道关于常规抓包.路由直连以及单向证书校验的抓包方式,该文章将是在短链抓包中进行补充,主要是针对短链抓包中不太经常用到的双向证书,并进行破解和通过Charl ...

  3. iOS Charles 抓包

    iOS Charles 抓包指南 - 从入门到精通_VictorZhang-CSDN博客_charles ios 下载安装包 Download a Free Trial of Charles • Ch ...

  4. IOS免费抓包神器——Stream

    IOS免费抓包神器--Stream 前言 一.功能介绍 二. 安装步骤 1. App Store商店下载 2. 添加配置VPN 3. 安装CA证书 4. 开始抓包 5. 停止抓包 6. 抓包历史 7. ...

  5. 用RVI方法,对iOS进行抓包

    用RVI方法,对iOS进行抓包 一.创建远程虚拟接口Remote Virtual Interface(RVI) 该方法适用于iOS 5.0以上设备,需要Mac并且安装Xcode. 1.将iOS设备通过 ...

  6. IOS https抓包及10.3.3版本证书不生效问题解决

    Charles安装 HTTP抓包 HTTPS抓包 1. Charles安装 官网下载安装Charles: https://www.charlesproxy.com/download/ 2. HTTP抓 ...

  7. 【Charles】成功解决使用iOS手机抓包时,iOS手机连接网络失败Charles配置方法

    解决方法:原来是因为我换了一台电脑,需要重新安装手机的证书,不能用之前的证书.而且安装完证书以后,Charles没有弹出让我allow的窗口,就直接可以抓包了. 配置方法如下,搬运自同事大佬: 手机和 ...

  8. ios app抓包分析

    1 使用rvictl工具 这是mac下的一条命令.ios usb连mac,然后创建虚拟网络接口. 2 使用wireshark抓包 wireshark可以抓这个虚拟网络接口上的数据包. 转载于:http ...

  9. fiddler安卓模拟器与ios手机抓包

    一.安卓模拟器(雷电模拟器)抓包 1.1fiddler基本配置 1.2导出Fiddler证书 Tools -> Options -> HTTPS -> Actions -> E ...

最新文章

  1. 在LINUX中部署NIS服务器
  2. 路由器与集线器、交换机的根本区别
  3. 彻底吃透Web服务器、容器、应用程序服务器与反向代理
  4. Kotlin 和Spring WebFlux
  5. css未知尺寸的图片的水平和垂直居中
  6. ASP.NET 页面之间传值的几种方式
  7. python中数据类型不同运算不同_Python的基本数据类型与运算
  8. 在java中对于构造函数_在Java语言中,下面有关于构造函数的描述正确的是()。
  9. TikZ学习笔记番外篇: 使用tikzcd包绘制交换图
  10. 深度学习2.08.tensorflow的高阶操作之张量排序
  11. Charles抓包工具的破解以及使用
  12. CIS基线合集-常用版本操作系统、数据库及中间件
  13. 设计一个O(n2)时间的算法,找出由n个数组成的序列的最长单调递增子序列。
  14. 谷歌浏览器关闭系统代理后断网问题
  15. 数据库八股文--藤原豆腐店自用
  16. linux系统离线安装miniconda3 及创建python环境
  17. 文献阅读经验--以基于深度学习的医学图像配准为例
  18. shell——forwhileselect
  19. 云计算 | 截止2022年现行云计算相关国家标准汇总
  20. 用计算机测出人家的信息,NCAE 信息化办公模拟题 含答案

热门文章

  1. win8应用商店安装路径
  2. 朝鲜女性择偶的四大标准
  3. 2023 WordPress 二次元简约风格Sakurairo主题模板
  4. Python_OpenCv--实现视频的剪切、图片合成视频。
  5. H5网址/网站如何打包成苹果包ipa?方法记录
  6. TX2上安装ROS与分布式通信测试
  7. oledbdatareader和OleDbDataAdapter之间的区别
  8. Golang 高性能高可用消息队列框架go-nsq使用
  9. Web项目,网页上传excel文件并解析实战示例
  10. oracle数据库导入sql文件