关于iOS证书配置介绍

一、概念介绍

登录开发者账号,打开Certificates, Indentifiers & Profiles,可以看到如下内容

证书目录结构

上面的列表就包含了开发、调试和发布iOS应用程序所需的所有内容:Certificates(证书)、Identifiers(标识符)、Devices(设备)、Provisioning Profiles(授权配置文件)。下面将一一解释这几个东东。

1、Certificate

证书是用来给应用程序签名的,只有经过签名的应用程序才能保证他的来源是可信任的,并且代码是完整的,未经修改的。在Xcode Build SettingCode Signing Identity中,你可以设置用于为代码签名的证书。

在我们申请一个Certificate之前,需要先申请一个Certificate Signing Request文件(即CSR文件)。

申请CSR文件,这个过程中实际上是生成了一对公钥和私钥,保存在你Mac的Keychain中。

代码签名正是使用这种基于非对称秘钥的加密方式,用私钥进行签名,用公钥进行验证。如下图所示,在你Mac的keychain的login中存储着相关的公钥和私钥,而证书中包含了公钥。

你只能用私钥来进行签名,所以如果没有了私钥,就意味着你不能进行签名了,所以就无法使用这个证书了,此时你只能revoke之前的证书,再申请一个。

因此在申请完证书时,最好导出并保存好你的私钥,当然CSR文件也要一并保存好。

当你想与其他人或其他设备共享证书时,把私钥传给它就可以了。

私钥保存在你的Mac中,而苹果生成的Certificate中包含了公钥。

当你用自己的私钥对代码签名后,苹果就可以用证书中的公钥来进行验证,确保是你对代码进行了签名,而不是别人冒充你,同时也确保代码的完整性等。

CSR结构

证书主要分为两类:DevelopmentProduction

Development证书用来开发和调试应用程序,

Production主要用来分发应用程序(根据证书种类有不同作用),

下面是证书的分类信息:

注:不同类型的开发者账户所能创建的证书种类不同,此处不做对比

  • Development
    • App Development:用来开发和真机调试应用程序。
    • Push Development:用来调试Apple Push Notification
  • Production
    • App Store and Ad Hoc:用来发布提交App Store的应用程序。
    • Apple Push Notification service SSL (Sandbox & Production) :用来在发布版本中使用Apple Push Notification。
    • 其他,唧唧歪歪……(各种原因,省略好多字……)

2、App ID

App ID用于标识一个或者一组App,App ID应该是和Xcode中的Bundle ID是一致的或者匹配的。App ID主要有以下两种:

  • Explicit App ID:唯一的App ID,这种App ID用于唯一标识一个应用程序,例如com.ABC.demo1,标识Bundle ID为com.ABC.demo1的程序。
  • Wildcard App ID:通配符App ID,用于标识一组应用程序。==例如 * 可以表示所有应用程序,而com.ABC.*可以表示以com.ABC开头的所有应用程序。==

2.1、App Services

每创建一个App ID,我们都可以设置该App ID所使用的APP Services,也就是其所使用的额外服务。

Enable Services:
Access WiFi Information
App Groups
Apple Pay Payment Processing
Associated Domains
AutoFill Credential Provider
ClassKit
Data Protection
    Complete Protection
    Protected Unless Open
    Protected Until First User Authentication
Game Center
HealthKit
HomeKit
Hotspot
iCloud
    Compatible with Xcode 5
    Include CloudKit support (requires Xcode 6)
In-App Purchase     【苹果内购】
Inter-App Audio
Multipath
Network Extensions
NFC Tag Reading
Personal VPN
Push Notifications      【消息推送服务】
SiriKit
Wallet
Wireless Accessory Configuration

3、Device

Device最简单了,就是iOS设备。Devices中包含了该账户中所有可用于开发和测试的设备。 每台设备使用UDID来唯一标识。

每个账户中的设备数量限制是100个。Disable 一台设备也不会增加名额,只能在membership year 开始的时候才能通过删除设备来增加名额。

4、Provisioning Profile

一个Provisioning Profile文件包含了上述的所有内容:证书、App ID、设备。

试想一下,如果我们要打包或者在真机上运行一个应用程序,我们首先需要证书来进行签名,用来标识这个应用程序是合法的、安全的、完整的等等;然后需要指明它的App ID,并且验证Bundle ID是否与其一致;再次,如果是真机调试,需要确认这台设备能否用来运行程序。而Provisioning Profile就把这些信息全部打包在一起,方便我们在调试和发布程序打包时使用,这样我们只要在不同的情况下选择不同的profile文件就可以了。而且这个Provisioning Profile文件会在打包时嵌入.ipa的包里。

