iOS HTTPS双向认证,app需要做什么

最近项目接入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白名单设置

大致需要做这些设置,个人理解有些东西可能不到位,解释的有问题的话,欢迎指正,谢谢!

你可能感兴趣的:(iOS HTTPS双向认证,app需要做什么)