ios-App使用AFNetworking支持https(CA证书和自签证书)

一、HTTP和HTTPS

之前开发大多数都是HTTP协议进行网络连接,用的久了多了就有点不注意它了,反正该有的设置都一样,照搬过来就行。然而2016年以来,苹果公司强力推行全部使用HTTPS进行网络连接,那么问题就来了。

为啥强力推行HTTPS?

原因便是HTTP有一定的缺陷,需要进行修补完善来应对越来越繁荣的互联网环境。

HTTP缺陷:

1.通信内容使用的是明文传输,就可能会被窃听。

2.没有对通信方的身份进行验证,就可能被伪造身份。

3.无法证明报文的完整性,就可能被篡改内容。

HTTP +SSL = HTTPS

HTTPS其中的加密过程是:建立连接时先用耗时的非对称性公开密钥进行通信,将后续要使用的共享密钥进行传输。这样既照顾了非对称密钥加解密的耗时,又使用比较高效的共享密钥加密方式保障了效率。

HTTPS的认证是:证书,数字证书


二、数字证书

数字证书分两类:正规证书和自签证书

1,正规证书

正规证书:是由一些数字证书认证机构颁发的证书。优点:不需要进行任何配置,记得将url前面加上https即可正常访问,达到加密以及通过审核的目的。缺点:要钱,而且费用还不低。当然也有提供免费的正规证书的,比如腾讯云和阿里云,但都是有时效的。

2,自签证书

服务端配置暂且不提,ios这边如果想正常使用,需要的一些配置。

首先需要导入证书,证书格式是cer,web浏览器导出的是crt格式的,需要转换成cer。方法是--

openssl x509 -in crt证书文件路径 -out 输出路径/test.cer -outform der


三、工程配置AFNetworking 3.x版本

将整好的cer证书导入工程中,然后在info.plist中设置NSAppTransportSecurity参数

ios-App使用AFNetworking支持https(CA证书和自签证书)_第1张图片

其中192.168.1.100就是IP域名,比如百度的baidu.com

还有就是这样设置比以前

这样粗暴的设置好处在于,你工程中的网路通信只认这个证书下的IP,其他都say NO!


然后进行AFNetworking配置

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

    manager.responseSerializer =[AFHTTPResponseSerializer serializer];

    AFSecurityPolicy *policy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];

    policy.allowInvalidCertificates = YES;//客户端是否信任非法证书

    policy.validatesDomainName = NO;//是否在证书域字段中验证域名

    manager.securityPolicy = policy;

    //关闭缓存避免干扰测试

    manager.requestSerializer.cachePolicy = NSURLRequestReloadIgnoringLocalCacheData;

再下面就是正常的post或者get请求,而且不用捕获cer证书路径然后赋值给AFSecurityPolicy对象,它自动寻找cer证书配置。


记录积累,希望能对你们有帮助!!

你可能感兴趣的:(ios-App使用AFNetworking支持https(CA证书和自签证书))