iOS 和 iPadOS 中的 App 代码签名过程
在 iOS 和 iPadOS 中,Apple 会通过强制性代码签名和严格的开发者签名等方式确保 App 安全性。
强制性代码签名
iOS 或 iPadOS 内核启动后,它将控制哪些用户进程和 App 可以运行。为帮助确保所有 App 均来自批准的已知来源并且未被篡改,iOS 和 iPadOS 要求所有可执行代码均使用 Apple 颁发的证书进行签名。设备附带的 App(如“邮件”和 Safari 浏览器)由 Apple 签名。第三方 App 也必须使用 Apple 颁发的证书进行验证和签名。强制性代码签名将信任链的概念从操作系统扩展至 App,并帮助防止第三方 App 载入未签名的代码资源或使用经 App 自身修改代码。
开发者如何给其 App 签名
开发者可通过证书验证(通过 Apple 开发者计划)给其 App 签名。他们还可以在其 App 中嵌入框架,并使用 Apple 颁发的证书(通过团队标识符字符串)对代码进行验证。
证书验证:若要在 iPhone 或 iPad 设备上开发并安装 App,开发者必须向 Apple 注册并加入 Apple Developer Program(Apple 开发者计划)。Apple 首先验证每个开发者(无论是个人还是企业)的真实身份,然后再颁发证书。开发者可使用该证书对 App 进行签名,并将其提交至 App Store 进行分发。因此,App Store 中的所有 App 都是由身份可识别的个人或组织提交的,由此防止恶意 App 的创建。此外,这些应用程序都经过 Apple 的严格审核,帮助确保它们通常可以按照所述的方式运行,并且没有明显的错误或其他明显的问题。除了已经讨论过的技术,这一处理过程还会让用户对所购 App 的品质更加放心。
代码签名验证:iOS 和 iPadOS 允许开发者将框架嵌入其 App 中,使它可被 App 本身使用,也可被 App 中嵌入的扩展项使用。为保护系统并防止其他 App 在其地址空间中载入第三方代码,系统将为启动时所有链接到进程的动态资源库执行代码签名验证。此验证过程通过团队标识符 (Team ID) 完成。团队标识符提取自 Apple 颁发的证书,是由 10 个字符组成的字母数字串,例如 1A2B3C4D5F。程序可链接到系统自带的任何平台资源库,也可以链接到代码签名中具有与主可执行文件相同团队标识符的资源库。因为作为系统一部分发布的可执行文件不具有团队标识符,所以它们只能链接到随系统本身发布的资源库。
验证企业内部专有 App
符合条件的企业可以编写供组织内部使用的企业内部专有 App,并将其分发给员工。企业和组织可以申请加入 Apple Developer Enterprise Program(ADEP,Apple 开发者企业计划)。有关更多信息以及若要检查资格要求,请参阅 Apple Developer Enterprise Program(Apple 开发者企业计划)网站。组织成为 ADEP 的成员后,便可以注册以获得一个预置描述文件,该描述文件允许企业内部专有 App 在其授权的设备上运行。
用户必须安装预置描述文件才能运行这些 App。这有助于确保只有组织的目标用户能够将 App 载入到其 iPhone 或 iPad 上。通过移动设备管理 (MDM) 安装的 App 为隐式受信任 App,因为组织与设备之间的关系已经确立。否则,用户必须在“设置”中批准 App 的预置描述文件。组织还可以限制用户批准来自未知开发者的 App。任何企业内部专有 App 首次启动时,设备必须收到 Apple 的肯定询证,表明允许该 App 运行。