前言补序:本文源于bang's blog的指导,QiShare整理了对iOS签名机制的知识。在此还要感谢bang神的原做。git
由于苹果的安全策略,经过签名机制保证手机上的每一个App都是通过苹果认证的。 App的安装方式有四种:github
App Store
安装。Xcode
安装。Ad-Hoc
测试证书打包的App,数量限制100。In-House
企业版证书打包App,信任企业证书后可使用。因为不须要提交苹果审核,因此苹果没办法对App进行签名,所以苹果采用了双重签名的机制。Mac电脑有一对公私钥,苹果仍是原来的一对公私钥。安全
苹果只是肯定这里的安装行为是否合法,不会验证App内容是否修改。服务器
注: 证书请求文件(CertificateSigningRequest.certSigningRequest),用于绑定电脑,文件中应该有Mac电脑的公钥。微信
Xcode打包App生成ipa文件,经过iTunes或者蒲公英等第三方发布平台,安装到手机上。流程步骤基本和真机调试相同,差异在于第4步:测试
企业版证书签名验证流程和Ad-Hoc差很少。只是企业版不限制设备数,并且须要用户在iOS设备上手动点击信任证书。.net
经过真机调试安装和证书打包安装,不加限制,可能会致使被滥用(不经过App Store,只经过第三方发布平台就能安装),所以苹果加了两个限制:在苹果注册过的设备才能够安装;签名只针对某一个App。3d
在上述第4步,打包证书进App中时,还须要加上容许安装的设备ID和App对应的APPID等数据(Profile文件)。调试
根据数字签名的原理,只要数字签名经过验证,第 5 步这里的设备 IDs / AppID / Mac公钥 就都是通过苹果认证的,没法被修改,苹果就能够限制可安装的设备和App,避免滥用。
苹果还要控制iCloud/push/后台运行等,这些都须要苹果受权签名,苹果把这些权限开关统称为:Entitlements,去让苹果受权。
所以证书中可能包含不少东西,不符合规定的格式规范,因此有了Provisioning Profile(描述文件),描述中包含了证书以及其余全部的信息及信息的签名。
签名方式 | 说明 |
---|---|
App Store | 用于发布到App Store。使用的是发布证书(Cer)。 |
Ad Hoc | 安装到指定设备上,用于测试。使用的是发布证书(Cer)。 |
Enterprise | 企业版证书签名。 |
Development | 安装到指定设备,用于测试。使用的是开发证书(Cer)。 |
embedded.mobileprovision
。embedded.mobileprovision
文件。embedded.mobileprovision
是通过苹果认证以后,从Cer中取出Mac公钥,验证App签名,及设备id列表、权限开关是否对应。
- 其余人想要编译签名App时应怎么作? 简单就是把私钥给他。私钥也是从 钥匙串 中导出,就是
.p12
文件,其余Mac导入私钥后就能够正常使用了。
- 查看ipa包中注册的设备ID 解压.ipa文件,获得App数据包,显示包内容,找到
embedded.mobileprovision
文件所在目录,运行命令security cms -D -i embedded.mobileprovision
名词概念 | 说明 |
---|---|
证书请求文件(CertificateSigningRequest.certSigningRequest) | 本地公钥。 |
证书(Cer) | 公钥及苹果签名后的信息。 |
Entitlements | 包含了 App 权限开关列表。 |
p12 | 本地私钥,能够导入到其余电脑。 |
Provisioning Profile | 包含了 证书 / Entitlements 等数据,并由苹果后台私钥签名的数据包。 |
参考文章:
关注咱们的途径有:
QiShare(简书)
QiShare(掘金)
QiShare(知乎)
QiShare(GitHub)
QiShare(CocoaChina)
QiShare(StackOverflow)
QiShare(微信公众号)
推荐文章:
iOS 扫描二维码/条形码
iOS 了解Xcode Bitcode
iOS 重绘之drawRect
iOS 编写高质量Objective-C代码(八)
奇舞周刊