iOS https双向配置

   只需要服务器验证手机端的童鞋可以点开以下链接【ios 单向配置https】 http://www.cnblogs.com/OC888/p/6560602.html

  兜兜转转弄了一个星期,网上的大多数demo都下来过一遍了,各种偏方都试了,终于配置好了双向配置,网上大多数标题为双向的文章都有不足之处,要么纯粹就是服务器验证手机端的单向认证,要么代码不全,要么demo报错。今天我来终结afn双向配置https这个问题,想知道https原理的可以戳进文章开头,里面有流程解释,此文章只负责代码部分,文章末尾放demo,好使请点赞

第一步,infoplist添加ATS(应用传输秘密设置),如下图:

     什么?看不到。。。后面是什么字母?没错就是这么坑,老汁就是被某人的教程这么坑过整整一天,下面放完整的string:NSExceptionAllowsInsecureHTTPLoads  NSExceptionRequiresForwardSecrecy       NSIncludesSubdomains,依次对应的布尔值为是非是,(此外多加一处报错信息处理方法:报错信息为

NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9801)

这个问题的出现是因为ios9里对TLS的版本配置为1.2;而服务器使用Tomcat配置时,默认为1.0;所以解决方法是在刚才infoplist三个布尔值后添加一对<key>NSExceptionMinimumTLSVersion</key>
      <string>TLSv1.0</string>)如下图:

 

第二步,需要提前说明的是,务必使用afn3.0或者以上版本,因为afn支持的证书格式从2.x的.cer变成了3.x的.der,所以我私自改了一下AFHTTPSessionManager.m的全部代码,文件在demo中,需要的话直接拉走修改即可,或者直接在本文末尾处复制AFHTTPSessionManager.m的代码,如果自己工程里的afn版本报错没有找到某些方法或者头文件,那就升级成最新版本的afn,然后把新版本里的AFHTTPSessionManager.m的代码用demo的AFHTTPSessionManager.m里的全部代码复制替换。

第三步  添加两个证书,1,【服务器.cer 证书】,包含公钥,客户端用它来加密,然后服务器会用这个证书的私钥解密,这样可以服务器确认发来的消息是正儿八经的app传来的信息

            2,【客户端的.p12证书】,说到p12我就猜想应该是为了不让破解了软件ipa的人拿到证书才导出成p12格式的,但是想不明白为什么【服务器.cer】证书不导成p12?望大神解答疑惑感激不尽,另外问后台要这两个证书的时候记得要p12的密码

第四步 DEMO里面ReSetChallenge的.m和.h是对afn的二次封装,直接拿来食用即可,但是切记要改证书名和p12密码,里面封装了分别返回单向认证和双向认证的

