iOS 访问 自签名 HTTPS

Background:

最近项目组长要求做一个客户提出的的需求, 支持客户内网服务器. 而他的服务器为了省事直接升级 HTTPS 后用了假证书. 于是, 开始了iOS7,8,9系统下的各种坑..

Content:

对于没有 CA 认证过的 HTTPS 是不能够被直接信任的, 称为自签名 HTTPS, 访问此类服务器时会有类似下面的提示:

MAC OSX Safari:

iPhone iOS Safari:

但是开发过程中, 我们使用的 UIWebView 和 WKWebView 并不会跳出此弹框来让我们选择.所以, 我们需要在代码内进行手动添加信任.
首先我们需要在 info.plist 内添加此节点:

iOS 7 :

目前市面的 APP 还是有很多需要兼容 iOS7 的系统的, 而 WKWebView 最低支持 iOS8.0系统, 所以在7上访问 自签名 HTTPS 时, 必须使用 UIWebView ,可以按以下步骤:
1, 首先拿到需要特殊处理的链接.(i:可以通过服务器下发, 只有公司信任的此类 HTTPS 可以被访问. ii: 全部HTTPS允许, 存在安全隐患, 但操作简单.)
2, 使用此链接创建一个 NSURLConnection 对象, 并设置代理, 实现 NSURLConnectionDelegate 的三个方法:

NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:[[NSURLRequest alloc] initWithURL:[NSURL URLWithString:URLString]] delegate:self];

- (BOOL)connection:(NSURLConnection *)connection canAuthenticateAgainstProtectionSpace:(NSURLProtectionSpace *)protectionSpace

{

return [protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust];

}

- (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge

{

if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust])

{

[challenge.sender useCredential:[NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust]forAuthenticationChallenge:challenge];

}

//if ([self.trustedHosts containsObject:self.trustedURL]) {

[challenge.sender continueWithoutCredentialForAuthenticationChallenge:challenge];

//}

}

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response

{

[self.webView loadRequest:[[NSURLRequest alloc] initWithURL:[NSURL URLWithString:self.trustedURL]]];

[connection cancel];

}

iOS8:

iOS8开始, 可以使用苹果推出的全新的 web 类库, 它由原来的 UIWebView 重新封装优化后形成的类和3个协议组成. 由于苹果的 BUG, WKWebView 在 iOS8 上访问 self-signed HTTPS 并不会回调 -didReceiveChallenge, 所以想在 iOS8上访问 自签名 HTTPS 还是得使用 UIWebView. 步骤同上.

iOS9:

iOS9, 苹果默默修复了 WKWebView 的-didReceiveChallenge方法. 使用WKWebView 和 UIWebView 类似:

[self.wkWebView loadRequest:request];

self.wkWebView.navigationDelegate = self;

- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler {

decisionHandler(WKNavigationActionPolicyAllow);

}

- (void)webView:(WKWebView *)webView didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition, NSURLCredential * _Nullable))completionHandler {

if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust])

{

[challenge.sender useCredential:[NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust]forAuthenticationChallenge:challenge];

}

//if ([self.trustedHosts containsObject:self.trustedURL]) {

[challenge.sender continueWithoutCredentialForAuthenticationChallenge:challenge];

//}

completionHandler(NSURLSessionAuthChallengeUseCredential, [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust]);

}

而平时我们使用 AFNetworking 对 self-signed HTTPS server 进行 POST 和 GET 的时候也可以使用 NSURLConnection 进行手动添加信任操作.

