美文网首页程序员iOS Developer牛叉的demo
《小印记》iOS源码分享--HTTPS配置篇

《小印记》iOS源码分享--HTTPS配置篇

作者: _子墨 | 来源:发表于2017-03-22 16:43 被阅读197次

笔者前不久终于发布了自己的APP《小印记》,在此分享一些iOS源码,如果读者学到了有用的东西,希望能前往App Store下载《小印记》支持一下笔者,谢谢!🙂

《小印记》iOS源码分享--极光推送实践篇
《小印记》iOS源码分享--自定义弹框篇
《小印记》源码分享--极光推送服务器篇
《小印记》iOS源码分享--网络层封装篇


一、前言

虽然今年1月1日苹果公司并没有强制要求所有APP使用HTTPS通信,但笔者相信这也是迟早的事情。为了通信数据的安全,笔者花了一点时间将通信由之前的HTTP改成了HTTPS,这里写下改造过程,希望对读者有帮助。


二、简要说明

HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。

它是一个URI scheme(抽象标识符体系),句法类同http:体系。用于安全的HTTP数据传输。https: URL表明它使用了HTTP,但HTTPS存在不同于HTTP的默认端口及一个加密/身份验证层(在HTTP与TCP之间)。

HTTPS和HTTP的主要区别

  1. https协议需要到ca申请证书,一般免费证书很少,需要交费。
  2. http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。
  3. http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
  4. http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

如果使用HTTP的话,通用做法是在 Info.plist 中声明,倒退回不安全的网络请求:

12.png

但现在既然要启用HTTPS,所以需要将这个设置删除


三、SSL证书准备

HTTPS改造的关键就是证书。笔者使用的是 COMODO 的证书(在某宝上买的),反正不贵,一年也就几十块钱,而且还省心。购买ssl证书时,证书需要绑定域名(不能绑定IP),所以笔者又到某云上购买了一个域名,然后将域名和服务器IP绑定起来,具体的购买和绑定方法网上搜搜有很多的。虽然网上有很多自签证书的做法,但是否能通过审核笔者不知,为了安全,笔者建议还是使用正规的SSL证书。iOS 9 中可用的受信任根证书列表


四、iOS客户端代码配置

笔者使用的AFNetworking(版本3.1.0),具体源码如下

注意:一定要将 .cer 文件导入到工程中!!!

+ (AFHTTPSessionManager *)manager;
{
    static AFHTTPSessionManager *shareInstance = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        
        NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
        shareInstance = [[AFHTTPSessionManager alloc] initWithBaseURL:[NSURL URLWithString:BaseHttpURLString] sessionConfiguration:configuration];
        //设置请求参数的类型:JSON
        shareInstance.requestSerializer = [AFJSONRequestSerializer serializer];
        //设置服务器返回结果的类型:JSON (AFJSONResponseSerializer,AFHTTPResponseSerializer)
        shareInstance.responseSerializer = [AFJSONResponseSerializer serializer];
        //设置请求的超时时间
        shareInstance.requestSerializer.timeoutInterval = 20.0f;
        //设置ContentType
        shareInstance.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/html", @"text/json", @"text/plain", @"text/javascript", @"text/xml", @"image/jpeg",@"image/png", nil];
        
        // https配置
        NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"你的证书名" ofType:@"cer"];
        NSData *certData = [NSData dataWithContentsOfFile:cerPath];
        AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate withPinnedCertificates:[[NSSet alloc] initWithObjects:certData, nil]];
        NSSet *dataSet = [[NSSet alloc] initWithObjects:certData, nil];
        // setPinnedCertificates 设置证书文件(可能不止一个证书)
        [securityPolicy setPinnedCertificates:dataSet];
        // allowInvalidCertificates 是否允许无效证书
        [securityPolicy setAllowInvalidCertificates:NO];
        // validatesDomainName 是否需要验证域名
        [securityPolicy setValidatesDomainName:YES];
        
        shareInstance.securityPolicy = securityPolicy;
    });
    return shareInstance;
}

同时附上服务器端Tomcat(apache-tomcat-7.0.73/conf/server.xml)的配置:

<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol"
               maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
               clientAuth="false" sslProtocol="TLSv1.2" keystoreFile="/home/jacedy/tomcat/apache-tomcat-7.0.73/你的证书名.jks" keystorePass="123456" />

好了,到这里,HTTPS的改造也就完成了,使用Charles抓包的话,看到的数据将会是一堆乱码。


最后附上《小印记》截图,希望读者多多支持! 🙂

WechatIMG138.png

相关文章

  • 《小印记》iOS源码分享--HTTPS配置篇

    笔者前不久终于发布了自己的APP《小印记》,在此分享一些iOS源码,如果读者学到了有用的东西,希望能前往App S...

  • iOS消息转发机制实例

    笔者前不久终于发布了自己的APP《小印记》,特此分享了一些iOS源码,如果读者学到了有用的东西,希望能前往App ...

  • iOS底层原理02 - 对象malloc流程分析

    上一篇: iOS底层原理01 - 对象alloc、init、new源码分析[https://www.jianshu...

  • iOS底层学习之 —— objc4-781源码配置、编译流程

    iOS底层学习之 —— objc4-781源码配置、编译流程 暂时先推荐一篇大神的博客:iOS-底层原理 03:o...

  • iOS配置HTTPS证书

    iOS配置HTTPS

  • iOS配置HTTPS

    https://github.com/ChenYilong/iOS9AdaptationTips 配置方法 :ht...

  • iOS 配置https

    貌似在iOS9之后,官方默认只能访问https。如果访问的https都是安全的,则不需要做任何配置。 安全的htt...

  • iOS 配置https

    昨天试验了iOS 11 beta6 发现原有的https自建证书不能使用,可能是新版本要对ATS加强验证,之前一直...

  • iOS 配置HTTPS

    关于苹果2017年1月1日之后,要求App Store 商店所有的app 使用https 的计划虽已延迟,但尽早掌...

  • iOS配置HTTPS

    引言 所有iOS的开发者都应该知道,2016年以来苹果在不断地收紧对于HTTP网络连接的限制,强力推行全部使用HT...

网友评论

    本文标题:《小印记》iOS源码分享--HTTPS配置篇

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