IOS Https适配摸索

作者: o翻滚的牛宝宝o | 来源:发表于2016-07-29 16:07 被阅读16417次
https封面

在WWDC 2016开发者大会上,苹果宣布了一个最后期限:到2017年1月1日 App Store中的所有应用都必须启用 App Transport Security安全功能。也就是说,自2017年起,网络请求必须由http改成https。正因为这个原因,我也打算尝试下适配Https网络请求。由于先前没有配置服务器经验,网上说的也很不详细,因此踩了不少坑,足足花了一天的时间。现在我把我配置的流程写下来,希望后来人能少走点弯路。(网上教程有,但是写得很乱,难理解,这里我打算用最通俗的语言来描述。)

概念误区:HTTPS和语言无关


一开始,我以为https应该像处理http报头一样,要写什么PHP代码(服务器语言是PHP),把客户端传来的证书经过处理验证什么的,然后再返回处理结果(类似于Token验证)。因此,一开始我就搜PHP怎么处理HTTPS请求,结果都是介绍怎么用PHP发送HTTPS请求的。经过一段时间纠结,我才意识到HTTPS的处理并不需要PHP做什么,你的服务器(比如apache)就已经帮你做好验证了,你只需要像接收http请求一样处理数据就可以了,也就是说,服务器增加HTTPS并不需要在代码中做什么,只要服务器配置下就好

关于HTTPS握手流程我觉得还是应该了解下,可以参考这份资料:https握手流程

简单得说就是客户端向服务器发起需求 ,服务器把证书发给客户端,客户端验证下证书是否合法,然后用证书的数据加密传输数据给服务器,服务器解密

生成证书文件


看了上面的原理就知道,要HTTPS传输首先得有证书。在生成证书这方面我也遇到了很大的坑,几乎所有的网站都要生成2个证书,server.pemclient.pem。一开始我把server.pem配置到服务器上,把client.pem给AFNetwoking,结果怎么都通过不了验证!后来我发现只要AFNetworing使用server.pem验证就可以了,也就是说只要一份证书就行了。。。(真的不知道为什么要2份证书,如有大神欢迎指出)。

下面我将命令行代码贴出来,主要参考这篇文章:参考文章

//第一步,为服务器端和客户端准备公钥、私钥
# 生成服务器端私钥
openssl genrsa -out server.key 1024
# 生成服务器端公钥
openssl rsa -in server.key -pubout -out server.pem

//第二步,生成 CA 证书
# 生成 CA 私钥
openssl genrsa -out ca.key 1024
# X.509 Certificate Signing Request (CSR) Management.
openssl req -new -key ca.key -out ca.csr
# X.509 Certificate Data Management.
openssl x509 -req -in ca.csr -signkey ca.key -out ca.crt

在第二步时会出来一个填写资料的界面(我已经填好大家可以参考,有些地方可以空着)

Country Name (2 letter code) [AU]:CN
State or Province Name (full name) [Some-State]:Zhejiang
Locality Name (eg, city) []:Hangzhou
Organization Name (eg, company) [Internet Widgits Pty Ltd]:My CA
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:localhost
Email Address []:

这里有点要注意, Common Name (e.g. server FQDN or YOUR name) []: 这一项,是最后可以访问的域名,我这里为了方便测试,写成 localhost ,如果是为了给网站生成证书,需要写成 xxxx.com 。

//第三步,生成服务器端证书
# 服务器端需要向 CA 机构申请签名证书,在申请签名证书之前依然是创建自己的 CSR 文件
openssl req -new -key server.key -out server.csr
# 向自己的 CA 机构申请证书,签名过程需要 CA 的证书和私钥参与,最终颁发一个带有 CA 签名的证书
openssl x509 -req -CA ca.crt -CAkey ca.key -CAcreateserial -in server.csr -out server.cr

同样会有信息填写,照旧写就好了。

第四步,生成cer文件
使用openssl 进行转换
openssl x509 -in server.crt -out server.cer -outform der

如果完成,就会得到这么多文件


证书文件

配置服务器


为了方便,我是以mac本地电脑做服务器,使用的是XAMPP搭建的服务器使用的是apache。在其他服务器上应该就是文件路径位置不一样,其他应该是一样的。如果有些服务器没开启ssl,可以网上搜索怎么开启。

