iOS Error Domain=NSURLErrorDomain Code=-999 "cancelled" 解决办法

本文介绍了一个使用AFNetworking实现SSL Pinning的例子,包括如何导入证书、设置不同的SSL Pinning模式,并解决了从AFSSLPinningModeCertificate模式转换到AFSSLPinningModeNone模式的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先上我这儿成功的代码

- (void)testATS {
    //先导入证书,找到证书的路径
    NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"cert" ofType:@"cer"];
    NSData *certData = [NSData dataWithContentsOfFile:cerPath];
    
    //AFSSLPinningModeNone 这个模式表示不做 SSL pinning,只跟浏览器一样在系统的信任机构列表里验证服务端返回的证书。若证书是信任机构签发的就会通过,若是自己服务器生成的证书,这里是不会通过的。
    //AFSSLPinningModeCertificate 这个模式表示用证书绑定方式验证证书,需要客户端保存有服务端的证书拷贝,这里验证分两步,第一步验证证书的域名/有效期等信息,第二步是对比服务端返回的证书跟客户端返回的是否一致。
    //AFSSLPinningModePublicKey 这个模式同样是用证书绑定方式验证,客户端要有服务端的证书拷贝,只是验证时只验证证书里的公钥,不验证证书的有效期等信息。只要公钥是正确的,就能保证通信不会被窃听,因为中间人没有私钥,无法解开通过公钥加密的数据。
    
    AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];
    if (certData) {
        securityPolicy.pinnedCertificates = @[certData];
    }
    AFHTTPSessionManager *sessionManager = [AFHTTPSessionManager manager];
    [sessionManager setSecurityPolicy:securityPolicy];
    sessionManager.responseSerializer = [AFJSONResponseSerializer serializer];
    sessionManager.responseSerializer.acceptableContentTypes = [sessionManager.responseSerializer.acceptableContentTypes setByAddingObject:@"text/html"];

    NSString *urlStr = @"https://huifang.tech/info.php";
    [sessionManager GET:urlStr parameters:nil success:^(NSURLSessionDataTask *task, id responseObject) {
DDLog(@"responseObject = %@", responseObject);
    } failure:^(NSURLSessionDataTask *task, NSError *error) {
        DDLog(@"error = %@", error);
    }];
}

因为之前使用了 AFSSLPinningModeCertificate 模式
AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];
改成现在的 AFSSLPinningModeNone 模式,解决问题。
因为我的证书是 Symantec 的 DV SSL 证书,所以 securityPolicy 的 allowInvalidCertificates 和 validatesDomainName 属性都是默认值?。自签的还没试过。
参考链接:

  1. AFNetworking源码解析<三>

  2. stackoverflow

蛋疼的自己的 hexo 搭建的博客很久没弄,今天给弄成 404 了= =。。。先放这儿存个档吧。

2016-12-07 10:59:52更新:
博客好了Y(^o^)Y链接

