ios-xcode获取证书

iOS 证书申请和使用详解


前篇


证书的生成 详解

上一节讲过证书的生成步骤:

  1. 借助keychain在本地生成一个CSR文件
  2. 通过开发者账号将CSR上传至Member Center
  3. 从Member Center下载证书

1. 生成CSR文件: Keychain -> 证书助理 -> 从证书颁发机构请求证书

CSR(Certificate Signing Request)文件是用keychain生成的,包含了请求证书者的个人信息的,用于向Apple证书颁发机构(Apple Worldwide Developer Relations Certification Authority,为了简单理解,后文统称Apple Root CA)申请证书的一个文件。

想象一个场景:如果你去银行办理一张储蓄卡,那么银行就会要求你提供身份证,并填一份申请单,添上姓名、籍贯、常用住址等个人信息。

我们简单做一下类比:Apple Root CA就相当于银行,证书相当于储蓄卡,CSR文件就相当于储蓄卡的申请单。

生成CSR的时候发生了什么?

  1. 通过非对称加密,在本地生成了证书的公钥和私钥,保存在Keychain中(虽然与非对称加密的方式并不一致,但为了便于理解,我们把私钥类比成储蓄卡密码)
  2. 将公钥和个人信息一起组合形成了CSR

这里插播一点对非对加密的简单理解:通过非对称加密生成的一对公钥和私钥,它们能互相解密出经过对方加密后的信息,并且也只有它们才能解密。

如果我们将+和-分别定义为加密和解密,那么:

2. 通过开发者账号将CSR上传至Member Center

成功后,我们就能在Member Center上下载证书了。

回到办理银行卡的流程:你将身份证、申请单交给工作人员,工作人员确认你本人和身份证相符,然后经过一系列的操作,最终会把办理好的银行卡交给你。

银行卡中是包含了你的个人信息的,因为办理很多的业务,都需要你本人携带身份证,并保证和开户信息一致。

这正是对应了当前这一步。

类比于银行工作人员的一系列操作,Apple Root CA在从CSR到证书的过程中做了什么呢?

首先,Apple Root CA是有一个由自己颁发的证书的(CA证书)。同样,这个证书也有它对应的公钥和私钥。

当我们将CSR传给Apple Root CA,它会在验证身份之后,后用CA证书的私钥,对公钥和部分个人信息做加密,然后连同CSR中的公钥一起,形成证书,并记录在Member Center中。

3. 从Member Center下载证书

下载证书 (xxx.cer 文件) 到本地并安装。由于证书中包含证书的公钥,我们本地保存着证书的私钥,所以它们在Keychain中可以匹配得上:


添加调试设备

1. 在设备列表中添加

2. 在对应的证书上勾选设备

3. 下载证书, 从新打ipa包, 即可在新设备中安装ipa包

下载刚刚 Edit 添加设备的证书 xxx.mobileprovision , 打包时用这个证书打包

uuid 查看 参考: 查看设备uuid


iOS 证书申请和使用详解

对于iOS开发者来说,apple开发者账号肯定不会陌生。在开发中我们离不开它。下面我简单的为大家分享一下关于iOS开发中所用的证书相关知识。

第一部分:成员介绍

1.Certification(证书)

证书是对电脑开发资格的认证,每个开发者帐号有一套,分为两种

1)Developer Certification(开发证书)

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

2)Distribution Certification(发布证书)

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

2.Provisioning Profile(授权文件)

授权文件是对设备如iPod Touch、iPad、iPhone的授权,文件内记录的是设备的UDID和程序的App Id,即:使被授权的设备可以安装或调试Bundle identifier与授权文件中记录的App Id对应的程序。
开发者帐号在创建授权文件时候会选择App Id,(开发者帐号下App Id中添加,单选)和UDID(开发者帐号下Devices中添加最多100个,多选)。
授权文件分为两种,对应相应的证书使用:

1)Developer Provisioning Profile(开发授权文件)

在装有开发证书或副本的电脑上使用,开发人员选择该授权文件通过电脑将程序安装到授权文件记录的设备中,即可进行真机测试。
注意:确保电脑有权限真机调试,即安装了开发证书或副本;在开发工具中程序的Bundle identifier和选中使用的授权文件的App Id要一致;连接调试的设备的UDID在选中的授权文件中有记录。

