IOS证书/私钥/代码签名/描述文件

证书、签名、私钥、描述文件的一句话描述

(1)证书分两种:开发者证书、发布者证书。前者开发时使用,后者发布使用
(2)模拟器调试无需代码签名;真机调试需开发者证书代码签名;发布时需发布证书签名
(3)代码签名需要:证书+私钥,缺一不可,详见4
(4)真机调试时要求在设备上安装描述文件(provision profile),该文件包含信息:调试者证书,授权调试设备清单,应用ID。一个应用对应一个描述文件。
(5)一般情况下,xcode需要做以下代码签名配置:




 

XCODE代码签名简要步骤

(1)用钥匙串程序创建证书请求:证书请求文件(*. certSigningRequest),私钥,公钥。

(2)将证书请求文件发送给apple,后者将创建一个证书文件(*.cer)给你。

(3)Xcode将使用证书文件和对应的私钥给代码签名。

注:私钥可导出为p12文件拷贝他人使用,详见下节。

 

团队开发中如何共用证书

共用证书需要

1、*.p12文件

2、*.mobileprovision

导出*.p12办法:
(1) 打开钥匙串程序,选择 ‘秘钥’ 种类。
(2) 右键点击(或按住control点击)与开发证书相配套的私钥(专用密钥),并点击 ‘导出’,保存为Personal Information Exchange (.p12) 文件格式,将提示你创建一个密码,并需要管理员密码才可导出。
(3) 拷贝该p12文件到其他机子上,会提示你输入上一步输入的密码。

 

 

 

 

在其它机器双击导入p12文件,有可能会出现以下错误:The “System Roots” keychain cannot be modified.
To change whether a root certificate is trusted, open it in Keychain Access and modify its Trust Settings. New root certificates should be added to the login keychain for the current user, or to the System keychain if they are to be shared by all users of this machine.

 

解决方法:

把p12文件直接拖动到KeyChain Access下面的Keys即可。

 

要让真机跑起来,必须要在code signing里选者正确的provision(.mobileprovision)。provision是通过certificate(证书)生成的,并包括了可以调试的设备uuid和对应的appid,只有满足这些条件的设备和app才能使用这个provision跑起来。xcode一般会自动提供一个team provision用于让所有在开发者帐号这册过的设备在所有的app上能运行,这样你就不用专门去制作用于调试的provision了。不过也有例外的情况,如果你的app要使用push notification,in-app purchase等这些功能,还是需要使用只对应该appid的provision。provision分为调试和发布两种,分别由调试证书和发布证书生成,使用发布的provision不能在设备上作调试,使用调试的provision生成的app不能提交到AppStore上。
       证书(.cer)是通过CSR(.certSigningRequest)文件生成的,CSR文件通过keychain工具来制作,生成之后会在keychain里保存私钥,苹果通过CSR生成的证书文件则包含公钥信息。这个私钥相当的重要,往往真机调试不了出现code signing invalid就是因为缺少私钥文件。私钥导出的是p12格式文件
      公钥和私钥是如何保证数据安全的,网上有好多资料介绍,简单来说它们是非对称加密方式,用私钥加密的数据要用公钥才能解密,用公钥加密的数据要用私钥才能解密。数字证书相当于网络识别本人的身份证,它包含有公钥的信息所以是公开被别人下载的,而私钥则是本人持有的。本人通过私钥把数据加密发送出去后,持有本人数字证书的机构或个人如果能解密成功,就证明该数据确实是本人发送的,这样数字证书就能起到识别发送者身份的作用。
      现在结合自己使用过程中遇到的问题讲下一些情况下的解决方法。如果到一台新的mac电脑上开发,可以在原有的开发电脑上到xcode->organizer->devices->teams,选择其中一个开发帐号导出code signing assets(.developerprofile)文件,这个文件包含了provision,证书和私钥等所有必须信息,然后拷贝到新的mac上点击安装就可以进行真机调试了,这个功能不知道是xcode哪个版本推出的,确实很方便。除了这个方法,还可以导出provison文件和私钥文件(.p12)到新的mac上,点击安装provison后xcode自动会根据里面的信息把证书(.cer)下载回来,可以在keychain里看到,这时候它还没有私钥对应,接着点击安装私钥文件就搞定了。总的来说,provision,证书和私钥这3样文件对开发机来说缺一不可。
      如果是使用一台新的ios设备来调试,之前没有在开发者帐号里注册过的,会提示"A valid provisioning profile for this executable was not found.",这时需要在organizer->devices页面里选择这台设备,然后点击Add to Portal注册到一个开发者帐号里,然后就可以用对应这个开发者帐号的team provision作调试了。当然,假如你没有这个开发者的帐号和密码的话,就需要别人帮忙在apple的开发者页面里把你的设备uuid注册了,然后让他导出一个新的provision给你安装。如果是要使用针对特定app的provision来调试,有时候会弹出"The executable was signed with invalid entitlements"提示,我这边的问题是设备没有加入到这个provision里,这时到网站开发者页面把它加上,然后在organizer->devices->provisioning profiles页面刷新就可以了,当然如果你没有帐号和密码的话,还是需要别人来添加设备和导出provisioning文件给你安装。

 


版权声明:本文为LVXIANGAN原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。