描述文件服务器
前面的文章咱们已经介绍了简单的应用签名可是这种签名方式并不能解决应用滥用的问题,因此苹果又加了两个限制.第一限制在苹果后台注册过的设备才能够安装.第二限制签名只能针对某一个具体的APP.而且苹果还想控制App里面的iCloud/PUSH/后台运行/调试器附加这些权限,因此苹果把这些权限开关统一称为Entitlements(受权文件).并将这个文件放在了一个叫作Provisioning Profile(描述文件)文件中.描述文件是在AppleDevelop网站建立的(在Xcode中填上AppleID它会代办建立),Xcode运行时会打包进入APP内.网站
因此咱们使用CSR申请证书时,咱们还要申请一个东西!! 就是描述文件!!流程以下调试
这个描述文件里面就是 能够安装的设备有哪些.. APP的ID是什么.. 权限是些什么! 在开发时,编译完一个 APP 后,用本地的私钥M对这个APP进行签名,同时把从苹果服务器获得的 Provisioning Profile 文件打包进APP里,文件名为embedded.mobileprovision,把 APP 安装到手机上.code
咱们能够利用$security cms -D -i embedded.mobileprovision命令查看Provisioning profile内容,这些Xcode建立的Profile文件都存放在~/Library/MobileDevice/Provisioning Profiles/目录下cdn
注意! 每次咱们新建项目其实会生成一个描述文件!选择运行到手机上!! 咱们只须要编译一下!在APP包里面就能够看到. blog
那么为了便于咱们查看信息! 咱们能够经过Xcode来查看!!资源
固然,Provisioning profile自己也是经过签名认证的,因此别想着你能够更改里面的东西来达到扩充权限\设备的目的.只有老老实实的去网站向Apple申请一份权限更多\设备更多的profile。开发
总体的流程get
首先咱们总结一下刚才的一些名词it
流程以下:
第 1 步对应的是 keychain 里的 “从证书颁发机构请求证书”,这里就本地生成了一对公私钥,保存的 CertificateSigningRequest 里面就包含公钥,私钥保存在本地电脑里.
第 2 步向苹果申请对应把 CSR 传到苹果后台生成证书.
第 3 步证书下载到本地.这时本地有两个证书.一个是第 1 步生成的私钥,一个是这里下载回来的证书,keychain 会把这两个证书关联起来,由于他们公私钥是对应的,在XCode选择下载回来的证书时,实际上会找到 keychain 里对应的私钥去签名.这里私钥只有生成它的这台 Mac 有,若是别的 Mac 也要编译签名这个 App 怎么办?答案是把私钥导出给其余 Mac 用,在 keychain 里导出私钥,就会存成 .p12 文件,其余 Mac 打开后就导入了这个私钥.
第 4 步都是在苹果网站上操做,配置 AppID / 权限 / 设备等,最后下载 Provisioning Profile 文件。
第 5 步 XCode 会经过第 3 步下载回来的证书(存着公钥),在本地找到对应的私钥(第一步生成的),用本地私钥去签名 App,并把 Provisioning Profile 文件命名为 embedded.mobileprovision 一块儿打包进去。因此任何本地调试的APP,都会有一个embedded.mobileprovision(描述文件)从App Store下载的没有.
APP签名的数据 这里对 App 的签名数据保存分两部分
MachOView查看
至此关于iOS应用签名的原理就介绍完了.下篇文章将介绍iOS应用重签名技术. 因为知识水平有限若有错误及不足,欢迎你们留言区评论指正.