iOS开发中的MITM代理和SSL证书安装指南

在开发和调试网络应用时,能够捕获客户端和服务器之间的传输数据是非常有用的。对于使用SSL的Web服务开发来说,引入MITM代理会生成一个关于代理返回的不受信任证书的安全警告。如果客户端是Web浏览器,只需要在浏览器警告提示上接受异常即可。对于使用NSURLConnection或相关类的iOS原生应用来说,这有点棘手,因为它会生成“不受信任的服务器证书”错误。虽然可以通过使用纯HTTP进行开发或编程方式禁用证书验证来绕过这个问题,但这些技术需要在开发结束时进行代码更改。忘记这样做将明显导致应用程序的安全问题。此外,在最终代码更改之前,也无法对SSL基础设施进行功能或性能测试。更好的策略是在客户端密钥链中安装证书(最好是代理使用的根证书)作为受信任的证书。本文将提供从安装MITM代理到在客户端设备和模拟器上设置自定义根CA的逐步指南。

iOS模拟器上安装证书并不简单。幸运的是,有关此主题的一些很好的研究已经完成。本文讨论的很多信息都来自这些参考资料。其中一些信息可能已经过时,但对于那些想要寻找更多细节和历史的人来说,它们是获取信息的绝佳来源。即使不使用MITM代理,也可能遇到需要使用自定义证书开发iOS应用程序的其他情况。例如,为已经使用内部自定义根CA的公司开发应用程序,或者开发环境没有配置任何设备或模拟器信任的知名根CA签名的证书(可能是由于成本或部门间开销)。本文提供的信息对所有这些情况也将有所帮助。

选择代理

有许多免费的MITM代理可以用来嗅探SSL流量。这里,使用OWASP ZAP来说明这一点。选择OWASP ZAP有几个原因:

  • 它支持动态站点证书生成,由自定义根CA证书签名 - 这个功能允许在设备中只安装一个自定义根CA证书,反过来,允许设备上的所有SSL主机的流量自动被设备上的任何应用程序接受。这将是示例中使用的战略。
  • 它支持自定义密钥生成 - 这降低了开发人员的安全风险,因为他们很可能会在自己的设备中安装那个根CA证书作为受信任的根CA。一些代理只带有一个根证书,而且不容易更改。虽然机会很小,但任何下载了相同私钥的人都可以解密SSL流量,从而使开发人员的设备本身容易受到攻击。使用自定义生成的密钥,这就不是问题了。
  • 它还支持与其他代理相比具有竞争力的功能列表。

在OSX上安装OWASP ZAP并将其连接到物理iOS设备

从下载OWASP ZAP。解压缩并将应用程序移动到/Applications文件夹(可选)。启动OWASP ZAP。系统会提示生成根CA证书。生成并保存它(一个.cer文件)。将证书附加到电子邮件并发送给自己。在iOS设备上打开带有证书附件的电子邮件。点击附加的证书并将其安装到设备上。默认情况下,代理侦听localhost:8080。转到Tools -> Options和Local proxy标签,将Address更改为0.0.0.0,允许来自所有接口的流量,并在必要时更新端口号。将设备网络HTTP代理指向运行OWASP ZAP的计算机。指定IP和端口。使用Safari或使用任何使用HTTP/HTTPS的应用程序浏览。流量现在应该被OWASP ZAP捕获。

使用代理与iOS模拟器

设置主机计算机的Internet连接以使用代理。模拟器使用主机OSX计算机的Internet连接设置。所以需要更改网络设置。确保https流量使用上面设置的代理。

这是棘手的部分。每个版本的iPhone模拟器都有自己的位置来存储自定义受信任证书信息。要添加自定义根CA证书,需要更新相应的SQLite文件。将它们添加到OSX系统证书列表只会帮助消除代理流量时的SSL错误。然而,它将允许代理OSX中的Safari Web应用程序流量。提到的SQLite数据库(称为TrustStore.sqlite3)存储在~/Library/Application Support/iPhone Simulator//Library/Keychains/文件夹中。~/Library文件夹默认在Finder中隐藏。可以使用“chflags”命令方便地取消隐藏。

chflags nohidden ~/Library

像其他SQLite数据库一样,可以使用最喜欢的编辑器查看和编辑它们。使用SQLite Manager Firefox插件进行演示。然而,iPhone模拟器没有UI让添加证书。即使通过Safari访问自定义CA证书(通过将证书放在Web服务器上),只能看到设置应用程序弹出,其他什么也不会发生。幸运的是,iOS设备和模拟器都使用了相同的机制,所以可以利用物理设备中已经接受的自定义证书的SQLite数据库,如本文前面所述。要获取设备的SQLite数据库,请使用一个免费的桌面应用程序。不需要越狱。使用iTunes为之前使用的设备创建备份。确保关闭加密。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485