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 mo
dified.
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格式⽂件。qq签名发布
公钥和私钥是如何保证数据安全的,⽹上有好多资料介绍,简单来说它们是⾮对称加密⽅式,⽤私钥加密的数据要⽤公钥才能解密,⽤公钥加密的数据要⽤私钥才能解密。数字证书相当于⽹络识别本⼈的⾝份证,它包含有公钥的信息所以是公开被别⼈下载的,⽽私钥则是本⼈持有的。本⼈通过私钥把数据加密发送出去后,持有本⼈数字证书的机构或个⼈如果能解密成功,就证明该数据确实是本⼈发送的,这样数字证书就能起到识别发送者⾝份的作⽤。
现在结合⾃⼰使⽤过程中遇到的问题讲下⼀些情况下的解决⽅法。如果到⼀台新的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⽂件给你安装。