HTTPS和测试服务器
发布日期:2018-04-27问:我的应用通过HTTPS与服务器对话。生产服务器使用由受信任的证书颁发机构颁发的证书,所以一切都很好。然而,当我的应用程序与使用自签名证书的测试服务器对话时,事情就会失败。如何在我的测试服务器上测试我的应用程序?
答:这里有两种方法,在下面的小节中讨论。
测试证书颁发机构
我们推荐的方法是通过建立一个测试证书颁发机构(CA)来做到这一点。
基本思想是:
1、创建您自己的测试CA
2、使用该CA为您的服务器创建一个数字标识
3、在您的测试设备上安装CA的根证书
这种方法有一些重要的好处:
- 它与所有OS子系统一起工作,而另一种选择,定制HTTPS服务器信任评估,依赖于所有子系统不支持的特定钩子。
- 它不需要你写任何代码
- 因为在你的应用中没有测试代码,所以不可能不小心将应用程序发送给客户
- 您的测试更加实际,因为它使用与生产应用程序相同的代码路径
警告:不要低估这种风险。许多开发人员,包括一些家喻户晓的名字,不得不向他们的应用发布紧急更新,因为他们不小心将服务器信任评估功能关闭了。在某些情况下,这个问题多年来都没有发现,在所有的时间里都暴露了客户的数据。
关于步骤1,如果你没有运行CA的经验,你可以利用在macOS中内置的设施;有关详细信息,请参见为TLS测试创建证书。
关于步骤3,有很多方法可以在测试设备上安装测试CA的根证书。有关如何做到这一点的详细说明,请参阅在您的测试设备上安装CA的根证书
定制HTTPS服务器信任评估
如果您无法使用测试CA,那么您唯一的选择就是定制HTTPS服务器信任评估,以忽略您连接到一个不安全服务器的事实。这里有两个基本步骤:
1、您必须覆盖默认的HTTPS服务器信任评估。在HTTPS服务器信任评估中描述了这样做的技术。
2、如果你的应用程序使用高级的HTTPS API——NSURLSession、NSURLConnection或任何分层的东西——你必须为你的服务器禁用应用传输安全(ATS)。有关详细信息,请参阅信息属性列表的“nsapptransport security”部分。
警告:您必须在您交付给用户的生产环境中删除这些更改。如果不这样做,可能会危及你的应用程序的安全性。
在您的测试设备上安装CA的根证书
在您的测试设备上安装CA的根证书的过程因设备类型而异。下面的部分将介绍最常见的情况。
重要:这里的重点是在应用程序开发期间进行测试。如果您想要出于其他原因安装定制CA——例如,如果您正在为大型企业管理设备——您可以采用其他更好的方法(配置概要文件、MDM等等)。这些方法由AppleCare支持,并在其站点上进行描述。
MacOS
要在macOS上安装CA的根证书,请使用Keychain Access实用程序将根证书添加到系统钥匙链中,然后显式地将其标记为可信的。
IOS设备
在iOS设备上安装CA的根证书有三种常见的方法:
- 将.cer文件放在web服务器上,并在Safari中导航。然后,iOS会询问你是否想要安装并信任根证书。
- 将根证书附加到电子邮件上,然后将其发送给你自己;当你打开附件时,iOS会询问你是否想要安装并信任根证书。
- 使用Apple Configurator来创建一个配置配置文件,其中包括根证书,然后将该配置概要文件拖到主苹果配置器窗口中的设备上。在大多数情况下,您需要在iOS设备本身上完成安装过程。
重要:无论您如何安装根证书,您都必须在“设置”中明确地启用证书信任设置。
IOS模拟器
在模拟器上安装CA的根证书的最快方法是将根证书拖拉到主模拟器窗口。这将启动与您在设备上看到的相同的安装过程。
或者,您可以将根证书放在web服务器上,然后在Safari中导航,就像在真实设备上一样。
重要:就像在设备上一样,您必须在“设置”中明确地启用根证书,即证书信任设置。
watchOS设备
watchOS可以通过配对的iPhone或直接在Apple Watch上运行网络请求。为了使您的CA的根证书在任何情况下都有效,它必须安装在两个设备上。
当你在你的iPhone上安装一个根证书(使用上面描述的一个过程),iOS会问你是否想在iPhone或Apple Watch上安装它。你必须经历两次这个过程,一次是在你的iPhone上安装证书,然后再把它安装在你的Apple Watch上。
重要:iOS 10.3和之后有一个bug,导致它们不显示这个警告(r.34652068)。在这个bug被解决之前,你将不能在Apple Watch上安装你的根证书。只要配对的iPhone可以运行网络请求,你仍然可以在Apple Watch上进行测试。
watchOS模拟器
watchOS模拟器总是通过配对的iPhone模拟器运行网络请求,所以在这个配对模拟器上安装CA的根证书就足以支持watchOS测试。
tvOS设备和模拟器
要在tvOS设备或模拟器上安装CA的根证书,请执行以下操作:
- 把包含根证书的.cer文件放在web服务器上
- 导航到设置>隐私和选择分享Apple TV分析
- 按下遥控器上的播放/暂停按钮;这就带来了一个屏幕,上面列出了安装的概要文件,以及顶部的Add Profile选项。
- 选择添加配置文件
- 输入概要文件的URL并按照屏幕上的说明完成安装过程
重要:与iOS一样,您必须在“设置”中特别启用root证书,即证书信任设置。
文档修订记录
2017-11-02,更新了iOS 11、mac OS 10.13、tvOS 11和watchOS 4。添加了对苹果配置器的引用。
2017-01-25,描述如何使用HTTPS测试服务器的新文档。
参考链接:https://developer.apple.com/library/content/qa/qa1948/_index.html#//apple_ref/doc/uid/DTS4001760