ios 证书相关问题

1 证书申请流程介绍

1.1 Certification(证书)

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

基本证书(非推送通知证书)

Developer Certification(开发证书)安装在电脑上提供权限:开发人员通过设备进行真机测试。可以生成副本供多台电脑安装;

Distribution Certification(发布证书)安装在电脑上提供发布iOS程序的权限:开发人员可以制做测试版和发布版的程序。不可生成副本,仅有配置该证书的电脑才可使用。

1.2 appID

什么是appID: 例如WNP的APPID:com.chinanetcenter.wspushapp,它是每一个应用的独立标识,在设置项中可以设置Services,也就是其所使用的额外服务,比如是否用到了

PassBook,GameCenter以及常见的push服务,如果选中了push服务,我们的应用有用到推送功能,必须生成第3条所的推送证书。

1.3 推送证书

分为开发和发布两种,分别为APNs Devlopment(开发用推送证书)和APNs Production(发布用推送证书)具体内容如下:

该证书在appID配置中创建生成,和开发者证书一样,安装到开发电脑上。

Development

App Development (1年):用来开发和真机调试应用程序。

Push Development (1年):用来调试Apple Push Notification

Production

In-House and Ad Hoc (3年):用来发布In-House和AdHoc的应用程序。

App Store :用来发布提交App Store的应用程序。

MDM CSR

Push Production (1年):用来在发布版本中使用Apple Push Notification。

1.4 Provisioning Profile(描述文件)

描述什么:描述文件里边包含了App ID , Certificates , Devices. 说明生成描述文件需要用到这些信息.

如果我们要打包ipa或者在真机上运行一个应用程序,我们首先需要证书来进行签名,用来标识这个应用程序是合法的、安全的、完整的等等;然后需要指明它的App ID,并且验证Bundle

ID是否与其一致;再次,如果是真机调试,需要确认这台设备能否用来运行程序。而ProvisioningProfile就把这些信息全部打包在一起,方便我们在调试和发布程序打包时使用,这样我们

只要在不同的情况下选择不同的profile文件就可以了。而且这个Provisioning Profile文件会在打包时嵌入.ipa的包里。

如下图所示,一个用于Development的Provisioning Profile中包含了该ProvisioningProfile对应的App ID,可使用的证书和设备。这意味着使用这个ProvisioningProfile打包程序必须拥有

相应的证书,并且是将App ID对应的程序运行到Devices中包含的设备上去。

如上所述,在一台设备上运行应用程序的过程如下:

证书一样,Provisioning Profile也分为分为Distribution、和Development两种类型

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

Development (1年)

Distribution (1年)

In House(WNP用到的,是企业分发的生产pp文件)

Ad Hoc

App Store

In House 与Ad Hoc的不同之处在于:In House没有设备数量限制,而Ad Hoc是用来测试用的,AdHoc的包只能运行在该账户内已登记的可用设备上,显然是有最多100个设备的数量限制。

所以这两种Provisioning Profile文件的区别就在于其中的设备限制不一样而已,而他们所使用的Certificate是相同的。

1.5 制作证书大致流程

制作流程大致按照以上序列进行:

申请证书

加入设备

生成Provisioning Profile

设置Xcode Code Sign Identifer

2 更新证书和文件时遇到的问题

2.1 更换推送证书需要哪些操作

见第三章证书申请流程

及时删除过期的证书,登录apple网站重新导出push certificate,生成对应的p12,上传到极光后台即可。

2.2 更换推送证书对旧版本的app有没有什么影响?对pp文件有什么影响?

推送证书是和APPID绑定的,苹果推送机制也是通过识别APPID来实现对该应用的推送,所以更新推送证书,保证APPID没有变化,对旧版本的app没有影响。

更换APNS证书不用重新制作pp文件,没有影响。

2.3 Provision Profile文件过期的有什么影响?

