证书的相关问题总结
证书的作用是:证明iOS App 内容的合法性和完整性的数字证书。
1. 从流程上讲解每个步骤
(1)App ID (bundle,identify)应用的唯一标识
App ID分为两种:
1.)一种是唯一的App ID 一般采用反域名方式 com.xxxxx.Project
2.) 一种是通配符的App ID 用于表示一组应用程序。com.wanda.* 这种的不能进行推送。
(2)设备 Device
就是可以进行真机测试的设备列表,就是每个Apple设备使用的UDID来唯一的标识。
(3)证书
首先我们理解下证书的概念:证书是由公证处或认证机关开具的证明资格或权利的证件,他是表明事理的一个凭证。凭证的尾部通常会烙印公章。
数字证书:互联网通讯中标志通讯各方身份信息的一串数字,提供了一种在网上验证通信实体身份的方式。是有一个权威的机构(证书授权中心发行)用来识别对方的身份。
数字证书包含:一个公开密钥,名称,证书授权中心的数字签名。
数字证书的特征:时效性。
某个认证领域的根证书是证书授权中心(CA机构)给自己颁发的证书,这个证书是信任链的起点,安装根证书意味着对这个CA认证中心的信任。
我们的Xcode在安装的时候,就自动安装了AppleWWDRCA.cer这个中间证书,这就是信任的起点。
(4)CSR文件
我们可以使用钥匙串创建一个CSR文件,这个CSR文件包含开发者身份信息。同时,keychain 中新增一对public/Private。其中私有的private key始终保存在Mac OS的keychain中。用于签名和对外发布的App。
public key一般随证书散布出去,对App签名进行校验。用户必须保存好本地keychain种的private key 。
我们需要把CSR文件上传到App开发网站。Apple证书颁发机构WWDRCA 将使用private key 对CSR中的public key和一些身份信息进行加密签名生成数字证书。并记录在Apple Member Center。
(5)配置完成证书后,下载下来,安装到Xcode中。
2 证书的分类
我们开发App使用的证书总的来说可以分为两种类型的,
(1)根证书:开发根证书和发布根证书。
(2)其他证书:附属功能的证书,推送证书,Apple Pay证书,Passbook证书等等。
作用的讲解:
(1)根证书与开发者或者企业对应的,只要是被根证书签名的App都可以理解为是这个证书对应的开发者开发的。所以一个根证书可以签名多个App。
(2)其他证书是和具体的App对应的,一个App的推送证书是无法给另一个App使用的,所以其他证书只能和一个App签名。也就是说这个App需要使用某一个项目Apple的服务而去产生这个其他证书。
举例:
如果我需要真机测试App1的推送,那我就需要下载开发根证书,App1的开发推送证书,对应的开发profile文件。双击安装就可以了。
如果后台是php还需要配置pem文件。
(3)描述性文件的作用:
1.)在App打包或者真机调试的时候,让Xcode去检查描述文件里面的bundleID与这个App的BundleID是否一致。
2.)如果一致就去keyChain查找有没有相对应的证书。(所以证书要下载好,并安装到keyChain中)
3.)如果证书存在,就检查证书的类型。如果是开发证书,就会检查调试的设备是否加入到了描述性文件里面的设备ID列表。如果设备在就可以进行调试,如果不在就不能进行调试了。
4.)如果新增了测试机,就需要在证书中心添加新测试机ID,所以描述性文件也需要更新。重新下载。下载后要先删除已存在的文件,/Users/XXX/Library/MobileDevice/Provisioning\ Profiles XXX表示的是电脑的用户名。不要覆盖,先删除。
5.)provisioning profiles 文件包含了 证书,App ID ,设备。
1、一个描述文件对应一个bundle ID .在手动创建pp文件的时候,需要依次指定App ID (单选) 证书 、设备(多选)
2、一个描述性文件决定Xcode用哪个证书(公钥)/私钥组合来签署应用程序,将在应用程序打包时嵌入ipa包中,安装应用程序时,pp文件被拷贝到ios设备中,运行该ios App的设备也通过它来认证安装的程序。
3、pp文件也分为“开发”和“发布” 有效期和证书一样。
4、pp文件的位置 ~/Library/MobileDevice/Provisioning Profiles
5、Team Provisioning Profile
(1)Team Provisioning Profile
每个Apple开发者账号都对应一个唯一的Team ID 在Xcode中添加Apple Developer Account时,它将于Apple Member Center后台勾兑自动生成iOS Team Provisioning Profile (App ID , Certificates,Devices)。
(2)Team Provisioning Profile 包含一个为 Xcode iOS Wildcard App ID(*)生成的iOS Team Provisioning Profile * (匹配所有应用程序)。账户里所有的Development Certificates和Devices都可以使用它在这个team注册的所有设备上调试所有的应用程序(不管bundle identifier是什么)。同时,它还会为开发者自己创建的Wildcard/Explicit App IDs创建对应的iOS Team Provisioning Profile。
6.App Group (ID)
应用扩展允许开发者扩展应用的自定义功能和内容,能够让用户在使用其他应用程序时使用该项功能,从而实现各个应用程序间的功能和资源共享。可以将扩展理解为一个轻量级(nimble and lightweight)的分身。
扩展和其Containing App各自拥有自己的沙盒,虽然扩展以插件形式内嵌在Containing App中,但是它们是独立的二进制包,不可以互访彼此的沙盒。为了实现Containing App与扩展的数据共享,苹果在iOS 8中引入了一个新的概念——App Group,它主要用于同一Group下的APP实现数据共享,具体来说是通过以App Group ID标识的共享资源区——App Group Container。
App Group ID同App ID一样,一般不超过255个ASCII字符。用户可在网站上编辑Explicit App IDs的App Group Assignment;可以删除(Delete)已注册的AppGroup (ID)。
2.App Group的配置
Containing App与Extension的Explicit App ID必须Assign到同一App Group下才能实现数据共享,并且Containing App与Extension的App ID命名必须符合规范:
- 置于同一App Group下的App IDs必须是唯一的(Explicit,not Wildcard)
- Extension App ID以Containing App ID为Prefix/Seed
假如Garageband这个App ID为“com.apple.garageband”,则支持从语音备忘录导入到Garageband应用的插件的App ID可能形如“com.apple.garageband.extImportRecording”。
App(ex) |
App Group ID | Provisioning Profile | ||
Code Signing Identity (Certificate Key Pair) | App ID (bundle identifier) | Devices (test) | ||
GarageBand | 置于同一分组: group.com.apple | (1)共用同一证书:ios_development.cer (2)共用证书Key Pair中的Private Key进行CodeSign | com.apple.garageband | 授权开发测试设备的UDIDs |
GarageBand扩展插件 | com.apple.garageband.extImportRecording |
关于Provisioning Profile,可以使用自己手动生成的,也可以使用Xcode自动生成的Team Provisioning Profile。
App Group会被配置到【Xcode Target|Build Settings|Code Signing|Code Signing Entitlements】文件(*.entitlements)的键com.apple.security.application-groups下,不影响Provisioning Profile生成流程。
主要是用来两个App之间进行数据的分享。
http://www.cnblogs.com/sirkevin/p/4531160.html