[转]
[转]
王素年 发表于1年前
[转]
  • 发表于 1年前
  • 阅读 9
  • 收藏 0
  • 点赞 0
  • 评论 0

新睿云服务器60天免费使用,快来体验!>>>   

引言

        关于开发证书配置(Certificates & Identifiers & Provisioning Profiles),相信做 iOS 开发的同学没少被折腾。对于一个 iOS 开发小白、半吊子(比如像我自己)抑或老兵,或多或少会有或曾有过以下不详、疑问、疑惑甚至困惑:

  1. 什么是App ID?Explicit/Wildcard App ID有何区别?什么是App Group ID?
  2. 什么是证书(Certificate)?如何申请?有啥用?
  3. 什么是Key Pair(公钥/私钥)?有啥用?与证书有何关联?
  4. 什么是签名(Signature)?如何签名(CodeSign)?怎样校验(Verify)?
  5. 什么是(Team)Provisioning Profiles?有啥用?
  6. Xcode如何配置才能使用iOS真机进行开发调试?
  7. 多台机器如何共享开发者账号或证书?
  8. 遇到证书配置问题怎么办?
  9. Xcode 7免证书调试真机调试

本文将围绕相关概念及背景做个系统的梳理串烧,于条分缕析中对证书体系进行抽丝剥茧,逐步揭开签名机制的神秘面纱。图穷匕首见,水落而石出,包教不包会,不会请再来。

从 Xcode 7 开始支持普通 Apple 账号进行免证书真机调试,详情参考最新官方文档《Launching Your App on Devices》,或参考本文最后一节简介。

写在前面

1.假设你使用过 Apple 设备(iMac/iPad/iPhone)且注册过 Apple ID(Apple Account),详情参考《创建和开始使用 Apple ID》。

2.假设你或你所在的开发组已加入苹果开发者计划(Enroll in iOS Developer Program to become a member),即已注册开发者账号(Apple Developer Account)。

  • 只有拥有开发者账号,才可以申请开发/发布证书及相关配置授权文件,进而在 iOS 真机上开发调试 Apps 或发布到 App Store。
  • 开发者账号分为 Individual 和 Company/Organization 两种类型。如无特别交代,下文基于 $99/Year 的普通个人开发者(Individual)账号展开。

3.若要真机调试实践,你必须至少拥有一台装有 Mac OS X/Xcode 的 Mac 开发机(iMac or MacBook),其上自带原生的 Keychain Access。

.App ID(bundle identifier)

在苹果官方的开发者计划(Apple Developer Member Center)层面,App ID 即 Product ID,用于标识一个或者一组 App。

在 Mac/iOS 开发语境中,bundle(捆绑) 是指一个内部结构按照标准规则组织的特殊目录。在 Mac OS 应用程序目录下的某个 *.app 上可右键显示包内容(Contents),其本质上就是可执行二进制文件(MacOS/)及其资源(Resources/)的打包组合。因此,在 Xcode 中配置的 Bundle Identifier 必须和 App ID 是一致的(Explicit)或匹配的(Wildcard)。

App ID 字符串通常以反域名(reverse-domain-name)格式的 Company Identifier(Company ID)作为前缀(Prefix/Seed),一般不超过 255 个 ASCII 字符。

App ID 全名会被追加 Application Identifier Prefix(一般为 TeamID.),分为两类:

  • Explicit App ID:唯一的 App ID,用于唯一标识一个应用程序。例如“com.apple.garageband”这个 App ID,用于标识 Bundle Identifier 为“com.apple.garageband”的 App——GarageBand;“com.tencent.mqq”则为iPhoneQQ 的 App ID。
  • Wildcard App ID:含有通配符的 App ID,用于标识一组应用程序。例如“*”(实际上是 Application Identifier Prefix)表示所有应用程序;而“com.apple.*”可以表示 Bundle Identifier 以“com.apple.”开头(苹果公司)的所有应用程序。

用户可在 Developer Member Center 网站上注册(Register)或删除(Delete)已注册的 App IDs。

App ID 被配置到【XcodeTarget|Info|Bundle Identifier】下;对于 Wildcard App ID,只要 bundle identifier 包含其作为 Prefix/Seed 即可。

.设备(Device)

Device 就是运行 iOS 系统用于开发调试 App 的设备。每台 Apple 设备使用 UDID (Unique Device Identifier)来唯一标识。

iOS 设备连接 Mac 后,可通过 iTunes->Summary 或者 Xcode->Window->Devices 查看其UDID

Apple Member Center 网站个人账号下的 Devices 中包含了注册过的所有可用于开发和测试的设备,普通个人开发账号每年累计最多只能注册100个设备。

  • Apps signed by you or your team run only on designated development devices.
  • Apps run only on the test devices you specify.

用户可在网站上注册或启用/禁用(Enable/Disable)已注册的Device。

本文的 Devices 是指连接到 Xcode 被授权用于开发测试的iOS设备(iPhone/iPad)。

.开发证书(Certificates)

1.证书的概念

证书是由公证处或认证机关开具的证明资格或权力的证件,它是表明(或帮助断定)事理的一个凭证。证件或凭证的尾部通常会烙印公章

每个中国人一生可能需要70多个证件,含15种身份证明。证件中“必需的”有30到40个。将这些证件按时间顺序铺开,那就是一个天朝子民的一生——持准生证许可落地,以户籍证明入籍,以身份证认证身份,持结婚证以合法同居,最终以死亡证明注销。

2.数字证书的概念

数字证书就是互联网通讯中 标志通讯各方 身份信息的一串数字,提供了一种在 Internet 上验证通信 实体身份的方式,其作用类似于司机的驾驶执照或日常生活中的身份证。它是由一个由权威机构—— CA机构(CA = Certificate Authority),又称为数字证书授权中心(数字证书认证机构)颁发(发行)的,人们可以在网上用它来识别对方的身份。
  • 数字证书是一个经 CA 数字签名的包含公开密钥拥有者信息以及公开密钥的文件。最简单的证书包含一个公开密钥、名称以及 CA 的数字签名。
  • 数字证书还有一个重要的特征就是时效性:只在特定的时间段内有效。

数字证书中的公开密钥(公钥)相当于公章。

证书的信任链条是环环相扣的,根证书就是一开始就被信任的证书,是信任链的起始点

在天朝子民的一生中,户籍证明可理解为等效的根证书:有了户籍证明,才能办理身份证;有了上流的身份证,才能办理下游居住证、结婚证、计划生育证、驾驶执照等认证。

3.根证书的概念

 

根证书是被严格限制和确认的,根证书的颁发者被称之为 Root Certificate Authority(Root CA)。

某一认证领域内的根证书是 CA 认证中心给自己颁发的证书(自行签名),安装根证书意味着对这个 CA 认证中心的信任。

那么由谁来保证信任链起点的安全呢?

现代网络操作系统都会内置一份可信的根证书列表(Firefox 的根证书列表独立于操作系统之外)。

所谓“可信的根证书列表”是指操作系统开发商通过严格地审核,将安全可靠、可被信任的 CA 机构纳入白名单,并将这些权威可信 CA 的根证书预安装到操作系统中。

》在 Windows Internet Explorer 中,通过菜单【工具 | Internet 选项 | 内容 | 证书】可以查看受信任的根证书颁发机构(或中间证书颁发机构):

 

具体看这篇文章:

http://blog.csdn.net/phunxm/article/details/42685597

  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 1
博文 70
码字总数 43954
×
王素年
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: