Certificates(证书),Identifiers(标识符),Devices(设备),Provisioning Profiles(供应配置文件)
1.开发者账号
2.签名证书 *****
3.标识符(Identifiers)
4.设备(Devices)
5.APP授权机制 *
6.配置文件 ****
7.ipa文件的签名和安全验证 *****
证书(Certificates)
苹果开发者证书也是一样,颁发者:自己,拥有者:安装证书的电脑;证明的能力:可以打包某应用程序
- 数字证书是一个经证书授权中心数字签名的包含公开密钥拥有者信息以及公开密钥的文件。具有时效性,只在特定的时间段内有效。
开发者证书能力来源
向Member Center申请证书的过程,其实就是将在本地生成的certSigningRequest文件提交给苹果,让它进行签名授权的过程。certSigningRequest这个文件包含以下内容:
- 申请者信息,此信息是用申请者的私钥加密的。
- 申请者公钥,此信息是申请者使用的私钥对应的公钥。
- 摘要算法和公钥加密算法。
当苹果用私钥对其签名(授权)之后,我们便可以获得一个证书文件。拥有该证书后,我们便可以用对应的私钥对APP签名了。当iOS设备拿到APP时便可以通过证书中的公钥来验证APP的正确性,同时iOS设备本身可以验证证书的是否被授权,因为该证书是苹果自己签名的证书。
被苹果签名的证书会随APP一起打包到ipa文件中,并提交到App store中。
当我们获得签名证书之后,还需要一个证书来验证证书是否被正确授权,该证书就是Worldwide Developer Relations Certificate Authority证书。该证书一般都会随Xcode一起安装到我们的电脑中,也可以从Member Center去下载。所以如果没有该证书,开发者将不能使用对应的私钥对APP的签名,因为不能确保证书是否被授权。该证书也就是网上有提到媒介证书(Intermediate Certificate)。
证书的类型
苹果为开发者提供三种证书类型,用来在不同环境下使用,方便开发者的调试和测试。
- 开发证书:平时用来进行真机调试的证书,用该证书签名的APP,只能安装在指定的设备上。
- 测试证书:不可以用来真机调试的证书,但是可以编译到指定的真机上(不可以进行调试)。主要用来提交给测试进行功能的验证,和开发证书的区别在于,它和发布证书类似处于非沙盒坏境。但是用该证书签名的APP无法提交到App store,只能安装在指定设备上。
- 发布证书:不可以用来调试和测试,也不能安装在指定设备上,只能提交到App store。
使用企业(Enterprise)账号下的发布证书签名的APP可以安装到所以设备上,但是不能提交到App store。
授权机制 (Entitlements)
授权机制决定了哪些系统资源在什么情况下允许被一个应用使用。简单的说它就是一个沙盒的配置列表,上面列出了哪些行为被允许,哪些会被拒绝。Xcode 会将这个文件作为--entitlements参数的内容传给 codesign。
在 Xcode 的 Capabilities 选项卡下选择一些选项之后,Xcode 就会生成这样一段 XML。 Xcode 会自动生成一个 .entitlements 文件,然后在需要的时候往里面添加条目。当构建整个应用时,这个文件也会提交给 codesign 作为应用所需要拥有哪些授权的参考。这些授权信息必须都在开发者中心的 App ID 中启用,并且包含在配置文件中。
授权列表在Member Center中的App ID中配置,这样便可以对应到具体的APP。
配置文件(Provisioning Profiles)
上述提到了证书可以证明APP的所属以及APP的完整性,保证APP的本身的安全。但是却不能细化到APP所使用的服务被苹果认可,比如APN推送服务,并且证书无法限制调试版APP的装机规模。于是苹果想出了mobileprovision。一个mobileprovision文件包含一下内容:
- AppID 这里的AppId可以是精准类型的也可以是通配符类型。
- 证书列表 在多人协议开发时,一个mobileprovision文件中可以包含多个证书文件。
- 功能授权列表
- 可安装的设备列表 测试和调试mobileprovision文件中包含设备列表,mobileprovision发布类型的文件中则不包含设备列表。
- 苹果的签名
上述提到的苹果的签名是用的苹果自己的私钥对应的公钥是Worldwide Developer Relations Certificate Authority证书(媒介证书)中的公钥,所以该文件生成后,我们是不能进行修改的,必须从Member Center中配置并生成。
配置文件的区分
- 从mobileprovision文件中是否包含设备列表,可以分为带device信息的描述文件和不带device信息的描述文件如图:
- 也可以根据配置文件中包含的证书文件的类型来区分:开发类型、测试类型、发布类型。
- 也可以根据配置文件中包含的App ID来做区分,如果文件中App ID是精准类型的,那么该配置只能用来对指定的APP进行使用。如果是通配类型的,那么该证书可以用来对匹配的Bundle ID的APP进行使用。如果是Company类型的开发者账号,可以生成一个供团队使用的Team Provisioning Profile,通过这个配置文件,团队内成员可以共用一个配置文件来进行开发调试,当然,App ID得指定成通配类型的。mobileprovision文件结构如下:
总的来说描述文件就是整合了证书、AppID、设备以及功能授权列表,从而确定了可由哪台电脑,把哪个App,安装到哪台手机上面。
mobileprovision文件是一个配置文件,由苹果签名后发布给开发者的。其中包含了证书、App ID、设备列表、授权列表。通过这些信息从而确定了可由哪台电脑,把哪个App,安装到哪台手机上面。所以证书和mobileprovision文件是签名和打包的两个必要文件。
参考链接:
1.http://www.enkichen.com/2016/01/15/ios-certification-and-code-sign-note/
2.http://www.jianshu.com/p/9d9e3699515e
3.http://www.codexiu.cn/ios/blog/10679/
4.http://blog.fir.im/ios-appyan-fa-de-zui-hou-chong-ci-nei-ce-yu-bu-shu/
5.http://blog.csdn.net/hherima/article/details/45583865