文档章节

[转]

 王素年
发布于 2017/02/09 16:55
字数 1838
阅读 9
收藏 0

引言

        关于开发证书配置(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

本文转载自:

共有 人打赏支持
粉丝 2
博文 71
码字总数 44391
作品 0
普陀
程序员
私信 提问
SylixOS中AARCH64跳转表实现原理

跳转表存在的意义 1.1 内核模块反汇编 如下的程序清单,为一个内核模块的源码。 反汇编之后的内容如下所示。 从以上反汇编结果可知,printk函数调用会被汇编为BL指令,并且跳转的目的地址为0...

zhywxyy
2018/10/23
0
0
无论是菜鸟还是高手,这招PDF转Word技巧必须Get

PDF作为与平台无关的文本格式,是网络上进行电子文档发行的理想文档格式。但是PDF文档格式不利于编辑修改,为解决该问题,很多小伙伴第一时间想到把PDF转Word,今天小编为大家推荐一款非常强...

提提拉米苏
2018/07/16
0
0
云转码视频播放系统

1. 概述 随着视频分享站点的兴起,以及智能手机的流行,需要进行大量的离线视频转码工作,以适应异构网络和多终端环境的需要,为此我们在2009年着手开发视频转码平台(将各种格式的视频文件转...

点播直播云转码
2016/10/20
1K
1
如何使用API提交转码任务?

当常规的转码工作流无法满足用户的场景时,需用户自己判断业务逻辑,并使用API提交转码任务。例如:并不是所有的视频都需要转码,不同视频需要设置不同的转码配置。本文将介绍API提交转码任务...

樰篱
2017/12/29
0
0
JSP中四种属性范围(pageContext,request)

在JSP中提供了四种属性的保存范围,所谓的属性的保存范围,指的是一个设置的对象,可以在多少个页面中保存,并可以使用。 四种属性范围: ①pageContext:只在一个页面中保存属性,跳转后无效...

Bug-Killer
2016/02/20
36
0

没有更多内容

加载失败,请刷新页面

加载更多

CSS 选择器参考手册

CSS 选择器参考手册 选择器 描述 [attribute] 用于选取带有指定属性的元素。 [attribute=value] 用于选取带有指定属性和值的元素。 [attribute~=value] 用于选取属性值中包含指定词汇的元素。...

Jack088
今天
1
0
数据库篇一

数据库篇 第1章 数据库介绍 1.1 数据库概述  什么是数据库(DB:DataBase) 数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来,用户可以对数据库中的数据...

stars永恒
今天
2
0
Intellij IDEA中设置了jsp页面,但是在访问页面时却提示404

在Intellij IDEA中设置了spring boot的jsp页面,但是在访问时,却出现404,Not Found,经过查找资料后解决,步骤如下: 在Run/Debug Configurations面板中设置该程序的Working Directory选项...

uknow8692
昨天
3
0
day24:文档第五行增内容|每月1号压缩/etc/目录|过滤文本重复次数多的10个单词|人员分组|

1、在文本文档1.txt里第五行下面增加如下内容;两个方法; # This is a test file.# Test insert line into this file. 分析:给文档后增加内容,可以用sed 来搞定;也可以用while do done...

芬野de博客
昨天
3
0
深入理解JVM—JVM内存模型

深入理解JVM—JVM内存模型 我们知道,计算机CPU和内存的交互是最频繁的,内存是我们的高速缓存区,用户磁盘和CPU的交互,而CPU运转速度越来越快,磁盘远远跟不上CPU的读写速度,才设计了内存...

onedotdot
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部