43.https自建证书在 AFN中的设置

介绍

首先是网络安全,OSI模型各层都会面临相应的网络安全问题,涉及宽广,而网络安全也是安全领域发展最为繁荣的领域。本文我们只是从移动应用开发角度,以尽量简单的方式,讲解HTTPS核心概念知识,以及在iOS平台上的实现。建议现在还在使用HTTP的应用都升级到HTTPS。
其实HTTPS从最终的数据解析的角度,与HTTP没有任何的区别,HTTPS就是将HTTP协议数据包放到SSL/TSL层加密后,在TCP/IP层组成IP数据报去传输,以此保证传输数据的安全;而对于接收端,在SSL/TSL将接收的数据包解密之后,将数据传给HTTP协议层,就是普通的HTTP数据。HTTP和SSL/TSL都处于OSI模型的应用层。

处理

当 https 请求时,需要有证书,证书是后台服务器上后台人员上传上去的. 对于此证书有两种,一种是购买的第三方信任签名证书,一种是自签名的证书.对于购买证书,直接改成https应该就可以了,如果是自签名证书需要做一些的处理
1.在自己封装的 AFNClient的类中添加宏#define AFNETWORKING_ALLOW_INVALID_SSL_CERTIFICATES
2.在封装的单例进行配置AFHTTPRequestOperationManager时,要进行AFSecurityPolicy的设置.

AFSecurityPolicy * securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];
//allowInvalidCertificates 是否允许无效证书(也就是自建的证书),默认为NO
//如果是需要验证自建证书,需要设置为YES
securityPolicy.allowInvalidCertificates = YES;
//validatesDomainName 是否需要验证域名,默认为YES;
//假如证书的域名与你请求的域名不一致,需把该项设置为NO
//主要用于这种情况:客户端请求的是子域名,而证书上的是另外一个域名。因为SSL证书上的域名是独立的,假如证书上注册的域名是www.google.com,那么mail.google.com是无法验证通过的;当然,有钱可以注册通配符的域名*.google.com,但这个还是比较贵的。
securityPolicy.validatesDomainName = NO;
//validatesCertificateChain 是否验证整个证书链,默认为YES
//设置为YES,会将服务器返回的Trust Object上的证书链与本地导入的证书进行对比,这就意味着,假如你的证书链是这样的:
//GeoTrust Global CA 
// Google Internet Authority G2
// *.google.com
//那么,除了导入*.google.com之外,还需要导入证书链上所有的CA证书(GeoTrust Global CA, Google Internet Authority G2);
//如是自建证书的时候,可以设置为YES,增强安全性;假如是信任的CA所签发的证书,则建议关闭该验证;
securityPolicy.validatesCertificateChain = NO;
requestOperationManager.securityPolicy = securityPolicy;

但在 iOS9以后的不用做处理,因为 iOS 以后自动将 http 转化为 https 进行网络请求.

你可能感兴趣的:(https,配置,AFN,自建证书)