今天小编通过3大步骤简单介绍一下
iOS签名验证流程:
一. 证书申请
用我们自己的机器生成 CertificateSigningRequest.certSigningRequest 文件,在生成的过程中会产生一对公钥和私钥,私钥已经保存在我们的机器上,这个文件包含了我们的公钥,具体内容如下:
申请者信息,此信息是用申请者的 私钥 加密的。
申请者公钥,此信息是申请者使用的 私钥 对应的公钥。
摘要算法和公钥加密算法
上传 CertificateSigningRequest.certSigningRequest 到 MemberCenter 。 MemberCenter 根据获取到的 公钥 和我们的用户信息,通过 Apple 自己的私钥进行数字签名生成证书,这个证书可以通过安装 Xcode 过程中安装的根证书进行验证。具体证书包含内容如下:
用户的公钥
用户信息
证书机构名称
证书有效期
苹果数字签名 : 通过根证书验证以上信息
下载生成的证书,双击安装就会出现在 钥匙串 中, 钥匙串 会根据证书中的公钥对应上本机器上的私钥。
二. 打包签名
在 MemberCenter 上生成 mobileprovision 下载安装, mobileprovision 包含如下信息:
appid: 每个 app 在 MemberCenter 创建的对应的 id 。
包含哪些证书: 不同证书对应不同功能。
功能授权列表
可安装的设备列表: iOS设备的UDID列表,发布证书应该是通配。
苹果数字签名: 苹果用来验证以上的信息。
通过 Xcode 指定要使用的证书,其实是 指定了签名过程中要使用的 私钥 ,这个私钥是和证书中的公钥相对应的。然后指定对应的 mobileprovision ,由于 mobileprovision 文件中包含了证书,实际上本地证书就是 Xcode 用来指定对应 私钥 用的。
最后通过指定的私钥对需要签名的数据进行数字签名(编译过程在签名之前,这里省略了编译过程,编译后的二进制文件也是要签名的内容),最终将 ipa 包的形式输出, ipa 的文件结构如下:
资源文件: 例如图片、html、等等。
_CodeSignature/CodeResources: plist文件,内容是包内所有数据的数字签名。
可执行文件: 编译后的二进制文件。
mobileprovision: 我们之前通过Xcode指定的包含了证书的文件。
Frameworks: 程序引用的非系统自带的Frameworks。每个Framework的结构跟app其实差不多
三. 验证安装
解压 ipa 包,获取 embedded.mobileprovision ,通过设备上的 Apple 公钥验证该文件的完整性和安全性。
embedded.mobileprovision 文件验证通过,获取该文件内的用户证书,再通过设备上的 Apple 公钥验证该证书的完整性和安全性。
证书验证通过后,获取证书内的我们开发者的公钥。然后通过开发者的公钥验证应用程序包内的数据的完整性和安全性。通过后即可安装。