2)Distribution Provisioning Profile(发布授权文件)

在装有发布证书的电脑上(即配置证书的电脑,只有一台)制做测试版和发布版的程序。
发布版就是发布到App Store上的程序文件,开发者帐号创建授权文件时选择store选项,选择App Id,无需选择UDID;
测试版就是在发布之前交给测试人员可同步到设备上的程序文件,开发者帐号创建授权文件时选择AdHoc,选择App Id和UDID;只有选中的UDID对应的设备才可能安装上通过该授权文件制做的程序。

3. Keychain(开发密钥)

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

第二部分:证书申请流程

step1:登录(99美元账号)https://developer.apple.com

1)登录成功后在页面右侧选择“Certificates”:

2)打开之后可以看到面板:

step2:生成CSR文件

1)打开 ->钥匙串访问

2)打开右上方钥匙串访问栏->证书助理->从证书颁发机构请求证书…

3)填写一个邮箱地址,选择“存储到磁盘”,点击继续,完成了。

申请成功后的文件:

step3:注册 App ID 流程

1)点c_3图面板中的App IDs 右上角的加号。然后填写App ID的名字:

2)填写bundle ID:

3)选择App需要支持的服务,(如:app耍要推送服务,就勾选Push Notifications)

4)最后会有一个详细的内容列表,对应无误后,提交完成。

step4: 证书申请

1)选择证书的类型,下面罗列我们iOS开发常用的证书类型

2)如果是申请推送证书,则会关联一个App ID

3)上传我们之前建好的CSR文件(详见step2)

4)恭喜你,到此为止,你完成了证书的申请,简单吧。

setp5:授权文件申请(Provisioning Profile)

1)选择授权文件类型,下面罗列了iOS常的授权文件类型

2)选择关联App ID

3)选择关联的证书

4)选择授权的设备(通过 UDID),除了企业证书(inHouse)外,只有你添加的设备才能进行调度或测试

5)给授权文件命一个能和其它授权文件区分的名字

恭喜你,到此为止,授权文件申请完成了,简单吧。
在我们iOS开发中,常用的证书相关操作流程就全在上面了。

第三部分:总结

1)成功安装测试证书的条件:a).开发者证书+私钥。 b).授权文件。

2)如果你想通过证书进行真机调试,请选择开发版证书(Development Certificate),和相应的授权文件(Development Provisioning Profile) 。

3)如果你想让更多的开发者能进行真机调试,请先对需要真机调试的设备进行授权,然后将开发版证书(Development Certificate)下载到本机安装后导出为带私的.p12的文件,和相应的授权文件(Development Provisioning Profile)交由开发者安装,成功后即可进行真机调试。

4)如果你想让更多的机子进行真机测试,请先对需要测试的设备进行授权,然后选择生产版证书(Distribution Ad_hoc Certificate)和相应的授权文件(Distribution Ad_hoc Provisioning Profile)打包后分发给要测试的设备即可。

参考


查看设备uuid

在调试中, 需要在对应证书中加入设备的uuid, 才能允许设备安装对应证书中打出来的 ipa

通用iTunes来查询UUID

  1. 把iPhone手机与电脑用数据线连起来,打开iTunes软件,点击iTunes右上方的“iPhone”图标

  2. 在iPhone摘要界面,点击“序列号”一栏

  3. 当我们点击序列号以后,会显示设备标识符(UUID),如果需要保存iPhone的UUID,点击鼠标右键出现复制标识符

参考


多机子使用同一个证书

  • 如果直接从别的机子生成的证书拷过来使用, 在 xcode 证书签名会报错: you already have a current ios development certificate or a pending certificate request. 解决办法是从 生成证书的机子 上生成一个 副证书 (xxx.p12 文件). 因为苹果规定 .cer证书只能存在于一台机器上,因此 如果另一台电脑想要用的话,需要导出为.p12 file ,安装到另一台没有安装.cer文件的mac电脑

生成证书的机子上导出 开发者账号

导出一个: xxx.developerprofile 文件, 安装到其他机制上

  1. 导出源机子的开发者账号

  2. 在别的机子上导入账号

参考

参考: iOS 开发 公司开发者账号,在多台Mac上合作开发,共用一个账号和证书–图文详解 - https://blog.csdn.net/kuangdacaikuang/article/details/53955912