例如,如下图所示,一个用于Development的Provisioning Profile中包含了该Provisioning Profile对应的App ID,可使用的证书和设备。这意味着使用这个Provisioning Profile打包程序必须拥有相应的证书,并且是将App ID对应的程序运行到Devices中包含的设备上去。

授权配置文件结构

与证书一样,Provisioning Profile也分为Development和Distribution两种:

注:前面提到不同账户类型所能创建的证书种类不同,显然Profile文件的种类是和你所能创建的证书种类相关的)

  • Development
    • iOS App Development
    • 其他,唧唧歪歪……
  • Distribution
    • App Store
    • 其他,唧唧歪歪……

二、iOS证书配置指南(基本配置模式)

1、创建应用Identifiers - App ID

  • 步骤0:进入应用创建页面。选择Identifiers - App IDs - +,如下图

    创建应用0

  • 步骤1:编辑你的应用id名称,该名称将App IDs列表页面的Name一栏显示

    创建应用1

  • 步骤2:创建一个应用的唯一标识,在App ID Suffix中选择Explicit App ID,并填写Bundle ID与你在App Store Connect创建的应用的Bundle ID一样

    创建应用2

注意:这里的Bundle ID没有 * 号(与通配符 App ID不同,通配符中含有 * 号,可用于前缀相同的所有应用)

  • 步骤3:在App Services中,勾选需要的额外服务,例如:推送服务Push Notifications

  • 步骤4:检查配置内容,下一步到结束。

2、创建Certificate

2.1、创建开发者账号证书

开发者账号证书,开发者账号下,所有的App ID均需要该证书,

  • 步骤0:进入新建证书页面。选择Certificates - All - +,如下图

    Certjfjcate创建流程0

  • 步骤1:Select Type 选择证书类型。例如,创建开发环境证书,Development - iOS App Development,然后点击下一步

    Certjfjcate创建流程1

  • 步骤2:Request,直接点击下一步即可。这个页面是在教你怎么创建一个CSR文件,步骤3需要用到

  • 步骤3:Generate 生成证书,点击Choose File...按钮,上传你的CSR文件,然后点击下一步

    Certjfjcate创建流程3

  • 步骤4:Download 下载生成好的证书。证书格式后缀为.cer

发布环境开发者账号证书创建流程同上。步骤1中选择Production - App Store and Ad Hoc

3、创建Provisioning Profile(授权配置文件)

  • 步骤0:进入授权配置文件创建页面。选择Provisioning Profiles - All - +

  • 步骤1:Select Type 选择授权配置文件类型。例如,创建开发环境使用的授权配置文件,Development - iOS App Development,然后点击下一步

    创建授权配置文件1

  • 步骤2:配置授权信息

    • 步骤2.1:Configure 配置App ID
    • 步骤2.1:Configure 配置Certjfjcate
    • 步骤2.3:Configure 配置Devices
  • 步骤3:Generate 生成授权配置文件,添加个名称即可

  • 步骤4:Download 下载生成好的授权配置文件。文件格式后缀为.mobileprovision

发布环境授权配置文件创建流程同上,步骤1中选择Distribution - App Store

4、最终下载的证书

  1. kaifazhe_dev.cer --> 开发者账号证书_开发环境
  2. kaifazhe_dis.cer --> 开发者账号证书_发布环境
  3. appid_dev.mobileprovision --> 应用授权配置文件_开发环境
  4. appid_dis.mobileprovision --> 应用授权配置文件_发布环境

三、关于我们的应用需要的证书

1、一个应用需要哪些证书文件?

例子1.1:创建一个应用证书

有个开发者:kaifazhe

Ta有个应用:yingyong

应用的bundle id是:com.kaifazhe.yingyong

