加入收藏 | 设为首页 | 会员中心 | 我要投稿 汽车网 (https://www.0577qiche.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

iOS 的 (签名验签)Code Signing 体系

发布时间:2023-04-04 11:12:29 所属栏目:教程 来源:
导读:iOS中的Code Signing体系非常复杂,对新手非常不友好,虽然目前网上已经存在大量文章对此进行比较透彻的分析,最核心的部分已经讲解得非常清楚,我阅读了这些文章后,确实从中学习到不少知识,但我始终还是对Code Si
iOS中的Code Signing体系非常复杂,对新手非常不友好,虽然目前网上已经存在大量文章对此进行比较透彻的分析,最核心的部分已经讲解得非常清楚,我阅读了这些文章后,确实从中学习到不少知识,但我始终还是对Code Signing体系中很多相关的地方有着疑惑,于是决定认真地探究一番。本文会引用一些比较好的文章中的内容和图片,加上一些我个人的理解进行分析,有些内容本文不再重复,有需要的请阅读本文最后的参考文章。

概念
公开密钥加密、数字签名、证书这些通用的基本概念这里不再多说,主要提一下iOS上特有的东西

.certSigningRequest
点击mac OS的钥匙串访问里的 证书助理 -> 从证书颁发机构请求证书,最后会创建出一个.certSigningRequest文件,其实这个过程就是创建了一对公私钥

其中.certSigningRequest文件保存着
申请者信息申请者的公钥
摘要算法
公钥加密算法
私钥保存在 keychain 中
证书
AppleWWDRCA
iOS 以及 mac OS(在安装 Xcode 时)将自动安装 AppleWWDRCA.cer 这个中间证书(Intermediate Certificates),它实际上就是 iOS(开发)证书的证书,即根证书(Apple Root Certificate)。

iOS App Development
iOS的开发证书,在开发阶段进行真机测试时需要用到的证书。可以在苹果开发网站上手动创建,需要上传.certSigningRequest文件;或者使用Xcode自动创建。

iOS distribution
iOS的发布证书,可以用于进行 Ad Hoc 测试、打包上传到 App Store 或者打包成 Enterprisee(In-House) 类型供企业内部使用。可以在苹果开发网站上手动创建,需要上传.certSigningRequest文件;或者使用Xcode自动创建。

.p12
在mac OS的钥匙串访问里选择一张证书,右击该证书,选择导出"xxxxx",然后设置密码,可以导出该证书对应的.p12文件。.p12文件包含个人信息、公钥和私钥,也就是证书 + 私钥。iOS类型的每种证书同时存在数量有限制,而证书是依靠mac OS上的.certSigningRequest文件创建的,所以正常情况下,每种类型的证书只能在有限的Mac电脑上使用,如果需要在更多不同的Mac电脑上进行App开发、测试、签名,可以导出对应.p12文件代替证书来使用。

Provisioning Profile
Provisioning Profile的文件格式为.mobileprovision,里面包含着

可以使用的证书
App ID,由 TeamID 和 BundleID 组合而成,类似于 A1B2C3D4.com.domain.appName 形式
可安装该App的设备列表的UDID
Entitlements,授权文件,列出了App可以进行哪些行为
以上信息的签名
在苹果开发网站上手动创建,或者使用Xcode自动创建。

.ipa文件是iOS上的App安装文件,其实它只是一个压缩包,等同于.zip格式,用mac OS自带的归档实用工具可以直接对它解压,可以看到里面的内容

对比两种情况的.ipa文件,可以看出它里面最主要的是Payload文件夹,而Payload文件夹里面放的就是该App对应的.app文件

右击.app文件,选择显示包内容,可以看到里面的内容

可以看出.app文件主要包含四个部分:

Mach-O格式的二进制可执行文件,这个是一个App最重要的文件,我们编写的Objective-C、Swift代码都被编译在里面
资源文件,包括:.bundle文件,.framework文件,.dylib文件,.nib文件,图片文件,音视频文件,字体文件等所有项目用到的文件
CodeResources,签名信息
embedded.mobileprovision文件,或者entitlements文件
对于没有上传App Store的.app文件,里面会包含embedded.mobileprovision文件,没有entitlements文件
App Store下载的.app文件,里面会包含.entitlements文件,没有embedded.mobileprovision文件
Code Signing
正常情况下(非越狱),所有App想要安装到iOS设备上,只有以下几种方法

非App Store
真机调试
Ad-Hoc
In-House
App Store
无论是哪一种方法,都需要先把iOS项目编译成.app文件,然后进行签名。按照惯例,需要分析一下Code Signing

(编辑:汽车网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章