iOS 证书调试的理解(Personal)

时间:2023-03-09 00:11:39
iOS 证书调试的理解(Personal)

证书签名

证书:
众所周知,我们申请一个Certificate之前,需要先申请一个Certificate Signing Request (CSR) 文件,而这个过程中实际上是生成了一对公钥和私钥,保存在你Mac的Keychain中。代码签名正是使用这种基于非对称秘钥的加密方式,用私钥进行签名,用公钥进行验证。如下图所示,在你Mac的keychain的login中存储着相关的公钥和私钥,而证书中包含了公钥。你只能用私钥来进行签名,所以如果没有了私钥,就意味着你不能进行签名了,所以就无法使用这个证书了,此时你只能revoke之前的证书再申请一个。因此在申请完证书时,最好导出并保存好你的私钥。当你想与其他人或其他设备共享证书时,把私钥传给它就可以了。私钥保存在你的Mac中,而苹果生成的Certificate中包含了公钥。当你用自己的私钥对代码签名后,苹果就可以用证书中的公钥来进行验证,确保是你对代码进行了签名,而不是别人冒充你,同时也确保代码的完整性等。

在天朝子民的一生中,户籍证明可理解为等效的根证书:有了户籍证明,才能办理身份证;有了上流的身份证,才能办理下游居住证、结婚证、计划生育证、驾驶执照等认证。

iOS证书是用来证明iOS App内容(executable code)的合法性和完整性的数字证书。对于想安装到真机或发布到AppStore的应用程序(App),只有经过签名验证(Signature Validated)才能确保来源可信,并且保证App内容是完整、未经篡改的。

普通个人开发账号最多可注册iOS Development/Distribution证书各2个(再确认一下)

iOS以及Mac OS X系统(在安装Xcode时)将自动安装AppleWWDRCA.cer这个中间证书(Intermediate Certificates),它实际上就是iOS(开发)证书的证书,即根证书(Apple Root Certificate)。
AppleWWDRCA(Apple Root CA)类似注册管理户籍的*机关户政管理机构,AppleWWDRCA.cer之于iOS(开发)证书则好比户籍证之于身份证。

Apple证书颁发机构WWDRCA(Apple Worldwide Developer Relations Certification Authority)将使用private key对CSR中的public key和一些身份信息进行加密签名生成数字证书(ios_development.cer)并记录在案(Apple Member Center)。

个人理解:
AppleWWDRCA根证书的作用就是加密或签名.CSR文件,然后,Apple证书颁发机构WWDRCA验证.CSR是否正确,如果正确,在对.CSR中的public key和一些身份信息进行加密签名生成数字证书,这样数字证书就被认证过了,也就是在终端生成的公匙被认证了,这个被认证的公匙就可以用于验证签名了。

APP ID:
每创建一个App ID,我们都可以设置该App ID所使用的APP Services,也就是其所使用的额外服务。每种额外服务都有着不同的要求,例如,如果要使用Apple Push Notification Services,则必须是一个explicit App ID,以便能唯一标识一个应用程序。下面是目前所有可选的服务和相应的配置要求。

App ID 组成为:
App ID Prefix(前缀)+'.'+ App ID Suffix(后缀)
其中前缀是由苹果公司分配的,用来标识不同的开发者,也叫Team ID,
后缀,也叫Bundle ID,是开发者自定义的标识,类似于Andriod开发中的包名,
一般使用域名反转的风格

Device:
每一个开发者membership year,只能有100次增加设备的名额。如果你增加一个设备,之后又将该设备删除,并不会将用掉的名额恢复.

在每一个开发者membership year(会员年)开始的时候,Team Agent和Admin角色可以选择删掉一些设备来恢复资格, 也可以清空所有设备来恢复到最多100次设备的名额。这个操作在Team Agent和Admin在一次新的membership year开始后即可使用,在使用时,需要注意,先将需要删除的设备删掉,然后才能添加需要新增的设备。一旦开始增加新设备,删除设备以恢复名额的功能将不再可用

共享开发账号/证书
1.Xcode导出开发者账号(*.developerprofile)或PKCS12文件(*.p12)
进入Xcode Preferences|Accounts:
选中Apple IDs列表中对应Account的的Email,点击+-之后的☸|Export Accounts,可导出包含account/code signing identity/provisioning profiles信息的*.developerprofile(Exporting a Developer Profile)文件供其他机器上的Xcode开发使用(Import该Account)。(在使用*.developerprofile导入账号、证书、调试文件的时候,有可能跟之前安装的文件冲突,所以可以运行这个文件之后将调试文件都删除,重新下载新的调试文件)    PS: *.developerprofile文件实际就是一个zip压缩文件
选中右下列表中某行Account Name条目|ViewDetails,可以查看Signing Identities和Provisioning Profiles。
选中欲导出的Signing Identity条目,右键选择Export,必须输入密码,并需授权export key "privateKey" from keychain,将导出Certificates.p12。

2.Keychain Access导出PKCS12文件(*.p12)
在Keychain Access|Certificates中选中欲导出的certificate或其下private key,右键Export或者通过菜单File|Export Items导出Certificates.p12——PKCS12 file holds the private key and certificate。
其他Mac机器上双击Certificates.p12(如有密码需输入密码)即可安装该共享证书。有了共享证书之后,在开发者网站上将欲调试的iOS设备注册到该开发者账号名下,并下载对应证书授权了iOS调试设备的Provisioning Profile文件,方可在iOS真机设备上开发调试。

注意:在钥匙串中删除某个开发者账号中存在的证书后,删除的证书会自动安装上,原因是,你在xcode的账号中加入了含有这个证书的账号,所以会自动下载下来。

PS:
1.网上说,provisioning profile包含证书,我理解的意思是,包含证书的名称,或者更详细信息,而不是包含证书本身,这个有待理解

2.将provisioning profile文件后缀该文txt后,用实用工具Apple script就可以将其打开查看里边的内容。

3.When your CSR file is created, a public and private key pair is automatically generated. Your private key is stored on your computer. On a Mac, it is stored in the login Keychain by default and can be viewed in the Keychain Access app under the "Keys" category. Your requested certificate is the public half of your key pair.

参考链接:http://blog.csdn.net/phunxm/article/details/42685597

官方文档:https://developer.apple.com/library/ios/documentation/IDEs/Conceptual/AppDistributionGuide/Troubleshooting/Troubleshooting.html

各种证书解释:http://blog.fir.im/ios-appyan-fa-de-zui-hou-chong-ci-nei-ce-yu-bu-shu/