07-31 10:23:54.451004 6920 12272 D PTC.APPCORE.CoreService: request isAsync: false, binder: null 07-31 10:23:54.451012 6920 12272 D PTC.DISC.DiscoveryRequestDispatcher: -- service dispatcher -- dispatch request with method(stopDiscovery) 07-31 10:23:54.451065 6920 12272 I PTC.CONN.ConnectionCoordinator: -- ACCEPT CONNECTION -- removeWakeupOptions: AgentClient(agentId=37175051, channelName=, appName=, pkg=com.heytap.accessory, pid=24286, role=ACCEPTED, connectionId=0) 07-31 10:23:54.451087 6920 12272 D PTC.DISC.DiscoveryRequestServerImpl: -- service dispatcher -- stopDiscovery: cliK=com.heytap.accessory:24286:37175051 07-31 10:23:54.451096 6920 22271 D PTC.CONN.ConnectionCoordinator: -- ACCEPT CONNECTION -- response of accept: agentId()-isSuccess(false) null null 07-31 10:23:54.451113 6920 12272 D PTC.DISC.DeviceDiscovery: Stop device discovery, client=DiscoveryClient(id=37175051, pkg=com.heytap.accessory, pid=24286) 07-31 10:23:54.451138 6920 12272 I PTC.DISC.LanDiscover: stopDiscovery, client=DiscoveryClient(id=37175051, pkg=com.heytap.accessory, pid=24286) 07-31 10:23:54.451148 6920 12272 I PTC.DISC.DiscoverContainer: Stop discovery, remove discovering client=DiscoveryClient(id=37175051, pkg=com.heytap.accessory, pid=24286), successCount=1, failureCount=0 07-31 10:23:54.451154 6920 12272 D PTC.DOMAIN.PTC.ConnResults onSuccess: it: kotlin.Unit 07-31 10:23:54.451168 6920 22271 D PTC.CONN.ScpConnectEventStatistics: end endScpConnectEvent: ScpConnectEvent,connectRole=1, keyType=BOTH, connectType=8, currentDevCategory=8, targetDevCategory=11, activeMode=0, connectResult=0, connectStartTime=1753928633071, connectFailReason=, connectEndTime=0, connectScpCost=0, connectTransportCost=0, connectFullCost=0, scpStage=, key = E64A1C11F47Bserver 07-31 10:23:54.451186 6920 22271 D PTC.CONN.ScpConnectEventStatistics: end endScpConnectEvent: error code: 2000 07-31 10:23:54.451198 6920 22271 D PTC.CONN.ScpConnectEventStatistics: handleScpConnectResult scpConnect result is: 0 07-31 10:23:54.451437 6920 22269 W PTC.CONN.InterconnectServiceSmartNetworking: -- interconnect networking -- o0 was cancelled 07-31 10:23:54.451503 24286 24445 I PTC.SERVICE.IosShareDiscovery: -- SHARE-DISC -- stopDiscovery serviceID=tap_share_ios result=true 07-31 10:23:54.451604 6920 22270 D PTC.DISC.IosHostApduService: -- NFC-DISC -- enableIosNfcDiscovery: false 07-31 10:23:54.451634 6920 22274 W PTC.CONN.InterconnectServiceSmartNetworking: -- interconnect networking -- o0 was cancelled 07-31 10:23:54.451708 6920 22269 D PTC.CONN.InterconnectServiceSmartNetworking: -- interconnect networking -- closeInternal (code:0, reason:) 07-31 10:23:54.451758 6920 22269 D PTC.CONN.InsecureSppConnector: call close. 07-31 10:23:54.451781 6920 22269 D PTC.CONN.FastInsecureSppServer: -- InsecureSppConnector Server -- outside call stopServer 07-31 10:23:54.451787 6920 22269 D PTC.CONN.FastInsecureSppServer: -- InsecureSppConnector Server -- closeServerSocket 07-31 10:23:54.451831 6920 22269 D PTC.CONN.ConnectionCoordinator: -- ACCEPT CONNECTION -- response of accept: agentId()-isSuccess(false) null null 07-31 10:23:54.451889 6920 22269 D PTC.CONN.ScpConnectEventStatistics: end endScpConnectEvent: ScpConnectEvent,connectRole=1, keyType=BOTH, connectType=8, currentDevCategory=8, targetDevCategory=11, activeMode=0, connectResult=1, connectStartTime=1753928633071, connectFailReason=, connectEndTime=0, connectScpCost=0, connectTransportCost=0, connectFullCost=0, scpStage=, key = E64A1C11F47Bserver 07-31 10:23:54.451894 6920 22269 D PTC.CONN.ScpConnectEventStatistics: end endScpConnectEvent: error code: 0 07-31 10:23:54.451897 6920 22269 D PTC.CONN.ScpConnectEventStatistics: handleScpConnectResult scpConnect result is: 1 07-31 10:23:54.451902 6920 22269 D PTC.CONN.ScpConnectEventStatistics: scpConnect result is: 1 07-31 10:23:54.451904 6920 22269 D PTC.CONN.ScpConnectEventStatistics: end endScpConnectEvent: error is 0 07-31 10:23:54.451918 6920 22269 I PTC.DISC.DiscoveryRequestServerImpl: -- service dispatcher -- on accept connection. key: com.heytap.accessory:accept-tap_share(wakeup) 07-31 10:23:54.451933 6920 22269 D PTC.DISC.DiscoveryRequestServerImpl: -- service dispatcher -- accept connection times(0) 07-31 10:23:54.451942 6920 22269 D PTC.DISC.DiscoveryRequestServerImpl: -- service dispatcher -- service advertising: start to listen the accept scp connection event with client 07-31 10:23:54.452028 6920 22269 D PTC.CONN.ScpConnectEventStatistics: start upload scpConnectEvent = ScpConnectEvent,connectRole=1, keyType=BOTH, connectType=8, currentDevCategory=8, targetDevCategory=11, activeMode=0, connectResult=0, connectStartTime=1753928634452, connectFailReason=, connectEndTime=0, connectScpCost=0, connectTransportCost=0, connectFullCost=0, scpStage=, key is=E64A1C11F47Bserver 07-31 10:23:54.452601 4622 4622 I SystemUi--Statusbar: PhoneStatusBarPolicy-->updateLocationFromController isLocationActive:false 07-31 10:23:54.452697 6593 6613 W LOG_FLOWCTRL: ==LOGS OVER PROC QUOTA(300), rows(234) bytes(16771) com.android.nfc u(0) l(0) t(0) c(0) DROPPED== 07-31 10:23:54.452697 6593 6613 D VendorNfcService: enableNfcShareMode, enable == false 07-31 10:23:54.453099 6920 22271 D PTC.CONN.ScpConnectEventStatistics: scpConnect result is: 1 07-31 10:23:54.453138 6920 22271 D PTC.CONN.ScpConnectEventStatistics: end endScpConnectEvent: error is 0 07-31 10:23:54.453154 6920 22271 I PTC.DISC.DiscoveryRequestServerImpl: -- service dispatcher -- on accept connection. key: com.heytap.accessory:24286:253565444 07-31 10:23:54.453168 6920 22271 D PTC.DISC.DiscoveryRequestServerImpl: -- service dispatcher -- accept connection times(0) 07-31 10:23:54.453188 6920 22271 I PTC.DISC.DiscoveryRequestServerImpl: -- service dispatcher -- service advertising: stop listening the accept scp connection event with client,connectionId:748046045 07-31 10:23:54.453253 6920 22269 D PTC.DISC.DiscoveryRequestServerImpl: -- service dispatcher -- onRequestStarted connectId:1716302511 07-31 10:23:54.453266 6920 22271 D PTC.CONN.R8$$SyntheticClass: cancel scp. connectId: 748046045 07-31 10:23:54.453275 6920 22269 D PTC.CONN.InterconnectServiceSmartNetworking: -- interconnect networking -- acceptInternal 07-31 10:23:54.453290 6920 22271 D PTC.CONN.R8$$SyntheticClass: cancel scp: 748046045 not found 07-31 10:23:54.453528 6920 22269 W PTC.CONN.BluetoothConnector: Bluetooth is unable, please check! 07-31 10:23:54.454138 5252 5372 V AppProvider_query: com.heytap.accessory getSecureSetting(key_settings_strengthen_service_oaf, 10105) 07-31 10:23:54.454609 6920 22269 I SettingImpl: domestic quick device toggle value is 1 07-31 10:23:54.455102 5252 5372 V AppProvider_query: com.heytap.accessory getSecureSetting(key_settings_strengthen_service_oaf, 10105) 07-31 10:23:54.455543 6920 22269 I SettingImpl: domestic quick device toggle value is 1 07-31 10:23:54.455600 6920 22269 D PTC.CONN.InsecureSppConnector: call acceptConnection: EE15 07-31 10:23:54.455613 6920 22269 D PTC.CONN.FastInsecureSppServer: -- InsecureSppConnector Server -- acceptConnection serviceInfo: tap_share, com.heytap.accessory 07-31 10:23:54.455896 6920 22271 D PTC.NFC.ScpManager: -- SCP -- registerScpProcessor: agentAddress=****866B 07-31 10:23:54.457229 6593 6613 I TapToShareEvent: no setConfig before, set rf to default 07-31 10:23:54.457399 6593 6613 D NfcUpdateConfigUtil: Updating configuration in file keyPara: default 07-31 10:23:54.457531 6593 6613 D NfcUpdateConfigUtil: Updating configuration in file configUpdateFile: /data/vendor/nfc/libnfc_default_config.conf 07-31 10:23:54.457960 4622 4622 D RowAnimatorExtImpl: init:tx,view:StatusBarIconView(slot='logging' alpha=0.0 icon=StatusBarIcon(icon=Icon(typ=RESOURCE pkg=com.android.systemui id=0x7f08190e) visible user=0 ) visibleState=ICON iconColor=#0 staticDrawableColor=#0 decorColor=#ccffffff animationStartColor=#0 currentSetColor=#0 notification=null),translationX: -56.0 0.0 07-31 10:23:54.458679 4622 4622 D SystemUi--Statusbar: StatBatteryMeterView-->onHiddenChanged false, false disable=false, lastShowStyle=1 07-31 10:23:54.458224 6593 6593 E NxpNfcService: Setting configs for Transit 07-31 10:23:54.458762 4622 4622 D SystemUi--Statusbar: StatBatteryMeterView-->onHiddenChanged showStyle:1. 高通日志解释
最新发布
08-12
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值