由于项目需求在某网站8数据,发现该网站用的是https自建证书,于是将证书下载下来发现是crt后缀的,但是iOS自建证书是要cer后缀的,于是需要转一下格式
crt证书转cer证书 终端执行以下命令
openssl x509 -in ca.crt -out server.cer -outform der
将导出后的cer证书放到项目bundle中,并作出如下配置
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
AFSecurityPolicy* securityPolicy = [[AFSecurityPolicy alloc] init];
//AFSSLPinningModeNone 这个模式表示不做 SSL pinning,只跟浏览器一样在系统的信任机构列表里验证服务端返回的证书。若证书是信任机构签发的就会通过,若是自己服务器生成的证书,这里是不会通过的。
//AFSSLPinningModeCertificate 这个模式表示用证书绑定方式验证证书,需要客户端保存有服务端的证书拷贝,这里验证分两步,第一步验证证书的域名/有效期等信息,第二步是对比服务端返回的证书跟客户端返回的是否一致。
//AFSSLPinningModePublicKey 这个模式同样是用证书绑定方式验证,客户端要有服务端的证书拷贝,只是验证时只验证证书里的公钥,不验证证书的有效期等信息。只要公钥是正确的,就能保证通信不会被窃听,因为中间人没有私钥,无法解开通过公钥加密的数据。
securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];
//是否允许访问无效或者过期的证书的服务器
securityPolicy.allowInvalidCertificates = YES;
//是否开启域名校验
securityPolicy.validatesDomainName=NO;
manager.securityPolicy= securityPolicy;
参考链接 :
https://www.jianshu.com/p/120150f78153
https://www.jianshu.com/p/6b9c8bd5005a
https://www.jianshu.com/p/4102b817ff2f
网友评论