美文网首页
https适配及https抓包

https适配及https抓包

作者: 子书不言 | 来源:发表于2017-01-10 15:36 被阅读183次

    关于苹果的碎碎念

    苹果在 WWDC 2016 上宣布:2016 年底将要求所有 APP 适配苹果的 App Transport Security,简单的来说就是app上的所有明文请求都需要由http请求变成https 请求,如果没有适配且没有进行必要的说明,那么就会审核不通过。不过,就在前不久苹果怂了(我猜的!),将这个deadline无限期推迟,我能说什么呢,当然是好开心!

    适配https

    言归正传,关于什么是https,https的原理啥的网上资料很多,在这里我就不多重复了,有兴趣的可以去查阅相关资料。下面就来说说我在适配时遇到的一些问题。

    1 . 证书相关

    适配https,首先我们需要的就是证书。那么如何拿到证书,一种是让后台大哥要,或者你懒得要那么也可以自己去下一个,以百度为例,用Safari打开https://www.baidu.com

    百度网址
    点击那个小锁,打开显示证书,将baidu.com这个证书拖到桌面就可以获得证书了。同理将百度换成你们app的域名就可以了。
    证书详细
    那么获得了证书,然后呢,直接拖进工程吗?不,首先我们要确认一下,这个证书是什么类型的证书,证书目前分三种:
    • 自建证书
    • 免费证书
    • 收费证书

    自建证书不在苹果的信任列表里,需要拖进工程进行双向认证,而剩下两种都是由第三方机构颁发的,都属于苹果的信任列表里,是不需要拖进工程里的。注意:苹果将沃通和StartCom的根证书列为不信任

    苹果不再信任沃通和StartCom证书

    如果有同学发现自己的证书在ios9上可以用,在ios10上不可以用时,那么你就要看看你的证书的根证书是什么了,建议就是换一家证书颁发机构,免费的阿里云,腾讯云等都可以。
    如何验证证书是否可行,用nscurl命令就可以了,全部pass就表示没问题

    nscurl --ats-diagnostics --verbose https://example.com
    

    如果你是申请的第三方证书,恭喜你,改改域名就可以了。如果是自建证书,那么你还要继续。

    2 . 代码适配

    自建证书,那么要辛苦一点,把下载下来的.cer证书拖进工程里面,然后配置一下,以AFN为例:

    NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"serve" ofType:@"cer"];
    NSData *cerData = [NSData dataWithContentsOfFile:cerPath];
    NSSet *cerSet = [NSSet setWithObjects:cerData, nil];
    AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModePublicKey];
    securityPolicy.allowInvalidCertificates = NO; // 如果需要验证自建证书,需要设置为YES
    securityPolicy.validatesDomainName = NO; // 是否需要验证域名,默认为YES
    // 添加证书 [securityPolicy setPinnedCertificates:cerSet]; 
    AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc] init]; manager.securityPolicy = securityPolicy;
    

    关于AFSSLPinningMode这个属性,有三个选项:

    • AFSSLPinningModeNone:完全信任服务器返回的证书,默认选项,选了这个你托证书进来也没啥意义了
    • AFSSLPinningModePublicKey:对比你本地的证书和服务器返回的证书是否完全一样
    • AFSSLPinningModeCertificate :对比你本地的证书和服务器返回的证书的public key是否一样。

    选哪种模式好呢?

    • AFSSLPinningModeCertificate:比较安全,但是也比较麻烦,你的证书过期了,那么你就要出一个新版本的app并且旧版本的就不能用了,当然你也可以每次启动时来通过一个接口来查询是否有新的证书。
    • AFSSLPinningModePublicKey:只对比public key,即使服务器的证书变了,只要public key不变,一样可以通过验证
      所以,如果你确保每个使用者都是使用的最新的app,就用AFSSLPinningModeCertificate,不是的话,选择AFSSLPinningModePublicKey比较好。

    https抓包

    用Charles抓包在开发中是很方便的,尤其在跟后台的同学交流过程中起到比较重要的作用。但是在完成https之后,我们再抓包,发现抓到一堆乱码,是不是很坑爹,没事,接下来我们就解决它。

    1 . Charles设置

    首先现去下载最新版的Charles,因为我用旧版没成功(估计是我没重启/斜眼笑),官网和网上的破解版都可以。

    Charles设置1
    给模拟器和系统安装这两个证书,打开钥匙串,设置证书为始终信
    证书设置信任
    在Charles里添加端口号443
    设置的端口号
    重启模拟器(重要的一步),然后就可以抓包了,如果还不行,重启电脑。

    2 . 手机设置

    先用手机设置代理连上Charles,然后用Sarfari打开http://charlesproxy.com/getssl这个网址,然后手机会自动下载安装证书,安装成功后,就可以在真机上抓包了。

    还有一些白名单设置,因为政策还没出,所以那些就以后再补充了

    相关文章

      网友评论

          本文标题:https适配及https抓包

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