ios https 安全证书配置
原定于2017年1月1日起所有提交到 App Store 的App必须强制开启 ATS,需要配置Https。但是现在不需要了,无固定期限的往后延期了,但是这个还是得弄明白下为好,说不定哪天突然就让弄了。
一、 2017年1月1日起所有提交到 App Store 的App必须强制开启 ATS。
就是要求去掉 Info.plist 的 NSAllowsArbitraryLoads
1.这要求所有通过APP发送的网络请求都需要https
2.开启ATS,图片(例如图像的URL)等静态文件的url需要用https,否则会无法加载;
3.对于H5,网页浏览和视频播放的行为,iOS 10 中新加入了NSAllowsArbitraryLoadsInWebContent 键。通过将它设置为 YES ,
可以让你的 app 中的 WKWebView 和使用 AVFoundation 播放的在线视频不受 ATS 的限制。
这也应该是绝大多数使用了相关特性的 app 的选择。但是坏消息是这个键在 iOS 9 中并不会起作用.
4.iOS9中可以选择使用 NSExceptionDomains 来针对特定的域名开放 HTTP 应该要相对容易过审核。“需要访问的域名是第三方服务器,他们没有进行 HTTPS 对应”会是审核时的一个可选理由,但是这应该只需要针对特定域名,而非全面开放。如果访问的是自己的服务器的话,可能这个理由会无法通过。是需要在Info.plist 配置中的XML源码
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>XXX.com</key>
<dict>
<!--适用于这个特定域名下的所有子域-->
<key>NSIncludesSubdomains</key>
<true/>
<!--扩展可接受的密码列表:这个域名可以使用不支持 forward secrecy 协议的密码-->
<key>NSExceptionRequiresForwardSecrecy</key>
<false/>
<!--允许App进行不安全的HTTP请求-->
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
<!--在这里声明所支持的 TLS 最低版本-->
<key>NSExceptionMinimumTLSVersion</key>
<string>TLSv1.1</string>
</dict>
</dict>
</dict>
二、 目前项目中用到的第三方已经支持https的有
WKWebView
UIWebView
SDWebImage
支付宝SDK
微信支付SDK
友盟SDK
极光推送SDK
其中用到的UIWebView 以后要逐步替换为WKWebView
上面内容参考于:http://blog.csdn.net/zhangmengleiblog/article/details/53536956
三、下面是在AFN中配置实例:
+ (AFSecurityPolicy*)customSecurityPolicy
{
// /先导入证书
NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"hgcang" 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;
}
将上面的方法添加到我们AFN请求数据中
+ (void)post:(NSString *)url params:(NSDictionary *)params success:(void (^)(id))success failure:(void (^)(NSError *))failure
{
// 1.获得请求管理者
AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];
// 2.申明返回的结果是text/html类型
mgr.responseSerializer = [AFHTTPResponseSerializer serializer];
// 加上这行代码,https ssl 验证。
//[mgr setSecurityPolicy:[self customSecurityPolicy]];
// 3.发送POST请求
[mgr POST:url parameters:params
success:^(AFHTTPRequestOperation *operation, id responseObj) {
if (success) {
success(responseObj);
}
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
if (failure) {
failure(error);
}
}];
}
上面参考于 http://blog.csdn.net/canlanyangg/article/details/53559597 这篇文章。
四.关于证书 参考文章:http://www.2cto.com/Article/201510/444706.html
服务端给的是crt后缀的证书,其中iOS客户端用到的cer证书,是需要开发人员转换:
1.证书转换
在服务器人员,给你发送的crt证书后,进到证书路径,执行下面语句
openssl x509 -in 你的证书.crt -out 你的证书.cer -outform der
这样你就可以得到cer类型的证书了。双击,导入电脑。
2.证书放入工程
1、可以直接把转换好的cer文件拖动到工程中。
2、可以在钥匙串内,找到你导入的证书,单击右键,导出项目,就可以导出.cer文件的证书了
参考链接:http://www.jianshu.com/p/97745be81d64。
五.在info.plist去掉之前允许http加载的代码 就是删除下面的代码(么有的就省了这一步)
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
六、可能出现的问题:
6.1服务器可能出现的问题:
Error Domain=NSURLErrorDomain Code=-1200 "发生了 SSL 错误,无法建立与该服务器的安全连接。" UserInfo= {NSURLErrorFailingURLPeerTrustErrorKey=<SecTrustRef: 0x15dd87140>, NSLocalizedRecoverySuggestion=您仍要连接此服务器吗?, _kCFStreamErrorDomainKey=3, _kCFStreamErrorCodeKey=-9802, NSErrorPeerCertificateChainKey=<CFArray 0x15df6b640 [0x1a08d5150]>{type = immutable, count = 1, values = (
0 : <cert(0x15f3559e0) s: dbh i: dbh>
)}, NSUnderlyingError=0x15dd5f770 {Error Domain=kCFErrorDomainCFNetwork Code=-1200 "(null)" UserInfo={_kCFStreamPropertySSLClientCertificateState=0, kCFStreamPropertySSLPeerTrust=<SecTrustRef: 0x15dd87140>, _kCFNetworkCFStreamSSLErrorOriginalValue=-9802, _kCFStreamErrorDomainKey=3, _kCFStreamErrorCodeKey=-9802, kCFStreamPropertySSLPeerCertificates=<CFArray 0x15df6b640 [0x1a08d5150]>{type = immutable, count = 1, values = (
0 : <cert(0x15f3559e0) s: dbh i: dbh>
)}}}, NSLocalizedDescription=发生了 SSL 错误,无法建立与该服务器的安全连接。, NSErrorFailingURLKey=https://192.168.1.138/app/login/login.json, NSErrorFailingURLStringKey=https://192.168.1.138/app/login/login.json, NSErrorClientCertificateStateKey=0}
可能是服务器配置的证书不对,苹果要求是TLS1.2,服务端配置是TLS1.0。
也有可能是后台签名算法问题 https://my.oschina.net/vimfung/blog/494687
6.2、证书一定要拉到项目里面,AFN加了验证之后,看看获取证书的certData是否为空。如果为空,则证书有问题
NSData *certData = [NSData dataWithContentsOfFile:cerPath];
ios https 安全证书配置的更多相关文章
- 阿里云https免费证书配置-包教会
阿里云https免费证书配置-包教会-有需要请联系小编! 小编个人站点:https://www.itdog.site/ 小编微信号:wvqusrtg
- ios 开发发布证书配置详细流程
iOS证书配置实践 本文参考了: iOS证书配置指南:http://dev.umeng.com/push/ios/license-configuration-guide 写在前面: 团队开发证书的管理 ...
- Linux 中 Xampp 的 https 安全证书配置
博客地址:http://www.moonxy.com 一.前言 HTTP 协议是不加密传输数据的,也就是用户跟你的网站之间传递数据有可能在途中被截获,破解传递的真实内容,所以使用不加密的 HTTP 的 ...
- nginx配置ssl双向验证 nginx https ssl证书配置
1.安装nginx 参考<nginx安装>:http://www.ttlsa.com/nginx/nginx-install-on-linux/ 如果你想在单IP/服务器上配置多个http ...
- 【LNMP】基于阿里云的https免费证书配置
1 登录阿里云账户,左侧菜单选择 -> 2 右上角选择购买证书,选择免费型 3 按照流程购买,回到订单列表.填写认证信息,选择DNS解析, 在列表 选择下载证书 4 我的服务器是ng ...
- ios 推送 证书配置
S的推送证书,有有效期限制,一般为一年.当我们证书过期的时候,就需要重新生成证书了.有一段时间没有上苹果网站了,昨天上去一看,此奥,改版了,下边我们将重新生成一个正式环境的push推送的证书. 1.先 ...
- iOS开发者账号证书配置及相关工作
申请到开发者账号,肯定要先配置一下才可以使用,这主要是iOS证书及配置文件: 以下这篇文章写得比较全面,故不再累赘,需要的同学可以看一下: iOS开发证书与配置文件的使用
- 阿里云slb和ucloud负载均衡ulb添加ssl证书将http服务https化的配置详解
阿里云和ucloud服务器配置ssl证书将http服务https化的配置详解 项目背景: 苹果App于2017年1月1日将启用App Transport Security安全功能,即强制App通过HT ...
- iOS 打包上传AppStore相关(1)-相关证书配置
最近一个老项目需要更新迭代,一个新的项目需要上线.有一些自己出现的BUG,也有一些没搞懂到处翻资料的问题.在此想做一个总结,写一下总体步骤,尽可能的详细一些,以及自己的一些理解.有很多步骤因为我们查阅 ...
随机推荐
- UVA11270 Tiling Dominoes —— 插头DP
题目链接:https://vjudge.net/problem/UVA-11270 题意: 用2*1的骨牌填满n*m大小的棋盘,问有多少种放置方式. 题解: 骨牌类的插头DP. 1.由于只需要记录轮廓 ...
- POJ2955 Brackets —— 区间DP
题目链接:https://vjudge.net/problem/POJ-2955 Brackets Time Limit: 1000MS Memory Limit: 65536K Total Su ...
- vue中使用axios post上传头像/图片并实时显示到页面
在前端开发中,为了更好的用户体验,在头像上传时会先将图片显示到页面然后点击保存按钮 完成图片的上传成功 代码部分有参考他人的写法. html代码: <div id="myPhoto ...
- tuple built-in function
tuple tips: 1.对于Python中的tuple类型来说,他与其它的序列类型来讲最大的不同就是tuple是不可变的. 2.当你需要创建一个只有一个元素的tuple时,需要在元祖分隔符里面加一 ...
- 第三届蓝桥杯C++B组省赛
1.微生物增值 2.古堡算式 3.海盗比酒量 4.奇怪的比赛 5.方阵旋转 6.大数乘法 7.放棋子 8.密码发生器 9.夺冠概率 10.取球博弈
- Android font
╔════╦════════════════════════════╦═════════════════════════════╗ ║ ║ FONT FAMILY ║ TTF FILE ║ ╠════ ...
- trying to draw too large(106,975,232 bytes) bitmap.
Loading Large Bitmaps Efficiently This lesson teaches you to Read Bitmap Dimensions and Type Load a ...
- .NET 的 WebSocket 开发包比较 【已翻译100%】--网址:http://www.oschina.net/translate/websocket-libraries-comparison-2
编者按 本文出现在第三方产品评论部分中.在这一部分的文章只提供给会员,不允许工具供应商用来以任何方式和形式来促销或宣传产品.请会员报告任何垃圾信息或广告. Web项目常常需要将数据尽可能快地推送给客户 ...
- Intel® Media SDK(一)
A cross-platform API for developing media applications on Windows* Fast video playback, encode, proc ...
- BZOJ_3295_[Cqoi2011]动态逆序对_CDQ分治+树状数组
BZOJ_3295_[Cqoi2011]动态逆序对_CDQ分治+树状数组 Description 对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对(i,j)的个数.给1到n的一 ...