一.首先,我们要获取到https的签证证书,这个东西可以找后台的兄弟要。如果想要例如baidu,12306之类的证书,进行如下操作:
点击了“证书信息”,会弹出如下证书信息的弹窗:
将证书直接拖到桌面即可。这样你就获得了https的证书。如果你的证书是后台给的,那有可能是.pem格式,这种格式xcode是无法识别的,双击该证书,进入钥匙串将刚刚加入的证书导出,使用.cer格式。然后将cer格式的证书添加入你的工程。
二.接下来,你需要创建AFHTTPSessionManager对象,当然,前提是你以导入AFNetWorking的框架和头文件。
1.创建AFHTTPSessionManager对象:
AFHTTPSessionManager *httpsManager = [AFHTTPSessionManager manager];
2.设置解析格式
httpsManager.responseSerializer= [AFHTTPResponseSerializer serializer];
NSSet *aset = [[NSSetalloc] initWithObjects:@"application/json",@"text/json",@"text/javascript",@"text/html",@"text/plain",nil];
httpsManager.responseSerializer.acceptableContentTypes= aset;
3.获取证书
NSString*cerPath = [[NSBundle mainBundle]pathForResource:@"https.cer"ofType:nil];
NSData *certData =[NSData dataWithContentsOfFile:cerPath];
NSSet *certSet = [[NSSetalloc]initWithObjects:certData,nil];
4.创建AFSecurityPolicy对象并为其添加一些证书设置
AFSecurityPolicy *securityPolicy =[AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];//这一句是设置安全策略是由什么验证的,是一个枚举值,而我当前的值为证书验证。
securityPolicy.allowInvalidCertificates=YES;//这个一属性是设置无效证书是否认同,yes为认同,NO为不认同
securityPolicy.validatesDomainName=NO;//设置证书中的域名下的子域名是否排除,一般选择no
5.添加证书到安全策略中,并为AFHTTPSessionManager设置安全策略
[securityPolicy setPinnedCertificates:certSet];//添加证书
httpsManager.securityPolicy= securityPolicy;
6.之后就可以发送网络请求了。
三.iOS9及其以上的,切是未认证的自签证书,要在info.plist中加如下面的代码:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>