iOS 用免费证书来适配HTTPS

2017-04-20  本文已影响116人  Mortimey_yt
  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
// 然后直接导出即可
上一篇下一篇

猜你喜欢

热点阅读