最近项目接入https双向认证,除了需要服务器部署,app端也需要做一些设置,记录一下过程:
1、将服务器端给的crt证书转成cer格式证书,转换方法:
打开终端cd到crt证书所在的地址,假如crt证书的名字叫ABC,要转成cer的名字假如也叫ABC,输入下面的命令行回车就可以了:
openssl x509 -in ABC.crt -out ABC.cer -outform der
2、将cer证书拖拽到项目工程里
3、拿AFNetworking设置举例,需要做如下设置:
以下代码放在 AFHTTPSessionManager *session = [AFHTTPSessionManager manager]; 的后面
// /先导入证书,可导入多个证书,如需导入多个证书,则导入多个证书路径然后转成data后加入set集合中
NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"ABC" ofType:@"cer"];
NSData*certData = [NSData dataWithContentsOfFile:cerPath];
AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];
securityPolicy.allowInvalidCertificates = YES;
securityPolicy.validatesDomainName = NO;
securityPolicy.pinnedCertificates= [[NSSet alloc] initWithObjects:certData,...,nil];
session.securityPolicy = securityPolicy;
4、info.plist的设置
这两个选项互斥,一个设置为YES,另一个则需设置为NO,如下设置:
allow arbitrary loads 设置为no,代表了当前应用程序只允许https的请求方式,关闭所有http的请求方式
allow arbitrary loads in web content 是如果项目中有加载h5页面的,页面如果出现图片无法正常显示,需要设置下面的为yes
白名单设置:
如果程序中有部分功能需要用到http请求方式,需要单独设置白名单,开启这些白名单的项目可使用http方式请求网络,同样放在App Transport Security Settings下面,与上图两个设置并列排放
https白名单设置大致需要做这些设置,个人理解有些东西可能不到位,解释的有问题的话,欢迎指正,谢谢!
网友评论