TomCat自建证书,iOS HTTPS连接使用并解决AFNetworking SecCertificateCreateWithData nil 出错 崩溃

马上要到17年1月1日了,苹果要求使用HTTPS协议,很多第三方SDK都已经适配了,这里我先提前备好


为服务器生成证书

 '生成服务器证书'
keytool -genkey -v -alias tomcat -keyalg RSA -keystore server.keystore -validity 36500
 '生成客户端证书'
keytool -genkey -v -alias mykey -keyalg RSA -storetype PKCS12 -keystore client.p12 -validity 36500
 '生成客户端p12证书信任文件'
keytool -export -alias mykey -keystore client.p12 -storetype PKCS12 -storepass 密码 -rfc -file client.cer
 '导入到服务端keystore中'
keytool -import -v -file client.cer -keystore server.keystore
'把服务器证书导出为CER文件'
keytool -keystore D:\home\tomcat.keystore -export -alias tomcat -file D:\home\tomcat.cer (tomcat为你设置服务器端的证书名,路径换成自己的路径)

TomCat 的conf文件夹下
修改 server.xml文件

<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"  
           maxThreads="150" scheme="https" secure="true"  
           clientAuth="false" sslProtocol="TLS"  
           keystoreFile="D:\\tomcat.keystore" keystorePass="密码"  
           truststoreFile="D:\\tomcat.keystore" truststorePass="密码" /> 

注意服务端证书名保持一致属性说明:
clientAuth:设置是否双向验证,默认为false,设置为true代表双向验证
keystoreFile:服务器证书文件路径
keystorePass:服务器证书密码
truststoreFile:用来验证客户端证书的根证书,此例中就是服务器证书
truststorePass:根证书密码


单向验证
clientAuth:设置false
双向验证
clientAuth设置true. 那么客户端必须要有 client.p12文件才能访问tomcat服务器,
还需要在客户端安装服务器证书,双击“tomcat.cer”,按照提示安装证书,将证书填入到“受信任的根证书颁发机构”。


iOS单向验证
证书用tomcat.cer

    //先导入证书,找到证书的路径
    NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"证书名" ofType:@"cer"];
    NSData *cerData = [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;
    NSSet *set = [[NSSet alloc] initWithObjects:cerData, nil];
    securityPolicy.pinnedCertificates = set;

//在AFN设置上securityPolicy
   AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
   manager.securityPolicy = securityPolicy;

双向认证
请移步下面链接,不清楚苹果到时候让不让单向认证,目前只使用了单向认证,如果不让请留言提示下我
http://www.jianshu.com/p/9e573607be13

解决SecCertificateCreateWithData崩溃
有些人直接用后台给的证书会出现SecCertificateCreateWithData崩溃,这是因为证书的问题,证书多加密了一层BASE64加密,


两种证书的不同
右键用文本编辑软件打开就能看到

屏幕快照 2017-01-16 下午3.33.11.png

屏幕快照 2017-01-16 下午3.33.34.png

解决方式
第一种方法:把证书里面的字符串复制出来,然后解BASE64后再转Data。
第二种方法:用mac系统的字符串工具把证书导入进来,然后再导出成cer,这个cer就可以直接使用
方法一相对于方法二更安全些,证书文件不会在包里出现
第一种方法
把需要处理的证书里面的文字,全部拷到项目里

屏幕快照 2017-01-16 下午3.37.28.png

需要注意的是把下面这两行去掉,只留中间的字符串

-----BEGIN CERTIFICATE-----
-----END CERTIFICATE-----

解BASE64编码

NSData *cerData = [[NSData alloc] initWithBase64EncodedString:httpsKEY options:0];

然后按单向认证中的方法直接使用Data就行了


第二种方法

屏幕快照 2016-12-14 下午4.31.49.png

屏幕快照 2016-12-14 下午4.32.18.png
屏幕快照 2016-12-14 下午4.32.28.png

如果解决了你的问题,希望给个喜欢
如果我写的有什么问题,欢迎留言指出


TomCat自建证书参考
http://www.jianshu.com/p/2a7fbda9de5b
http://blog.csdn.net/xxd851116/article/details/18701731

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,440评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,814评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,427评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,710评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,625评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,014评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,511评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,162评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,311评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,262评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,278评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,989评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,583评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,664评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,904评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,274评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,856评论 2 339

推荐阅读更多精彩内容