步骤如下:

  1. 准备材料:CSR文件
  2. 创建开发者(账号)证书:Certificate - 选择iOS App类型证书 - 上传CSR - 生成2个开发者证书(kaifazhe_dev.cerkaifazhe_dis.cer
  3. 创建应用App ID:App IDs - 填写Explicit App ID(与苹果应用后台的应用bundle id一致,如例子中的com.kaifazhe.yingyong )
  4. 创建授权配置文件:Provisioning Profile - 选择App ID(步骤3创建的那个) - 选择Certificate(步骤2创建的那个开发者证书) - 生成2个授权配置文件
一波操作之后,总共获得文件4个
kaifazhe_dev.cer
kaifazhe_dis.cer
comkaifazheyingyong_dev.mobileprovision
comkaifazheyingyong_dis.mobileprovision

注意:步骤2中,一般一个开发者账号只要一个开发者证书即可,账号下所有App ID都可以使用的

例子1.2、给yingyong添加苹果推送服务证书(APNs证书)

步骤如下:

  1. 准备材料:CSR文件(还是例子1.1中的那个CSR)
  2. 创建APNs证书:Certificate - 选择Apple Push Notification service SSL类型证书 - 选择App ID - 上传CSR - 生成2个push证书
一波操作之后,总共获得文件2个
comkaifazheyingyong_dev.cer
comkaifazheyingyong_dev.cer

注意:这2个证书,客户端开发人员是不需要,直接转换为.p12格式配置到推送后台即可。

.cer.p12,将.cer添加到Mac电脑的keychain.app中,然后从keychan中导出即是.p12格式。

例子1.3、iOS 10新增富文本推送服务,

步骤如下:

  1. 创建应用通配符App ID:App IDs - 填写Wildcard App ID(com.kaifazhe.yingyong.*)
  2. 创建授权配置文件:Provisioning Profile - 选择App ID(步骤1创建的那个com.kaifazhe.yingyong.*) - 选择Certificate(例子1.1步骤2创建的那个开发者证书) - 生成2个授权配置文件
一波操作之后,总共获得文件2个
comkaifazheyingyong_appgroup_dev.mobileprovision 
comkaifazheyingyong_appgroup_dis.mobileprovision

例子1.4、富文本推送、today等插件如何创建App IDProvisioning Profile

这类插件,均是依托于应用的。一般不需要创建唯一标识的App ID。

视情况,采用不同的通配符App ID(即:Wildcard App ID),此类App ID通常含有*号,例如:com.kaifazhe.*表示以com.kaifazhe.开头的所有应用程序;com.kaifazhe.yingyong.*则表示以com.kaifazhe.yingyong.开头的所有应用程序。

换个理解方式。

App ID 采用反向域名的形式。一般的App ID,可这样解读:com.开发者.应用名,则com.kaifazhe.*表示该通配符适用范围为这个开发者kaifazhe的所有应用;而com.kaifazhe.yingyong.*则表示该通配符适用范围为开发者kaifazhe的应用yingyong所附带的所有子应用(如富文本推送、today等均属于这类)

步骤如下:

  1. 创建插件适用的通配符App ID:一般插件归属于应用,则通配符格式为com.开发者.应用名.*
  2. 创建授权配置文件:Provisioning Profile - 选择App ID(步骤1创建的那个com.kaifazhe.yingyong.*) - 选择Certificate(例子1.1步骤2创建的那个开发者证书) - 生成2个授权配置文件
一波操作之后,总共获得文件2个
应用子程序通配符的授权配置文件
comkaifazheyingyong_appgroup_dev.mobileprovision
comkaifazheyingyong_appgroup_dis.mobileprovision
或
开发者的应用程序通配符的授权配置文件
comkaifazhe_team_dev.mobileprovision
comkaifazhe_team_dis.mobileprovision

通配符App ID 相关授权配置文件命名规则,bundle id + appgroup(代表应用子程序集合)或team(开发者应用集合)
当然,com.kaifazhe.*的子集 是包含com.kaifazhe.yingyong.*

附录:About Creating a Certificate Signing Request (CSR)

To manually generate a Certificate, you need a Certificate Signing Request (CSR) file from your Mac. To create a CSR file, follow the instructions below to create one using Keychain Access.

Create a CSR file.
In the Applications folder on your Mac, open the Utilities folder and launch Keychain Access.

Within the Keychain Access drop down menu, select Keychain Access > Certificate Assistant > Request a Certificate from a Certificate Authority.

In the Certificate Information window, enter the following information:

In the User Email Address field, enter your email address.
In the Common Name field, create a name for your private key (e.g., John Doe Dev Key).
The CA Email Address field should be left empty.
In the "Request is" group, select the "Saved to disk" option.
Click Continue within Keychain Access to complete the CSR generating process.
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 195,898评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,401评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,058评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,539评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,382评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,319评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,706评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,370评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,664评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,715评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,476评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,326评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,730评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,003评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,275评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,683评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,877评论 2 335