一、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参数
其中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证书配置。
记录积累,希望能对你们有帮助!!