首页 > 其他分享 >iOS 防止charles抓包

iOS 防止charles抓包

时间:2022-12-05 12:35:54浏览次数:40  
标签:return 证书 charles iOS AFSecurityPolicy let certificates AFSSLPinningModePublicKe

方案一:检查手机Wifi是否设置了代理

    public func fetchHttpProxy() -> Bool {
        guard let proxy = CFNetworkCopySystemProxySettings()?.takeUnretainedValue() else { return false }
        guard let dict = proxy as? [String: Any] else { return false }
        guard let HTTPProxy = dict["HTTPProxy"] as? String else { return false }
        if(HTTPProxy.count>0){
            return true;
        }
        return false;
    }

 1.以场景接口为例,设置了代理检测,手机开启代理,存在代理就直接返回,请求失败。

    func getSelectedFamilyDeviceSomeInfo(parameters : Any?, succeed : @escaping([String : Any]?) -> (), failure : @escaping(Error?) -> ()) {
        let requestUrl:String = SEVER_URL.appending("/developStage/devicegroup/v2/group/someInfo").addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)!
        print(parameters ?? "")
        NSLog("RequestUrl : "+requestUrl)
        
        if self.fetchHttpProxy() {
            print("++++++++++++设置了代理,不让请求=======")
            failure("设置了代理" as? Error)
            return
        }else{
            print("++++++++++++没设置代理,自由请求=======")
        }

        
        // 成功闭包
        let successBlock = { (task: URLSessionDataTask, responseObj: Any?) in
            succeed(responseObj as? [String : Any])
        }
        // 失败的闭包
        let failureBlock = { (task: URLSessionDataTask?, error: Error) in
            failure(error)
        }
        //accesstoken 加入请求头
        getAccessToken(success: {
            self.setHttpHeaderBasicProperty()
            self.post(requestUrl, parameters: parameters, progress: nil, success: successBlock, failure: failureBlock)
        }) {
            failure("Please sign in first" as? Error)
        }
    }

 

 

 2.注释代理检测,请求正常,界面正常展示,能抓取到场景接口数据

 

 

 方案二:对证书的验证

1.客户端需要证书(Certification file), .cer格式的文件。(找服务器要,有可能需要转化证书格式)

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

3、参数名意思

AFSecurityPolicy

SSLPinningMode

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

/**

 ## SSL Pinning Modes

 

 The 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

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

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

validatesDomainName

1 2 3 4 /**  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

1 2 3 4 5 6 7 8 9 10 11 12 13 14 + (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; }

标签:return,证书,charles,iOS,AFSecurityPolicy,let,certificates,AFSSLPinningModePublicKe
From: https://www.cnblogs.com/laolitou-ping/p/16951953.html

相关文章

  • 记一次google手机恢复出厂设置到root抓包全过程
    前言开始因为手机密码忘记了,不想重置,不然找店家root的工具都没了,自己也不会googleroot的操作,之前听说还挺麻烦的。操作了半天好了,确实是挺麻烦的,做个记录。 一、恢复......
  • 数据请求 ajax axios
    leturl="https://www.fastmock.site/mock/39aa306dc9dec321fb0237a30b3040d2/api"//使用jqueryajax获取数据$.ajax({type:"get",//请求方式......
  • [Android开发学iOS系列] 和一个真正iOS开发的区别?
    和一个真正iOS开发的区别?学习iOS的这段时间,我一直在思考和感受着自己和一个真正做了几年iOS的dev之间的区别.同时也在反向思考,我自己和一个新学Android的人,又有什......
  • axios二次封装
    https://blog.csdn.net/weixin_54930261/article/details/126658948?spm=1001.2101.3001.6650.3&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIS......
  • 跳一跳 Python小程序 小白指南 Android和iOS都可以用
    小白一枚,最近网上比较火的微信“跳一跳”小程序,刷爆了朋友圈,之后怀着好奇心在网上看到有大神自己写了一个python脚本,于是打算借来玩一下,倒腾了半天,各种配置,下面记录一下出现......
  • 生成IOS app专用密码教程
     1.如果没有APP账号的话,点此链接复制到浏览器打开appleid.apple官网,然后点击“创建您的APPID”。 填写完下面资料,密码的注意事项在红圈区域。......
  • iOS上架之App Uploader辅助工具激活码获取
    1. 点击图示的激活,获取激活码。2. 如图示,点击链接:​​http://www.applicationloader.net/purchase.html​​。会跳转购买激活码页面,购买成功即可生成激活码,购买的激活码越......
  • iOS上架App Store之苹果发布证书的申请流程
     iOS发布证书用于上架AppStore,当开发好APP后需要上架就要用iOS底部证书有p12及mobileprovision两个文件去打包!只有用iOS发布证书打包的ipa才能上传到AppStore一......
  • iOS上架之hubuilder打包Vue项目
    1.官网下载最新的HBuilderx。2.准备好一个包含manifest.json的Vue项目,打开进行详细设置,设置完成后,点击保存。3.首先去AppUploader找到开发证书(开发类型是带development的),点......
  • ​iOS上架之HBuider打包简单项目及注意事项
     1.官网下载最新的HBuilderx。​ 2.准备好一个包含manifest.json的Vue项目,打开进行详细设置,设置完成后,点击保存。 ​​3.首......