美文网首页网络通信GitHub 中文社区iOS 杂谈
AFNetworking3.x使用自签名证书建立https连接

AFNetworking3.x使用自签名证书建立https连接

作者: Amazing大龙大龙 | 来源:发表于2016-11-26 17:20 被阅读839次

这是第一次在简书写东西,也是第一次在网络上写这类文章,所以写得不好的话,也请谅解下。

在网上找了许久,没找到一个完整的关于afn设置自签名证书进行https链接的文章,也许是我搜索的方式不对,好在现在实现了afn使用自签名证书进行https链接。

https://gxl520.top/jianshu.php 这是这篇文章使用的自签名证书的https站点。

配置前准备

  • cer证书文件


    屏幕快照 2016-11-26 下午3.31.00.png
  • AFNetworking3

导入工程啥的也就不说了

下面开始干正经事

  • 导入文件到项目
cer、afn导入工程
  • 为站点添加白名单
白名单
  • 添加主要代码
-(void)postToWeb{
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    manager.responseSerializer = [AFHTTPResponseSerializer serializer];
    
    // 安全验证
    AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];
    /*
     AFSSLPinningModeNone: 代表客户端无条件地信任服务器端返回的证书。
     AFSSLPinningModePublicKey: 代表客户端会将服务器端返回的证书与本地保存的证书中,PublicKey的部分进行校验;如果正确,才继续进行。
     AFSSLPinningModeCertificate: 代表客户端会将服务器端返回的证书和本地保存的证书中的所有内容,包括PublicKey和证书部分,全部进行校验;如果正确,才继续进行。
     */
    securityPolicy.allowInvalidCertificates = YES;//是否信任非法证书(自建证书)
    securityPolicy.validatesDomainName = NO;//是否验证域名有效性
    manager.securityPolicy = securityPolicy;
    NSDictionary *postDic = @{@"jianshu":@"1"};
    
    [manager POST:@"https://gxl520.top/jianshu.php" parameters:postDic progress:^(NSProgress * _Nonnull uploadProgress) {
        
    }success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        NSString *resultStr = [[NSString alloc]initWithData:responseObject encoding:NSUTF8StringEncoding];
        NSLog(@"请求成功,%@",resultStr);
    }failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        NSLog(@"请求失败:%@",error);
    }];
}

工程一览

工程

抓包查看

抓包结果

已经加密访问了web了

假设服务器与内置证书不符

另一个cre证书文件

那么好像就请求失败了

失败

而如果将

AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];

换成

AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];

AFSSLPinningModeNone: 代表客户端无条件地信任服务器端返回的证书。
AFSSLPinningModePublicKey: 代表客户端会将服务器端返回的证书与本地保存的证书中,PublicKey的部分进行校验;如果正确,才继续进行。
AFSSLPinningModeCertificate: 代表客户端会将服务器端返回的证书和本地保存的证书中的所有内容,包括PublicKey和证书部分,全部进行校验;如果正确,才继续进行。

那么返回的结果则

不校验证书的交互

11月29日,由于写的时候想上传demo的,后来忘了补充一点:

注释afn中的两行代码

以上是我的一些学习分享,做为自己的学习笔记

  来自一名ios初学者的文章

对于这篇https链接的理解是:与服务器进行交互时,用AFSSLPinningModeCertificate 验证了是我的服务器,然后使用https链接。 有出现中间人的话,那么必定是不正确的服务器证书,我的app验证不过 也就不能交互了吧。不知道我理解错了没有

也还有一个疑问,不知道我这模拟虚假服务器的方式是否正确。

有哪里不对,望纠正我的无知~ 感激

相关文章

  • AFNetworking3.x使用自签名证书建立https连接

    这是第一次在简书写东西,也是第一次在网络上写这类文章,所以写得不好的话,也请谅解下。 在网上找了许久,没找到一个完...

  • Retrofit OkHttp 使用自签名证书连接 HTTPS

    超文本传输安全协议(英语:Hypertext Transfer Protocol Secure,缩写:HTTPS,...

  • 用自签名证书(self-signed certificate)终

    本文用swift,实现在使用自签名证书的情况下,连接https服务器。Allow Arbitrary Loads设...

  • HTTPS网站

    使用 HTTPS 连接时,服务器要求有公钥和签名的证书。 当使用 https 连接,服务器响应初始连接,并提供它所...

  • Netty中自签名证书的颁发

    概要 自签名证书的用途一般我们需要注册CA证书给网站添加HTTPS,不过本地测试的时候,我们可以使用自签名证书。自...

  • nginx配置自签名https

    nginx配置https是需要CA颁发证书的,为了测试方便,我们可以使用自签名证书1.如何生成自签名证书1.1:我...

  • Apache安装https-免费SSL证书Let’s Encry

    自签名证书:无需使用第三提供的SSL证书,实现https,但浏览器会提示该签名不安全,但仍然可以使用https访问...

  • Flutter 自签名证书

    前言 Flutter项目中服务器使用了自签名证书,如果直接使用https请求或者wss请求的话会报证书签名错误。 ...

  • oracle ohs修改https端口

    oracle ohs默认是开启https服务,证书使用自签名证书,端口是4443不是https默认的443。关于如...

  • 踩坑记

    1、android自签名证书Glide加载不出图片 关于https中自签名证书的介绍以及OkHttp中解决自签名证...

网友评论

  • 黄大爷小笙子:如果证书过期 ,重现导入工程文件 ,岂不是app都需要强制升级才可以用
  • 辣条少年J:请问你的run.cer证书哪里用到了呢?好像没有用到哦
    Amazing大龙大龙:@明天你好_eaab 会自动在项目内查找证书
    辣条少年J:难道说AFN会自动在工程项目下去搜索这个证书?
  • FELIXIOS:您好,我想问一下https://gxl520.top/jianshu.php 这个链接的自签名证书是怎么生成的...我这边生成的跟您生成的有很大的出入...希望能指点一下
    Amazing大龙大龙:@FELIXIOS 签名是给整个域名签名。证书用openssl生成。具体教程网上很多,目前我的gxl520.top是用的免费的证书。
  • 48e030ceaec7:有Demo吗
    Amazing大龙大龙:@吴慕 现在demo改了 源码就和内容一样的啦
  • Python数据分析实战:如果我用的是后台添加s后的https,那我的Afn还要添加证书吗
    Amazing大龙大龙:@SilenceYaung 如果用的是系统信任的权威ca颁发的证书,那afn只需要简单配置就行了
  • 多加辣椒:我这边的证书是.p12的,但一直请求失败,出现的是-999的错误,后来又将allowInvalidCertificates设为No,但还是一直请求失败,求指教这是出现了什么问题
    Amazing大龙大龙:@歪樣 要转换成cer的,设置ATS白名单
    多加辣椒:@Amazing大龙大龙 p12证书还需要转cer吗?应该是自签名证书,你指的设置白名单是在info.plist文件中设置ATS吗?安卓那边用的也是p12证书,他那边请求没什么问题,我这边一直请求失败显示-999的错误
    Amazing大龙大龙:@歪樣 p12证书转成cer了么?服务端是自签名的证书还是?有没有设置白名单

本文标题:AFNetworking3.x使用自签名证书建立https连接

本文链接:https://www.haomeiwen.com/subject/nllgpttx.html