博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《小印记》iOS源码分享--HTTPS配置篇
阅读量:6244 次
发布时间:2019-06-22

本文共 3013 字,大约阅读时间需要 10 分钟。

  hot3.png

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


一、前言

虽然今年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客户端代码配置

笔者使用的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)的配置:

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


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

转载于:https://my.oschina.net/Jacedy/blog/864845

你可能感兴趣的文章
js懒加载
查看>>
计算某时间是年中第几周。
查看>>
【论文阅读】A mixed-scale dense convolutional neural network for image analysis
查看>>
用正则表达式匹配网址URL中最后一个反斜杠/后面的内容
查看>>
Define custom @Required-style annotation in Spring
查看>>
General: Know How to Use InetAddress
查看>>
php 克隆和引用类
查看>>
Linux编程之变量
查看>>
weblogic的下载安装及myeclipse的配置
查看>>
android 第一次运行应用的引导界面
查看>>
我的vimrc配置
查看>>
Java运行原理及内存分析
查看>>
构建之法阅读笔记03
查看>>
C#进程监控
查看>>
Vijos1404 遭遇战 最短路,dijkstra,堆
查看>>
svn解决与优化帮助
查看>>
SQL update select结合语句详解及应用
查看>>
[转]阿里要走102年,阿里的工程师能走多远呢?
查看>>
《算法导论》读书笔记之第15章 动态规划—最长公共子序列
查看>>
从$a_n=f(n)$的角度理解数列中的表达式$a_{n+1}=\frac{k}{a_n}$
查看>>