App中HTTPS设置

本文介绍了在使用AFNetworking 2.6版本的iOS应用中启用HTTPS的步骤,包括在Info.plist添加App Transport Security Settings并设为YES,以及两种方法进行证书配置。通过这些操作,可以解决默认不支持HTTPS请求的问题。同时,作者意识到自己对HTTPS和SSL协议的理解不足,计划进行深入学习。

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

为了安全方面的考虑,项目想改用HTTPS进行数据传输.目前项目所用的网络请求是AFN2.6版本的,默认不支持HTTPS网址进行数据请求,错误代码:

2016-01-20 08:49:00.780 TestHttps[1494:30088] CFNetwork SSLHandshake failed (-9824)
2016-01-20 08:49:00.781 TestHttps[1494:30088] NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9824)
2016-01-20 08:49:00.782 TestHttps[1494:29950] error==Error Domain=NSURLErrorDomain Code=-1200 "An SSL error has occurred and a secure connection to the server cannot be made." UserInfo={_kCFStreamErrorCodeKey=-9824, NSLocalizedRecoverySuggestion=Would you like to connect to the server anyway?, NSUnderlyingError=0x7ff7f2c3d260 {Error Domain=kCFErrorDomainCFNetwork Code=-1200 "An SSL error has occurred and a secure connection to the server cannot be made." UserInfo={NSErrorFailingURLStringKey=https://example.com/, NSLocalizedRecoverySuggestion=Would you like to connect to the server anyway?, _kCFNetworkCFStreamSSLErrorOriginalValue=-9824, _kCFStreamPropertySSLClientCertificateState=0, NSLocalizedDescription=An SSL error has occurred and a secure connection to the server cannot be made., _kCFStreamErrorDomainKey=3, NSErrorFailingURLKey=https://example.com/, _kCFStreamErrorCodeKey=-9824}}, NSLocalizedDescription=An SSL error has occurred and a secure connection to the server cannot be made., NSErrorFailingURLKey=https://example.com/, NSErrorFailingURLStringKey=https://example.com/, _kCFStreamErrorDomainKey=3}

根据网上资料进行修改:
在Info.plist添加字段App Transport Security Settings,设置为YES
一:第一种方法是在网络请求类中添加

AFSecurityPolicy * policy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];
policy.allowInvalidCertificates = YES;
policy.validatesDomainName = NO;
manager.securityPolicy = policy;

二:第二种方法是
(1)下载网站的证书导入工程
(2)新建类方法

//自定义安全策略
+ (AFSecurityPolicy*)customSecurityPolicy
{
    // /先导入证书
    NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"example" ofType:@"cer"];//证书的路径
//    NSString * cerPath = [[NSBundle mainBundle]pathForResource:@"https" ofType:@"cer"];

//    NSLog(@"%@",cerPath);
    NSData *certData = [NSData dataWithContentsOfFile:cerPath];
//    NSLog(@"%@",certData);
//    NSSet * certSet = [[NSSet alloc] initWithObjects:certData, nil];

    // AFSSLPinningModeCertificate 使用证书验证模式
    AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];

    // allowInvalidCertificates 是否允许无效证书(也就是自建的证书),默认为NO
    // 如果是需要验证自建证书,需要设置为YES
    securityPolicy.allowInvalidCertificates = YES;

    //validatesDomainName 是否需要验证域名,默认为YES;
    //假如证书的域名与你请求的域名不一致,需把该项设置为NO;如设成NO的话,即服务器使用其他可信任机构颁发的证书,也可以建立连接,这个非常危险,建议打开。
    //置为NO,主要用于这种情况:客户端请求的是子域名,而证书上的是另外一个域名。因为SSL证书上的域名是独立的,假如证书上注册的域名是www.google.com,那么mail.google.com是无法验证通过的;当然,有钱可以注册通配符的域名*.google.com,但这个还是比较贵的。
    //如置为NO,建议自己添加对应域名的校验逻辑。
    securityPolicy.validatesDomainName = NO;

    securityPolicy.pinnedCertificates = @[certData];

    return securityPolicy;
}

(3)修改AFN源码,如图
这里写图片描述
这样就可以用https网址进行数据请求了.

后记:HTTPS协议还有SSL还很不清楚,计算机基础差,以后急需补充.
参考资料:
http://www.jianshu.com/p/20d5fb4cd76d
http://oncenote.com/2014/10/21/Security-1-HTTPS/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值