修改httpd-ssl.conf文件 把server.crt和server.key的路径修改对就好了
SSLCertificateFile /apache/conf/server.crt  
SSLCertificateKeyFile /apache/conf/server.key 

由于我的服务器默认开启ssl,因此我就修改下证书路径就好了。
我们来浏览器访问下

浏览器访问https

按我标出的框来访问证书,就可以看见我们刚才自己填的数据

服务器返回的证书

因为不同服务器配置不同,不能一概而论,所以大家还是根据自己服务器的情况再配置。

配置AFNetworking


这里直接上代码

+ (AFSecurityPolicy*)customSecurityPolicy
{
    // /先导入证书
    NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"server" ofType:@"cer"];//证书的路径
    NSData *certData = [NSData dataWithContentsOfFile:cerPath];

    // 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;
}

+ (void)post:(NSString *)url params:(NSDictionary *)params success:(void (^)(id))success failure:(void (^)(NSError *))failure
{
    // 1.获得请求管理者
    AFHTTPSessionManager *mgr = [AFHTTPSessionManager manager];
    // 2.申明返回的结果是text/html类型
    mgr.responseSerializer = [AFHTTPResponseSerializer serializer];

    // 加上这行代码,https ssl 验证。
    [mgr setSecurityPolicy:[NetworkHelpManager customSecurityPolicy]];

    // 3.发送POST请求
    [mgr POST:url parameters:params
  success:^(NSURLSessionDataTask *operation, id responseObj) {
          if (success) {
            success(responseObj);
         }
      } failure:^(NSURLSessionDataTask *operation, NSError *error) {
          if (failure) {
              failure(error);
          }
      }];
}

还要记得把证书添加到项目中来哦

项目中的证书

下面要介绍下证书的验证模式 AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];

  • AFSSLPinningModeNone

不做任何验证,只要服务器返回了证书就通过

  • AFSSLPinningModePublicKey

只验证公钥部分,只要公钥部分一致就验证通过,如图所示,红色框起来的部分只要一致就通过


客户端和服务器端证书对比
  • AFSSLPinningModeCertificate

除了公钥外,其他能容也要一致才能通过验证。

配置结果


下面我们用Charles抓包看看是否成功加密了。

抓包结果

返回的数据依稀能看出我们证书里的内容,但是数据已经加密了。

总结


配置https其实并不难,既然迟早要更新还不如早一点配置好。其实很多时候都是我们不愿意做,而不是不能做。多一点耐心,多一点实践,就能多一点突破。

我是翻滚的牛宝宝,欢迎大家评论交流~

