关于iOS证书配置介绍
一、概念介绍
登录开发者账号,打开Certificates, Indentifiers & Profiles
,可以看到如下内容
上面的列表就包含了开发、调试和发布iOS应用程序所需的所有内容:Certificates(证书)、Identifiers(标识符)、Devices(设备)、Provisioning Profiles(授权配置文件)。下面将一一解释这几个东东。
1、Certificate
证书是用来给应用程序签名的,只有经过签名的应用程序才能保证他的来源是可信任的,并且代码是完整的,未经修改的。在Xcode Build Setting
的Code Signing Identity
中,你可以设置用于为代码签名的证书。
在我们申请一个Certificate
之前,需要先申请一个Certificate Signing Request
文件(即CSR文件)。
申请CSR文件,这个过程中实际上是生成了一对公钥和私钥,保存在你Mac的Keychain中。
代码签名正是使用这种基于非对称秘钥的加密方式,用私钥进行签名,用公钥进行验证。如下图所示,在你Mac的keychain的login中存储着相关的公钥和私钥,而证书中包含了公钥。
你只能用私钥来进行签名,所以如果没有了私钥,就意味着你不能进行签名了,所以就无法使用这个证书了,此时你只能
revoke
之前的证书,再申请一个。因此在申请完证书时,最好导出并保存好你的私钥,当然CSR文件也要一并保存好。
当你想与其他人或其他设备共享证书时,把私钥传给它就可以了。
私钥保存在你的Mac中,而苹果生成的Certificate中包含了公钥。
当你用自己的私钥对代码签名后,苹果就可以用证书中的公钥来进行验证,确保是你对代码进行了签名,而不是别人冒充你,同时也确保代码的完整性等。
CSR结构
证书主要分为两类:Development
和Production
,
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:进入应用创建页面。选择
创建应用0Identifiers
-App IDs
-+
,如下图
-
步骤1:编辑你的应用id名称,该名称将
创建应用1App IDs
列表页面的Name
一栏显示
-
步骤2:创建一个应用的唯一标识,在
创建应用2App ID Suffix
中选择Explicit App ID
,并填写Bundle ID
(与你在App Store Connect
创建的应用的Bundle ID一样)
注意:这里的Bundle ID没有 * 号(与通配符 App ID不同,通配符中含有 * 号,可用于前缀相同的所有应用)
-
步骤3:在
App Services
中,勾选需要的额外服务,例如:推送服务Push Notifications
-
步骤4:检查配置内容,下一步到结束。
2、创建Certificate
2.1、创建开发者账号证书
开发者账号证书,开发者账号下,所有的App ID均需要该证书,
-
步骤0:进入新建证书页面。选择
Certjfjcate创建流程0Certificates
-All
-+
,如下图
-
步骤1:Select Type 选择证书类型。例如,创建开发环境证书,
Certjfjcate创建流程1Development
-iOS App Development
,然后点击下一步
-
步骤2:Request,直接点击
下一步
即可。这个页面是在教你怎么创建一个CSR文件,步骤3需要用到 -
步骤3:Generate 生成证书,点击
Certjfjcate创建流程3Choose File...
按钮,上传你的CSR文件,然后点击下一步
-
步骤4:Download 下载生成好的证书。证书格式后缀为
.cer
发布环境开发者账号证书创建流程同上。步骤1中选择
Production
-App Store and Ad Hoc
3、创建Provisioning Profile(授权配置文件)
-
步骤0:进入授权配置文件创建页面。选择
Provisioning Profiles
-All
-+
-
步骤1:Select Type 选择授权配置文件类型。例如,创建开发环境使用的授权配置文件,
创建授权配置文件1Development
-iOS App Development
,然后点击下一步
-
步骤2:配置授权信息
- 步骤2.1:Configure 配置App ID
- 步骤2.1:Configure 配置Certjfjcate
- 步骤2.3:Configure 配置Devices
-
步骤3:Generate 生成授权配置文件,添加个名称即可
-
步骤4:Download 下载生成好的授权配置文件。文件格式后缀为
.mobileprovision
发布环境授权配置文件创建流程同上,步骤1中选择
Distribution
-App Store
4、最终下载的证书
-
kaifazhe_dev.cer
--> 开发者账号证书_开发环境 -
kaifazhe_dis.cer
--> 开发者账号证书_发布环境 -
appid_dev.mobileprovision
--> 应用授权配置文件_开发环境 -
appid_dis.mobileprovision
--> 应用授权配置文件_发布环境
三、关于我们的应用需要的证书
1、一个应用需要哪些证书文件?
例子1.1:创建一个应用证书
有个开发者:kaifazhe
Ta有个应用:yingyong
应用的bundle id是:com.kaifazhe.yingyong
步骤如下:
- 准备材料:CSR文件
- 创建开发者(账号)证书:
Certificate
- 选择iOS App
类型证书 - 上传CSR
- 生成2个开发者证书(kaifazhe_dev.cer
和kaifazhe_dis.cer
) - 创建应用App ID:
App IDs
- 填写Explicit App ID
(与苹果应用后台的应用bundle id一致,如例子中的com.kaifazhe.yingyong ) - 创建授权配置文件:
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证书)
步骤如下:
- 准备材料:CSR文件(还是例子1.1中的那个CSR)
- 创建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新增富文本推送服务,
步骤如下:
- 创建应用通配符App ID:
App IDs
- 填写Wildcard App ID
(com.kaifazhe.yingyong.*) - 创建授权配置文件:
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 ID
及 Provisioning 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等均属于这类)
步骤如下:
- 创建插件适用的通配符App ID:一般插件归属于应用,则通配符格式为
com.开发者.应用名.*
- 创建授权配置文件:
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.