AFHTTPSessionManager方法,最后放demo地址,涉及公司机密本人证书已删除,直接放进证书即可使用(https://github.com/OC888/omits),如果有疑问可直接微博留言,作者会一一回答

转载于:https://www.cnblogs.com/OC888/p/6616583.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/393374.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

星辰小队针对于软件“星遇”的第二次10天冲刺——第10天

日期&#xff1a;2019.6.6 博客期&#xff1a;099 星期四 呃~确实有一部分的功能来不及实现了&#xff0c;针对目前已经实现的功能开始整合&#xff0c;用户界面进行美化&#xff0c;把多于没用的界面和代码类删除掉&#xff0c;制作本软件的叙述性文件和相关文档&#xff0c;根…

Lync Server 2013无法共享PPT故障排错处理

前段时间帮助朋友看了一个关于Lync Server 2013无法共享PPT的问题&#xff0c;共享PPT时报如下错误&#xff1a; 日志截图如下&#xff1a; 原因如下前端服务器未关联Ofice web Application服务器&#xff0c;关联即可&#xff0c;如下&#xff1a; 关联完成后&#xff0c;如下…

java手动编译jar包_Maven 手动添加第三方依赖包及编译打包和java命令行编译JAVA文件并使用jar命令打包...

一&#xff0c;实例:新建了一个Maven项目,在eclipse中通过 build path –> configure path….将依赖包添加到工程中后&#xff0c;eclipse不报错了。但是用Maven命令 mvn clean compile 时出错如下&#xff1a;原因是在eclipse中添加了 exteneral jar后&#xff0c;还需要在…

3.27下午

转载于:https://www.cnblogs.com/bgd140201228/p/6628194.html

rxjs 怎么使用_使用RxJS Observables进行SUPER SAIYAN

rxjs 怎么使用I loved DragonBall Z as a kid, and still love it as an adult. 我从小就爱DragonBall Z&#xff0c;但从小到大仍然喜欢它。 Among the ludicrous number of transformations, the original Super Saiyan remains my favorite. 在可笑的转换数量中&#xff0c…

java编程石头剪刀布_java 开发的石头,剪刀,布的游戏 demo

[java]代码库/** 创建一个类Game&#xff0c;石头&#xff0c;剪刀&#xff0c;布的游戏。*/public class Game {/*** param args*/String[] s {"石头","剪刀","布"};//获取电脑出拳String getComputer(int i){String computerGuess s[i];retur…

JList的基本操作

1.初始化并添加元素 DefaultListModel leftListModelnew DefaultListModel(); String[] items Model.getPairs(); for (int i0; i<items.length; i) { leftListModel.add(i, items[i]); } JList leftLstnew JList(leftListModel); 2.删除所有元素 leftListModel.remove…

请求WebApi的几种方式

请求WebApi的几种方式目前所了解的请求WebAPI的方式有通过后台访问api 和通过js 直接访问api接口 首先介绍下通过后台访问api的方法&#xff0c;可以使用HttpClient的方式也可以使用WebRequest的方式 1、HttpClient的方式 &#xff08;1&#xff09;Get请求 string url "…

Jquery的ajax提交成功后刷新页面

转载于:https://www.cnblogs.com/huoxiansudi/p/6646855.html

粘贴复制

方法1: 方法二: 方法三: // 第三种 ios 设备和 android设备均正常,但是pc端没有//定义函数window.Clipboard (function(window, document, navigator) { var textArea, copy; // 判断是不是ios端 function isOS() { return navigator.userAgent.mat…

java统计空间占用_JVM —— Java 对象占用空间大小计算

引用类型(reference type&#xff1a; Integer)在 32 位系统上每一个占用 4bytes(即32bit&#xff0c; 才干管理 2^324G 的内存), 在 64 位系统上每一个占用 8bytes(开启压缩为 4 bytes)。四. 对齐填充HotSpot 的对齐方式为 8 字节对齐。不足的须要 Padding 填充对齐&#xff0…

源于十年来的点滴积累——《变革中的思索》印行出版

源于归国十年来的点滴积累, 集结成书的《变革中的思索》&#xff0c;日前由电子工业出版社刊印出版。 这本书共有五个章节&#xff0c;分别是解码创新、中国智造、管理心得、我和微软、心灵记忆——前三章偏重技术&#xff0c;更多理性的思考; 后两章则工作生活中的所见所闻&am…

SpringBoot声明式事务

目录 事务的基本特征隔离级别传播行为Transcation事务的基本特征&#xff08;ACID&#xff09; Atomic&#xff08;原子性&#xff09; 事务中包含的操作被看作一个整体的业务单元&#xff0c;这个业务单元中的操作要么全部成功&#xff0c;要么全部失败&#xff0c;不会出现部…

团队作业——项目Alpha版本发布

---恢复内容开始--- https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass1 https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass1/homework/3329 <作业要求的链接> Gorious Computer <写上团队名称> 发布项目α版本&#xff0c;对项目…

MySQL异步复制

准备&#xff1a;主备库版本一致&#xff0c;正常安装软件。 1、主库上设置一个复制使用的账户&#xff1a; mysql> grant replication slave on *.* to rep1192.168.100.136 identified by dbking; Query OK, 0 rows affected (0.18 sec) mysql> select user,host,passw…

开源一个爬取redmine数据的测试报告系统

背景 软件测试的最后有一道比较繁琐的工作&#xff0c;就是编写测试报告。手写测试报告在数据统计和分析上面要耗费比较大的事件和精力。之前工作室使用mantis管理bug缺陷。公司有内部有个系统&#xff0c;可以直接从mantis上面获取数据并进行统计&#xff0c;生成一份测试报告…

使用.net Stopwatch class 来分析你的代码

当我们在调试&#xff0c;优化我们的代码的时候&#xff0c;想知道某段代码的真正的执行时间&#xff0c;或者我们怀疑某段代码&#xff0c;或是某几段代码执行比较慢&#xff0c; 需要得到具体的某段代码的具体执行时间的时候。有一个很好用的类Stopwatch。 Stopwatch 类在 Sy…

java衍生作用_java-如何从AffineTransform衍生的形状对象中“...

您可以使用AffineTransform.transform(Point2D, Point2D)变换多边形上的单个点.如果您不使用旋转变换来移动船,而是将船的位置保持在一个(x,y)位置,那么事情就简单得多.您可以在move()中移动飞船的位置,而不是尝试平移多边形.然后,当您想给船上油漆时,例如做&#xff1a;// Opt…

进程间通信 (IPC) 方法总结(三)

进程间通信 &#xff08;IPC&#xff09; 方法总结&#xff08;三&#xff09; 信号量&#xff08;SEMAPHORE&#xff09; 信号量是一个计数器&#xff0c;用于多进程对共享数据的访问&#xff0c;信号量的意图在于进程间同步。 为了获得共享资源&#xff0c;进程需要执行下列操…

实现离线加域---Windows2008 R2 新功能系列之八

我们都知道&#xff0c;部署活动目录&#xff0c;无非搭建一台或多台DC&#xff0c;然后把其它的客户端计算机或成员服务器全部加入域&#xff0c;但在windows2008SP2以前&#xff0c;客户端加入域时&#xff0c;DC必须在线&#xff0c;而从2008R2开始我们已经可以做到让客户端…