生成证书的机子上生成 副证书

  1. 我们的每一个证书都可以生成一个.p12文件,这个文件是一个加密的文件,只要知道其密码,就可以供给所有的mac设备使用,使设备不需要在苹果开发者网站重新申请开发和发布证书,就能使用。

    注意:一般.p12文件是给与别人使用的,本机必须已经有一个带秘钥的证书才可以生成.p12文件,如图:

  2. 打开钥匙串,选择我们需要的证书,右击,选择“导出“iPhone Distribition:```”:

    为.p12文件填一个名字,点击存储:

    填一个“密码”,“验证”和密码相同:

    点击好,在桌面上就形成了一个.p12文件了:

    在别人的电脑上要成功安装,须具备两个文件:

    • 该证书导出的“.p12”文件。
    • 苹果开发者中的与“证书”对应的“描述文件”

    如果需要用于开发的,那么需要这两个文件:

    .p12文件本身就是一个加密的证书,所以用这两个文件就可以让其他mac设备使用了:

安装 副证书

拿到这两个文件后,依次双击“证书”,“.p12“文件(需要输入密码,密码就是当时生成.p12时设定的密码,),作用是加入钥匙串中,使我们的电脑具备开发的证明,”描述文件“(作用是置于xcode中,让xcode知道我们开发的合法性),添加完后就可以使用了

参考


实操

证书创建地址: https://developer.apple.com/account/resources/certificates/list

  1. 创建 Certificates

    1. 选择 ios distribution (app store and ad hoc)

    2. 本地创建 csr 证书上传上去

      会产生一个 CertificateSigningRequest.certSigningRequest 文件, 把这个文件上传上去

  2. 创建 Identitiers

    勾选上需要的服务, 一般都是 push 服务

  3. 然后就可以在 xcode 上登录账号进行开发了


踩坑

xcode 证书签名报错:

you already have a current ios development certificate or a pending certificate request

可能是因为该机子不是生成证书的机子, xxx..mobileprovision 是从别的机子上生成 拿到该机子上使用才导致的报错.

解决办法: 参考 多机子使用同一个证书

xcodebuild 打包命令报错

报错: Xcode couldn't find any iOS Ad Hoc provisioning profiles matching ,说是需要添加 -allowProvisioningUpdates

原因可能是因为刚刚在apple后台配置了新的 adhoc 证书, 机子上还没有

解决办法: 在打包ipa命令中加多一个参数 -allowProvisioningUpdates yes , 打包时会自动从Apple官网下载证书. 并安装到 Keychinas 中, 第一次更新会 多次弹出机子授权密码

参考: https://juejin.im/post/5afaf7046fb9a07ab83e3123

打包出的ipa不能拖进iTunes安装到手机

但是都能在 xcode 中安装 ipa 到手机上 (手机必须在后台配置的设备中)

原因是因为一般一个机子都会绑定一个手机作同步, 然后会勾选上这个选项

没有勾上这个 手动管理 是不允许直接拖 ipa 进去安装的

报错: Missing iOS Distribution signing identity

什么是AppleWWDRCA证书?
搜索资料发现,原因是AppleWWDRCA (Apple Worldwide Developer Relations Certification Authority) 证书过期了。
AppleWWDRCA证书实际上就是对iOS证书(即Develop证书和Distribution证书)的授权认证,其公钥用于解密认证证书的可靠性。
iOS以及Mac OS X系统(在安装Xcode时)将自动安装AppleWWDRCA.cer(Apple Worldwide Developer Relations Certification Authority)这个中间证书(Intermediate Certificates)。

问题解决
需要更新AppleWWDRCA证书。

  1. https://developer.apple.com/certificationauthority/AppleWWDRCA.cer下载最新AppleWWDRCA证书,双击安装。
  2. 打开钥匙串,选择登录,然后选择下面的证书。
  3. 选择桌面左上角的显示→显示已过期的证书。
  4. 这时候你会发现一个过期的“WWDR Certificate”(Apple Worldwide Developer Relations Certification Authority),删除它。
    特别注意:有的在系统那一栏也有这个过期的“WWDR Certificate”,也一并删除它,没有就不作处理。
  5. 再回头点击Develop证书和Distribution证书,不出意外他们都变成“此证书有效”了。
  6. 参考: https://blog.csdn.net/ioshot/article/details/50669791