iOS访问 self-signed(自签名) HTTPS相关推荐

  1. macOS Chrome无法访问自签名https页面问题的解决办法

    问题描述: macOS Chrome无法访问自签名https页面,以往版本可以选择跳过,继续访问,但是新版本Chrome不允许继续,并显示ERR_CERT_INVALID: 解决办法: 在Chrome ...

  2. 转载:Openssl生成rsa和椭圆曲线加密公钥密钥创建根ca签名https服务器证书签名...

    转载:Openssl生成rsa和椭圆曲线加密公钥密钥创建根ca签名https服务器证书签名 Openssl生成rsa和椭圆曲线加密公钥密钥创建根ca签名https服务器证书签名 July 20, 20 ...

  3. 为iOS的mobileconfig文件进行签名

    Safari获取UDID需要安装.mobileconfig文件, 但是,我们在安装了.mobileconfig后,返现配置描述文件打开显示"unsigned" 或者"尚未 ...

  4. 漫谈iOS程序的证书和签名机制 1

    原文:漫谈iOS程序的证书和签名机制 接触iOS开发半年,曾经也被这个主题坑的摸不着头脑,也在淘宝上买过企业证书签名这些服务,有大神都做了一个全自动的发布打包(不过此大神现在不卖企业证书了),甚是羡慕 ...

  5. 【转】漫谈iOS程序的证书和签名机制

    转自:漫谈iOS程序的证书和签名机制 接触iOS开发半年,曾经也被这个主题坑的摸不着头脑,也在淘宝上买过企业证书签名这些服务,有大神都做了一个全自动的发布打包(不过此大神现在不卖企业证书了),甚是羡慕 ...

  6. iOS逆向之自动化重签名

    iOS逆向之自动化重签名 准备工作 非越狱的iPhone手机 用PP助手下载: 微信6.6.5(越狱应用) 步骤 新建工程"自动化签名",在工程目录下新建APP文件夹放置需要重签名 ...

  7. ios 企业证书 ipa 重新签名发布

    提示:暂时不能用了,企业证书滥用 ios 企业证书 ipa 重新签名发布 1. 应用场景 当前有一个 未用企业证书签名的 ipa 文件,默认是不可以直接安装到设备上的:我们需要用企业版证书签名: 当前 ...

  8. ios 访问网络共享_如何从iOS设备无线访问网络共享

    ios 访问网络共享 Syncing files between your computer and your iOS device via iTunes can be tedious and req ...

  9. ios 访问版本信息 { resultCount:0, results: [] }

    IOS 访问版本信息https://itunes.apple.com/lookup?id=APPID ,返回信息为 { "resultCount":0, "results ...

最新文章

  1. 密码太多记不住?SSO帮你轻松访问VDI及外部资源
  2. 【LeetCode】687. 最长同值路径
  3. COGS-363-土地购买-斜率优化
  4. 微软 VS Code 有 1400 万用户,而全球开发者才 2400 万
  5. 1019 数字黑洞 (20 分)(c语言)
  6. linux常用命令汇总(pwd,echo,history,nano)
  7. create报错不是函数_各种SQL中关于日期函数的那些事(建议收藏)
  8. Intel张旭:通信和计算的融合将是5G的关键
  9. 为什么找不到解决方案?--答案就是:转个弯 这里以“解决表示图左边缺失线条、边缘线、分割线问题”为例...
  10. IIS6 下的Asp.net服务器安全配置
  11. DBeaver 7.2.4 发布,可视化数据库管理平台
  12. 达索系统携百世慧科技亮相第二届四川装备智造国际博览会
  13. java游戏少年张三丰的原代码_RPG大作《少年张三丰》完美游戏攻略
  14. 只有360浏览器能打开别的都打不开
  15. [源码分析]go-graceful如何shutdown gracefully
  16. 预测师:2007年将是中间商艰难的一年
  17. 解决tomcat启动-Skipping unneeded JARs during scanning can improve startup time and JSP compilation time
  18. CentOS7.4配置OpenLDAP Client集成AD服务及SSSD服务与SSH服务
  19. 配置pcie网卡指示灯
  20. 2021年危险化学品生产单位安全生产管理人员试题及解析及危险化学品生产单位安全生产管理人员模拟考试

热门文章

  1. java 建一个car_大学java习题 :定义一个汽车类car
  2. 转载:图像抠图算法学习 -Shared Sampling for Real-Time Alpha Matting
  3. CPU 到底是怎么识别代码的?
  4. 技术前沿---5G技术的实现原理
  5. 常指针和指向常量的指针
  6. 网络(思科)——静态路由
  7. CSS 标签诡异添加 injected stylesheet
  8. 「会员卡管理系统」 · Java Swing + MySQL JDBC开发
  9. 5G对广播电视的影响以及应用-论文
  10. 滴滴云服务器快速配置搭建滴滴云GPU云服务器搭建深度学习环境