pp文件是打包到软件包中的 要是和pp相关的证书变更或者过期,整个app就用不了.

遇到的问题:

运行已经安装好的app ,启动就闪退。根本运行不了

连接设备,查看打印日志(Xcode 下下Device-》Device Log)。 其中打印一条

报错提示:

The executable was signed with invalid entitlements.

解决方法:

重新编辑下描述文件并下载安装好。即解决。

2.4 根证书过期旧版本的app有没有什么影响?对pp文件有什么影响?该怎么操作?

基证书过期后会影响到pp文件对此应用程序appid的校验,无法识别导致app不能使用,该pp文件也无效了。

这时候应该

编辑新的根证书,

在kaychain中打开安装后,

在开发者网页那边的发布证书,选择新编辑的那个,重新生成mobileprovision,下载下来,安装。

2.5 创建证书的过程中证书的种类有哪些?区别是什么?

Development(1年):

iOS APP Development真机调试证书

Apple Push Notiifaction Service SSL (Sandbox)推送调试证书,直接用 Xcode 调试到设备的 App 需要调试证书推送通知。

Production(1年):

App Store and Ad Hoc发布证书,App Store、Ad Hoc 发布方式都需要这个证书来签名。

Apple Push Notifiaction Service SSL (Sandbox & Production)推送正式证书,AppStore、In-House、AdHoc 都需要用正式推送证书推送通知。

2.6 什么是CSR?怎么生成?

当CSR文件创建的时候,会自动生成一对私钥和公钥.私钥存储在本地电脑.mac上,私钥存储默认存储在登录钥匙串中,可以在钥匙串的分类钥匙下查看.请求到的证书会包含公钥部分.

证书拿到手,最重要的一件事是如何证明这个证书是你的.不是假的,不是别人的.

CSR就提供了如何证明的方法.

CSR生成的同时,生成一对私钥公钥,私钥保存在本地,用来加密数据或者解密公钥加密的数据.公钥包含在CSR中,Apple用来加密数据及解密私钥加密的数据.这样就像把数据放在带锁的箱子中传递,使得Apple可以通过公钥来验证你就是你.

钥匙串访问-》证书助理-》从证书颁发机构请求证书-》保存到磁盘,用于接下来创建开发或生产证书时上传刚刚生成的后缀为 .certSigningRequest 的文件。

生成证书成功后,点击 “Download” 按钮把证书下载下来,是后缀为 .cer 的文件。生成证书结束后,双击,会在“KeychainAccess”中打开,选择左侧“钥匙串”列表中“登录”,以及“种类”列表中“我的证书”,找到刚才下载的证书,并导出为 .p12 文件

2.7 为什么要通过.p12来传递证书?

因为直接从Apple下载的证书只有公钥,没有私钥.没有办法证明这个证书是你的(潜台词:没有办法证明你有这个权利).而从本地钥匙串中导出.p12文件是包含私钥的,换句话说,可以把证书上描述的权利赋予他人.

在极光控制台上,进入你应用的应用设置中 iOS 的鉴权方式选择 “证书”,上传刚才导出的 .p12 证书。极光会在后台为你的应用进行鉴权。

2.8 Keychain(开发密钥)

安装证书成功的情况下证书下都会生成Keychain,上面提到的证书副本(导出证书重新命名)就是通过配置证书的电脑导出Keychain(就是.p12文件)安装到其他机子上,让其他机子得到证书对应的权限。Developer Certification就可以制做副本Keychain分发到其他电脑上安装,使其可以进行真机测试。

注意:Distribution Certification只有配置证书的电脑才可使用,因此即使导出导出Keychain安装到其他电脑上,其他电脑也不可能具有证书的权限.

3 证书申请流程

登陆iOS Dev Center选择进入iOS Provisioning Portal。

ios 证书相关问题_第1张图片

在iOS Provisioning Portal中,点击App IDs进入App ID列表。

ios 证书相关问题_第2张图片

