美文网首页
iOS 用免费证书来适配HTTPS

iOS 用免费证书来适配HTTPS

作者: Mortimey_yt | 来源:发表于2017-04-20 11:28 被阅读116次
    1. iOS单向验证

         //先导入证书,找到证书的路径
       NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"证书名" ofType:@"cer"];
      NSData *cerData = [NSData dataWithContentsOfFile:cerPath];
       //AFSSLPinningModeCertificate 使用证书验证模式
       AFSecurityPolicy *securityPolicy = [AFSecurityPolicy  policyWithPinningMode:AFSSLPinningModeCertificate];
      //allowInvalidCertificates 是否允许无效证书(也就是自建的证书),默认为NO
      //如果是需要验证自建证书,需要设置为YES
      securityPolicy.allowInvalidCertificates = YES;
      //validatesDomainName 是否需要验证域名,默认为YES;
      //假如证书的域名与你请求的域名不一致,需把该项设置为NO;如设成NO的话,即服务器使用其他可信任机构颁发的证书,也可以建立连接,这个非常危险,建议打开。
      //置为NO,主要用于这种情况:客户端请求的是子域名,而证书上的是另外一个域名。因为SSL证书上的域名是独立的,假如证书上注册的域名是www.google.com,那么mail.google.com是无法验证通过的;当然,有钱可以注册通配符的域名*.google.com,但这个还是比较贵的。
      //如置为NO,建议自己添加对应域名的校验逻辑。
      securityPolicy.validatesDomainName = NO;
      NSSet *set = [[NSSet alloc] initWithObjects:cerData, nil];
      securityPolicy.pinnedCertificates = set;
      
      //在AFN设置上securityPolicy
      AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
      manager.securityPolicy = securityPolicy;      
      
    2. 双向认证:请参考链接:http://www.jianshu.com/p/9e573607be13

    3. 常见错误:


      MM_yt_1.pngMM_yt_1.png

      错误码: "failure = Error Domain=NSURLErrorDomain Code=-999",断点跟踪发现,


      MM_yt_2.pngMM_yt_2.png
      // 这是因为证书的问题,证书多加密了一层BASE64加密
    4. 解决办法:右键用文本编辑软件打开就能看到


      MM_yt_3.pngMM_yt_3.png
      MM_yt_4.pngMM_yt_4.png

      第一种方法:把证书里面的字符串复制出来,然后解BASE64后再转Data。

      NSData *cerData = [[NSData alloc] initWithBase64EncodedString:httpsKEY options:0];
      

    注意:要把如下内容去掉只保留中间的字符串
    -----BEGIN CERTIFICATE-----
    -----END CERTIFICATE-----
    第二种方法:用mac系统的字符串工具把证书导入进来,然后再导出成cer,这个cer就可以直接使用.
    // 双击cer文件,在钥匙串中找到该证书

    // MM_yt_7.pngMM_yt_7.png
    // 然后直接导出即可

    相关文章

      网友评论

          本文标题:iOS 用免费证书来适配HTTPS

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