相关文章

  • IOS Https适配摸索

    在WWDC 2016开发者大会上,苹果宣布了一个最后期限:到2017年1月1日 App Store中的所有应用都必...

  • iOS适配HTTPS

    一切为了迎合苹果 在WWDC 2016开发者大会上,苹果宣布了一个最后期限:到2017年1月1日 App Stor...

  • iOS https适配

    首先,如果你的项目有很多的H5页面,并且用的还不是普通的静态页面,请保持 这样的设置,因为h5页面包含很多,并且有...

  • iOS适配Https

    由于苹果是17年的1月1日期审核要求强制开启ATS,所以各个应用的程序员都已经开始了https的适配。下面介绍一下...

  • ios https适配

    此处两个方法都值对服务端进行认证 如果需要客户端认证 请看参考链接*当前环境为 swift3.0 Xcode8...

  • iOS适配HTTPS

    自2017年1月1日起,提交到App Store的所有APP必须遵循ATS(App Transport Secur...

  • iOS 适配Https

    一、简单介绍下info.plist中的配置设置 NSAllowsArbitraryLoadsInMedia (设置...

  • iOS适配https

    http://my.oschina.net/non6/blog/290175

  • iOS https 适配

    http://blog.csdn.net/zhouzhoujianquan/article/details/525...

  • iOS HTTPS适配

    快速适配直接看下面的示例代码吧,概念有点多。。。 SSL/TLS协议运行机制概述图解SSL/TLS协议 一、单向认...

网友评论

  • Minlay:你好作者,最近在配置https出了一点小问题请教一下,服务器只要返回证书就行,不做任何验证,域名也改成了https,但是访问报Error Domain=NSURLErrorDomain Code=-999 这个怎么破,证书的域名和网络请求的域名不一致,这需要修改证书吗
  • Ko_Neko:也就是说 如果有后台的话只要让后台给server.cer , 然后拖进项目,再做AFN的适配就ok了对吧~
  • 6cfccf97eac3:楼主请教个问题。
    1、https能正常发请求收到返回报文的正常使用 和 安全https单向验证 ,这两个说法是一个意思吗?
    2、现在要做https单向验证,但因为修改别人代码用的是ASI不是AFNet,所以一直找不到方案。我没有把服务器证书倒入工程,现在能够正常使用。这是已经https单向验证了吗?,如果没有应该怎么验证?
  • 春暖花已开:已转载,并标明了文章来源。感谢分享~~~
  • 大刀阔斧007:楼主,那你上面对af的处理代码,是单向还是双向认证啊?
    大刀阔斧007:@o翻滚的牛宝宝o 请问一下,server.cer是放在app包里,如果这个证书失效了怎么办?得发新版强制更新app版本?
  • SmithJackyson:楼主,你试过项目设置NSAllowsArbitraryLoads为yes,项目可以正常发送http请求,后面将这个字段去掉后,还是可以正常发送http请求,不是应该默认禁止吗
    o翻滚的牛宝宝o:@SmithJackyson 特地去尝试了一下,发现不设置不能请求http,怀疑你改错文件了。我的xcode版本是8.2.1
    SmithJackyson:@o翻滚的牛宝宝o 对,直接把NSAllowsArbitraryLoads键删除了,把项目clean了一下,在模拟器上运行还是可以访问http链接
    o翻滚的牛宝宝o:应该是默认禁止的。你确定你改对info.plist文件了么?
  • LYSNote:你好, 我的是企业级的帐号,因此是不需要发布上线的, 那我这块的对https,也需要适配吗
  • bc59c98e1522:项目中没有用到AF的怎么处理呢?这个项目是比较早期的,现在维护这个APP,写框架的一早就撒手啦。
  • b232749c73dc:受教了,谢谢大牛。
  • L05T:您好,我的项目AFN会崩溃到这个AFN的“AFSecurityPolicy“这个类的”addObject:(__bridge_transfer id)SecCertificateCreateWithData“这个方法 请问您有没有遇到过,
    清宵寒夜:可能证书base64加密了去掉就好了
    o翻滚的牛宝宝o:@L05T 看提示应该是证书路径错了,看看有没有拖入工程中
  • 林凌子文:请问下我现在做的app的接口都是https的,但是后端没给我证书,我直接用AFN也能使用接口,启用了App Transport Security后还是接口还是可以用。想问下这样还能过吗。对这个不是很了解,好像大部分教程都是要证书的,我的偏偏没用。
    o翻滚的牛宝宝o:@林凌子文 官方也没明确说明,目前要不要认证的证书还需要等官方发布公告
  • 16bc531efe4a:大神好,我们是公司买的证书,在服务那端配置好了。我这 iOS 端直接改成 https 的接口了,另外还需要添加什么代码吗?
    我把AllowsArbitraryLoads 改成 no 收不到数据,yes 就可以了。
    o翻滚的牛宝宝o:@酒醉了温柔 最好加上验证,文章里有的
  • 一个脱离了高级趣味的人e:你好,请问适配https 对 sd_webImage 有没有影响 ?sd_webImage 需要像AFT 那样验证证书吗?
  • c073fb8a0b8d:请问,自签名证书是否可以通过苹果审核?
    o翻滚的牛宝宝o:@阿wu 不一定。。。
  • 李白太白://第三步,生成服务器端证书
    # 服务器端需要向 CA 机构申请签名证书,在申请签名证书之前依然是创建自己的 CSR 文件
    openssl req -new -key server.key -out server.csr
    # 向自己的 CA 机构申请证书,签名过程需要 CA 的证书和私钥参与,最终颁发一个带有 CA 签名的证书
    openssl x509 -req -CA ca.crt -CAkey ca.key -CAcreateserial -in server.csr -out server.cr


    最后生成的应该是//第三步,生成服务器端证书

    openssl x509 -req -CA ca.crt -CAkey ca.key -CAcreateserial -in server.csr -out server.crt

    即:server.cr ==应为==> server.crt
  • AllenYukin:https 适配 我们有 :sob: :sob: 2个域名 例如证书上是 h2ome.com 还有一个是api.h2ome.com securityPolicy.validatesDomainName = NO; 我怎么添加对应域名到这里面来校验
    AllenYukin:@o翻滚的牛宝宝o 对 设置成不验证的 开启了验证公钥 更换到2级域名的时候 获取不到数据 我现在只能设置成 什么都不验证。- - 但是接口已经都是https的了
    o翻滚的牛宝宝o:@乄丶呵小北 那就不验证域名就好
  • breezeWarm:问下适配https,有很多都是在别的网站买证书,自己做的证书可以吗?
    o翻滚的牛宝宝o:@春风暖意_ 自己的有可能不行。
  • 健健锅:请问 webview 怎么搞啊
    健健锅:@o翻滚的牛宝宝o 这个是哪里来的?
    o翻滚的牛宝宝o:@健健锅 http://upload-images.jianshu.io/upload_images/2368050-9643c0304e0f1478.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240
    o翻滚的牛宝宝o:@健健锅 这个暂时不知道怎么解决,官方也没给出结论
  • 哼哈猿:先Mark 楼主辛苦了 每个评论都有回答 感谢!
  • 5c2ad94c9daf:“后来我发现只要AFNetworing使用server.pem验证就可以了”,可是楼主代码中并没有体现哪里有用到server.pem验证啊,用的是server.cer
  • wayward玉:大神,我在配置证书的时候遇到这个问题了
    Error opening Certificate server.crt
    694:error:02001002:system library:fopen:No such file or directory:/BuildRoot/Library/Caches/com.apple.xbs/Sources/OpenSSL098/OpenSSL098-59.60.1/src/crypto/bio/bss_file.c:356:fopen('server.crt','r')
    694:error:20074002:BIO routines:FILE_CTRL:system lib:/BuildRoot/Library/Caches/com.apple.xbs/Sources/OpenSSL098/OpenSSL098-59.60.1/src/crypto/bio/bss_file.c:358:
    unable to load certificate
    请问是什么原因啊?
    wayward玉:@蓝苹果不是烂苹果 让后台提供了
    蓝苹果不是烂苹果:@wayward玉 你的路径问题怎么解决的
    o翻滚的牛宝宝o:证书路径不对
  • 69646aecb91c:您好,请教一下 ,1,我把那个NSAllowsArbitraryLoads 删除了,并且配置了服务器花钱买的证书,我用的是最新的AF
    请求不了数据,一直报NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9824)博主能给个解决的思路吗? 2,如果将NSAllowsArbitraryLoads设为yes 不用使用证书,也能够请求成功 ,但是设置成yes的话 ,会不会影响明年审核 ?求博主指教,跪谢!
    o翻滚的牛宝宝o:@青春路上的小羔羊 别删除。应该不影响
  • EchoZuo:您好,咨询一下,如果是购买的CA证书,需要处理验证部分吗?我现在情况是这样,服务器端已经处理完,是购买的CA证书,他告诉我说让我将接口的http 改为https即可,我现在改完了,也确实刻意访问成功并且获取数据了。但是最近在晚上看到的文章都提到要处理什么验证,单向或者双向。对这个不是很理解,如果是购买的CA证书,验证部分需要做吗?应该如何来做?我现在项目用的是最新的afnetworking
    o翻滚的牛宝宝o:@叫我困兽 单向认证。单向认证。
    叫我困兽:@o翻滚的牛宝宝o 意思是,只要服务器端配置好ca证书,移动端这边只需要改为https请求就可以是吧?这些配置是加密保护的双向认证?
    o翻滚的牛宝宝o:@EchoZuo 最好做下,否则数据还是会被抓到的
  • 萨达搜索到:请教下有几个问题,谢谢了
    1.0 iOS端是否只要把原来的请求http://xxx.com 改为https://xxx.com 就好了?
    2.0 pilst文件里面那个是否要删除NSAllowsArbitraryLoads = YES 的字典
    3.0 AF加入你上面贴出来的代码就好?
    o翻滚的牛宝宝o:@紫霞大仙F 应该能审核通过的。至少现在能。明年才实行。
    萨达搜索到:@o翻滚的牛宝宝o 后台今天升级成功 但是发现SDWebimage 加载图片失败 我把那个NSAllowsArbitraryLoads 删除了 如果加上就没事 不太清楚 这样会不会审核不通过?
    o翻滚的牛宝宝o:@紫霞大仙F 1:名字肯定是要改的,不过你要确保后台支持hrrps 2:那个不用删除 3:先按着流程走走看,有什么问题可以再提出来。
  • GQF_1102:请教一个问题,我是前端的 按你的方法配置了 证书和请求之后,调用新的https接口时会返回 403错误 但是在电脑safari里面直接访问时没有问题的 请问403是因为证书有问题么? 还是哪里配置错了
    3fa3d20212c1:@GQF_1102 你可以这样做:首先确定问题,在pc上打开api是否HTTPS有效(绿色的锁和请求成功),没问题就说明是你的代码有问题,接下来就是两个属性//allowInvalidCertificates 是否信任服务器无效(也就是自建证书)或过期的SSL证书。默认为“不”。
    //需要自建证书则默认YES,测试的时候可以关闭,正式的开启
    securityPolicy.allowInvalidCertificates = YES;
    //validatesDomainName 是否验证域名。默认为“是”。 建议开启
    securityPolicy.validatesDomainName = YES;还有问题就重新配置一边
    o翻滚的牛宝宝o:@GQF_1102 403是服务器拒绝访问。是不是还有其他条件没传
  • 3fa3d20212c1:我在适配中,证书和代码都添加完成后,请求的时候返回失败:Error Domain=NSURLErrorDomain Code=-999 "cancelled" UserInfo={NSErrorFailingURLKey=https://api.., NSLocalizedDescription=cancelled, NSErrorFailingURLStringKey=https://api..}
    为什么会取消请求哪
    没有黑眼圈de熊猫:@偏执de男人 你好,请问你是怎么解决的呢?我现在也遇到了这个问题
    3fa3d20212c1:@偏执de男人 这个已经解决了,是证书问题导致的。后台支持的域名里通配符没有使用好
  • 98843d3cee15:您好,有个问题,服务器配置好了https.浏览器可以安全访问 没有证书给我们前端.我们需要怎么配置?
    o翻滚的牛宝宝o:@98843d3cee15 NSAppTransportSecurity对上线有没有影响这必须看明年apple审核了,有人撞墙了才知道,或者圣诞前的通知。但是我觉得应该不影响上线。并不是说设置成YES就不是https请求,而是设置成YES允许http请求,也允许https等请求。我觉得apple不会对这个参数有强制要求,毕竟应用里很多webView都是http请求的,总不能要求其他网页都用https吧。
    98843d3cee15:@o翻滚的牛宝宝o NSAppTransportSecurity设置成NO 就没数据了 YES是有数据的. 有个问提 设置成YES对上线是有影响的是吗? 还是说设置成YES了就不是进行https请求?
    o翻滚的牛宝宝o:@98843d3cee15 如果只想走个Https形式就用AFSSLPinningModeNone,不能防止中间人攻击。如果要安全,用浏览器把证书下下来,然后用AFSSLPinningModePublicKey,要是想更安全点用AFSSLPinningModeCertificate
  • EchoZuo:您好,我有两个问题,第一个是:在customSecurityPolicy中验证后,需要做什么判断吗?如果验证失败,程序会如何执行?第二个是:我看到您这边是自签证书对吗?如果是服务器端购入的SSL证书的话,应该如果处理呢?双向认证是否有思路?
    o翻滚的牛宝宝o:如果验证失败afnetworking就会报错。是自签名,购买的也是一样的文件。他们会给你的。双向认证请参考上面评论区我回复的,链接不复制了,上面评论的有。有代码的。
  • openUmberella:你好,我这里有一个问题,将后台给我们的证书放到ios端的项目里面,日后版本上线了,别人从商店上下载我们的应用,导出ipa包,在里面就可以找得到服务器证书,对于这一点会不会右安全隐患?如果可以,是否可以将证书就写在代码中呢??
    openUmberella:@o翻滚的牛宝宝o 啊,谢谢,受教了
    o翻滚的牛宝宝o:@opUmberella 证书里面装的的是公钥,别说解压ipa包能拿到,直接访问你的接口浏览器就能拿到。。之所以叫公钥就是大家都能看见的东西。要安全就用双向认证,然后用ca的数字证书。
  • 462c2bac205a:你好,假如服务器那边已经更改为https,,请问客户端这边还需要按照你上面所说的配置AFNetworking步骤去处理吗?还是说需要别的形式去处理??
    o翻滚的牛宝宝o:@462c2bac205a 看后台是否强制要求https把,如果强制要求,那么客户端就要改
  • 青空逸隐:问下,作者配置AFNetworking段所贴的代码段,只是说实现了单向验证,那么这部分的所实现的功能是什么? 是验证服务器的证书么(防止中间人伪造服务器攻击)? 然后如果是这样的话,验证模式选AFSSLPinningModeCertificate还是AFSSLPinningModePublicKey,那种更好一点?
    o翻滚的牛宝宝o:@書冩傳奇 双向认证就行。可以看看网上资料。
    青空逸隐:问下那如果要防止“中间人攻击”,APP端应如何处理? 这个验证服务器证书的合法性的单项验证是否必须要加上?
    o翻滚的牛宝宝o:@書冩傳奇 是验证服务器证书是否合法,AFSSLPinningModeCertificate是证书所有字段都一样才通过认证,AFSSLPinningModePublicKey只认证公钥那一段,AFSSLPinningModeCertificate更安全。但是单向认证不能防止“中间人攻击”
  • master_huang:这个是要在服务器上配置吗?我测试了在我的Mac电脑上,提示说找不到server.crt和server.key的路径
    o翻滚的牛宝宝o:@master_huang 是的,私钥要写入服务器的。电脑没有服务器可以自己装个,有很多集成的。或者让后台配合你测试
    master_huang:@o翻滚的牛宝宝o 我是iOS开发的。这个教程生成证书是要在服务器上吗?我的电脑没有配置服务器。
    o翻滚的牛宝宝o:@master_huang 我也是在mac上配置的,mac电脑也可以当服务器啊。
  • Leesim:还有一个问题 之前上传应用 都在plist文件里 把ats 设置为yes 如果明年上传 苹果这个意思是 要把这个参数设置为 no吗?
    openUmberella:你好,我这里还有一个问题,自习看了你的评论回复了解到贵公司现在已经完成了关键接口使用https,那到了明年,是否剩下的接口也需要换成https?
    o翻滚的牛宝宝o:@死涵Leesim 先回答这个问题。明年如果你设置成yes说不定在提交给苹果审核的时候就会被打回来,还记得ipv6么?差不多这个意思,就是不让你上架。
  • Leesim:有个疑问 如果这种双向认证 打到包里的证书 过期了 怎么更换?
    o翻滚的牛宝宝o:@死涵Leesim 先回答双向认证吧,[AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];并不是单向认证,而是根本不认证。。真正的双向认证简单的说就是“服务端要验证客户端,客户端也要验证服务器端”,也就是说要2个证书,具体的可以参考http://www.cnblogs.com/KingQiangzi/p/5820884.html,以前我写的这个根本就是单向认证。(当时也是摸索,现在知道了)我们公司只是把关键的接口https了,而且是单向认证,毕竟后台忙啊
    Leesim:@o翻滚的牛宝宝o 比如你这个证书 有效期是1个月 如果后台续费的话 是否app包里的证书就不需要更新了 如果后台也需要换 那么前台就跟着一起换 之后强制更新 不然没有更新的用户是否会受到影响。还有 我理解的是 类似您说的这种客户端 和服务端都验证的方法为双向认证,如果客户端AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone]; 设置这个参数为none 信任所有证书 只让服务端去做验证 为单向的 不知道我这样理解是否有问题 您公司是不是已经做了https的修改?
    o翻滚的牛宝宝o:@死涵Leesim 这个好像还不能算双向认证。过期了好像真的没有什么解决办法,只能重新下包。。
  • wangliangfmail:不错,多谢分享
  • 开发仔小广:实际生产中iOS手机端是不是需要服务器给的server.cer证书就行了呢?

本文标题: IOS Https适配摸索

本文链接:https://www.haomeiwen.com/subject/cnyzjttx.html