创建 App ID,如果 ID 已经存在可以直接跳过此步骤

ios 证书相关问题_第3张图片

为 App 开启 Push Notification 功能。如果是已经创建的 App ID 也可以通过设置开启 Push Notification 功能。

ios 证书相关问题_第4张图片

根据实际情况完善 App ID 信息并提交,注意此处需要指定具体的 Bundle ID 不要使用通配符。

ios 证书相关问题_第5张图片

配置和下载证书

如果你之前没有创建过 Push 证书或者是要重新创建一个新的,请在证书列表下面新建。

ios 证书相关问题_第6张图片

新建证书需要注意选择证书种类(开发证书用于开发和调试使用,生产证书用于 App Store 发布)

ios 证书相关问题_第7张图片

点击 Continue 后选择证书对应的应用ID,然后继续会出现“About Creating a Certificate Signing Request (CSR)”。

ios 证书相关问题_第8张图片

根据它的说明创建打开KeychainAccess 创建 Certificate Signing Request。

ios 证书相关问题_第9张图片

填写“User Email Address”和“Common Name” 后选择 Saved to disk 进行保存 。

ios 证书相关问题_第10张图片

继续返回Apple developer 网站点击 Continue ,上传刚刚生成的 .certSigningRequest 文件生成 APNs Push Certificate。

下载并双击打开证书,证书打开时会启动“钥匙串访问”工具。

在“钥匙串访问”中你的证书会显示在“我的证书”中,注意选择“My Certificates” 和"login"

ios 证书相关问题_第11张图片

导出 .p12 证书文件

注意要选“login”和“My Certificates” 导出证书时要选中证书文件,不要展开private key。

ios 证书相关问题_第12张图片

将文件保存为Personal Information Exchange (.p12)格式。

ios 证书相关问题_第13张图片

将文件保存为Personal Information Exchange (.p12)格式。

上传证书

在JPush 管理 Portal 上,针对某应用程序,上传上面步骤得到 .p12 证书文件。这是 iOS SDK 能够接收到 JPush 推送消息的必要步骤。

Provisioning Profile的创建

创建Provisioning Profile的前提,已在Apple Developer网站创建待发布应用所使用的Bundle ID的App ID,且为该App ID创建了APNs证书,如下图:

ios 证书相关问题_第14张图片

创建App ID、APN证书和p12证书的导出的具体步骤请看 :iOS 证书 设置指南

在苹果开发者账号的Provisioning Profile页面点击下图按钮,创建Provisioning Profile

ios 证书相关问题_第15张图片

选择此Provisioning Profile的环境后点击[Continue]:

ios 证书相关问题_第16张图片

选择要创建Provisioning Profile的App ID后点击[Continue]:

ios 证书相关问题_第17张图片

选择所属的开发者证书,(这里创建了多个开发者证书,建议只创建一个,方便管理)为了方便,选择了[Select All],再点击[Continue]进入下一步:

ios 证书相关问题_第18张图片

为该Provisioning Profile选择将要安装的设备(一般选择[Select All]),点击[Continue]:

ios 证书相关问题_第19张图片

给该Provisioning Profile填写Profile Name,点击[generate]完成创建。

ios 证书相关问题_第20张图片

填写完Profile Name后点击[generate]完成创建,之后点击[DownLoad]下载Provisioning Profile

ios 证书相关问题_第21张图片

双击下载下来的Provisioning Profile,添加到xcode。

XCode的证书配置教程

参照iOS SDK 集成指南集成JPush SDK 和上传了推送用到的p12证书后在编译运行前需要先配置一下证书,步骤如下:

打开xxx-info.plist的Bundle identifier项把上传到JPush 控制台的bundle id填写进去:

ios 证书相关问题_第22张图片

点击项目,选择目标TARGETS后进入Build Setting 界面,搜索“Code signing”,按照下图配置

你可能感兴趣的:(ios 证书相关问题)