ios开发证书详解(上)

简介: ios开发证书详解(上)

引言


关于开发证书配置(Certificates & Identifiers & Provisioning Profiles),相信做iOS开发的同学没少被折腾。对于一个iOS开发小白、半吊子(比如像我自己)抑或老兵,或多或少会有或曾有过以下不详、疑问、疑惑甚至困惑:


什么是App ID?Explicit/Wildcard App ID有何区别?什么是App Group ID?


什么是证书(Certificate)?如何申请?有啥用?


什么是Key Pair(公钥/私钥)?有啥用?与证书有何关联?


什么是签名(Signature)?如何签名(CodeSign)?怎样校验(Verify)?


什么是(Team)Provisioning Profiles?有啥用?


Xcode如何配置才能使用iOS真机进行开发调试?


多台机器如何共享开发者账号或证书?


遇到证书配置问题怎么办?


Xcode 7免证书调试真机调试


本文将围绕相关概念做个系统的梳理串烧。 从 Xcode 7 开始支持普通 Apple 账号进行免证书真机调试,详情参考最新官方文档《Launching Your App on Devices》,或参考本文最后一节简介。


写在前面


1.假设你使用过Apple设备(iMac/iPad/iPhone)且 注册过Apple ID(Apple Account)。 2.假设你或你所在的开发组已加入苹果开发者计划(Enroll in iOS Developer Program to become a member),即已 注册开发者账号(Apple Developer Account)。


只有拥有开发者账号,才可以申请开发/发布证书及相关配置授权文件,进而在iOS真机上开发调试Apps或发布到App Store。


开发者账号分为Individual和Company/Organization两种类型。如无特别交代,下文基于$99/Year的普通个人开发者(Individual)账号展开。


3.若要真机调试实践,你必须至少拥有一台装有Mac OS X/Xcode的Mac开发机(iMac or MacBook),其上自带原生的Keychain Access。


一.App ID(bundle identifier)


App ID即Product ID,用于标识一个或者一组App。 App ID应该和Xcode中的Bundle Identifier是一致(Explicit)的或匹配(Wildcard)的。 App ID字符串通常以 反域名(reverse-domain-name)格式的Company Identifier(Company ID)作为前缀(Prefix/Seed),一般不超过255个ASCII字符。 App ID全名会被追加Application Identifier Prefix(一般为TeamID.),分为两类:


Explicit App ID:唯一的App ID,用于唯一标识一个应用程序。例如“com.apple.garageband”这个App ID,用于标识Bundle Identifier为“com.apple.garageband”的App。


Wildcard App ID:含有通配符的App ID,用于标识一组应用程序。例如“*”(实际上是Application Identifier Prefix)表示所有应用程序;而“com.apple.*”可以表示Bundle Identifier以“com.apple.”开头(苹果公司)的所有应用程序。


用户可在Developer MemberCenter网站上注册(Register)或删除(Delete)已注册的App IDs。 App ID被配置到【XcodeTarget|Info|Bundle Identifier】下;对于Wildcard App ID,只要bundle identifier包含其作为Prefix/Seed即可。


二.设备(Device)


Device就是运行iOS系统用于开发调试App的设备。每台Apple设备使用 UDID来唯一标识。 iOS设备连接Mac后,可通过iTunes->Summary或者Xcode->Window->Devices获取iPhone的UDID(identifier)。 Apple Member Center网站个人账号下的 Devices中包含了注册过的所有可用于开发和测试的设备,普通个人开发账号每年累计最多只能注册 100个设备。


Apps signed by you or your team run only on designated development devices.


Apps run only on the test devices you specify.


用户可在网站上注册或启用/禁用(Enable/Disable)已注册的Device。 本文的Devices是指连接到Xcode被授权用于开发测试的iOS设备(iPhone/iPad)。


三.开发证书(Certificates)


1.证书的概念 证书是由公证处或认证机关开具的证明资格或权力的 证件,它是表明(或帮助断定)事理的一个 凭证。证件或凭证的尾部通常会烙印 公章。 每个中国人一生可能需要70多个证件,含15种身份证明。证件中“必需的”有30到40个。将这些证件按时间顺序铺开,那就是一个天朝子民的一生——持 准生证许可落地,以户籍证明入籍,以身份证认证身份,持结婚证以合法同居,最终以 死亡证明注销。 2.数字证书的概念 数字证书就是互联网通讯中 标志通讯各方 身份信息的一串数字,提供了一种在Internet上验证通信 实体身份的方式,其作用类似于司机的驾驶执照或日常生活中的身份证。它是由一个由权威机构—— CA机构,又称为证书授权中心(Certificate Authority)发行的,人们可以在网上用它来识别对方的身份。


数字证书是一个经证书授权中心数字签名的包含公开密钥拥有者信息以及公开密钥的文件。最简单的证书包含一个公开密钥、名称以及证书授权中心的数字签名。


数字证书还有一个重要的特征就是时效性:只在特定的时间段内有效。


数字证书中的公开密钥(公钥)相当于公章。 某一认证领域内的根证书是CA认证中心给自己颁发的证书,是信任链的起始点。安装根证书意味着对这个CA认证中心的信任。 为了防止GFW进行中间人攻击(MitM),例如篡改github证书,导致无法访问github网站等问题,可选择不信任CNNIC:


在[钥匙串-系统]中双击CNNIC ROOT,在【信任】|【使用此证书时】下拉选择【永不信任】。


0488da879f82d94bb05535dd5768b010.png



编辑切换为居中


添加图片注释,不超过 140 字(可选)


在天朝子民的一生中,户籍证明可理解为等效的根证书:有了户籍证明,才能办理身份证;有了上流的身份证,才能办理下游居住证、结婚证、计划生育证、驾驶执照等认证。 3.iOS(开发)证书 iOS证书是用来证明iOS App内容(executable code)的合法性和完整性的数字证书。对于想安装到真机或发布到AppStore的应用程序(App),只有经过签名验证(Signature Validated)才能确保来源可信,并且保证App内容是完整、未经篡改的。 iOS证书分为两类:Development和Production(Distribution)。


Development证书用来开发和调试应用程序:A development certificate identifies you, as a team member, in a development provisioning profile that allows apps signed by you to launch on devices.


Production主要用来分发应用程序(根据证书种类有不同作用):A distribution certificate identifies your team or organization in a distribution provisioning profile and allows you to submit your app to the store. Only a team agent or an admin can create a distribution certificate.


普通个人开发账号最多可注册iOS Development/Distribution证书各2个,用户可在网站上删除(Revoke)已注册的Certificate。 下文主要针对iOS App开发调试过程中的开发证书(Certificate for Development)。 4.iOS(开发)证书的根证书 那么,iOS开发证书是谁颁发的呢?或者说我们是从哪个CA申请到用于Xcode开发调试App的证书呢? iOS以及Mac OS X系统(在安装Xcode时)将自动安装AppleWWDRCA.cer这个中间证书(Intermediate Certificates),它实际上就是iOS(开发)证书的证书,即根证书(Apple Root Certificate)。 AppleWWDRCA(Apple Root CA)类似注册管理户籍的公安机关户政管理机构,AppleWWDRCA.cer之于iOS(开发)证书则好比户籍证之于身份证。 如果Mac Keychain Access证书助理在申请证书时尚未安装过该证书,请先下载安装(Signing requires that you have both the signing identity and the intermediate certificate installed in your keychain)。


6985185732a94da2ed6032797a05f009.png



编辑切换为居中


添加图片注释,不超过 140 字(可选)


5.申请证书(CSR:Certificate Signing Request) 可以在缺少证书时通过Xcode Fix Issue自动请求证书,这里通过Keychain证书助理从证书颁发机构请求证书:填写开发账号邮件和常用名称,勾选【存储到磁盘】。


020d7d43236a4aeecf585a99aad3fddd.png


编辑切换为居中


添加图片注释,不超过 140 字(可选)


keychain将生成一个包含开发者身份信息的CSR(Certificate Signing Request)文件;同时,Keychain Access|Keys中将新增一对Public/Private Key Pair(This signing identity consists of a public-private key pair that Apple issues)。


49b4b1e039ab8f550a2618ca67873db0.png



编辑切换为居中


添加图片注释,不超过 140 字(可选)


private key始终保存在Mac OS的Keychain Access中,用于签名(CodeSign)对外发布的App;public key一般随证书(随Provisioning Profile,随App)散布出去,对App签名进行校验认证。用户必须保护好本地Keychain中的private key,以防伪冒。


Keep a secure backup of your public-private key pair. If the private key is lost, you’ll have to create an entirely new identity to sign code.


Worse, if someone else has your private key, that person may be able to impersonate you.


在Apple开发网站上传该CSR文件来添加证书(Upload CSR file to generate your certificate):


36ac23747dfb62066dfb9979dca4fda1.png



编辑切换为居中


添加图片注释,不超过 140 字(可选)


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


35d1440c6b8916e6e03eb878c37949bf.png


编辑切换为居中


添加图片注释,不超过 140 字(可选)


从Apple Member Center网站下载证书到Mac上双击即可安装(当然也可在Xcode中添加开发账号自动同步证书和[生成]配置文件)。证书安装成功后,在KeychainAccess|Keys中展开创建CSR时生成的Key Pair中的私钥前面的箭头,可以查看到包含其对应公钥的证书(Your requested certificate will be the public half of the key pair.);在Keychain Access|Certificates中展开安装的证书(ios_development.cer)前面的箭头,可以看到其对应的私钥。


d20f0fbcb320d100734265db45ced675.png



编辑切换为居中


添加图片注释,不超过 140 字(可选)


2e5bca58109d681e3b400ed1f697b503.png

相关文章
|
4月前
|
运维 iOS开发 Windows
windows电脑备案ios APP获取公钥和证书指纹Sha-1值的方法
在阿里云进行APP备案、在备案IOS端的环节的时候,发现需要我们将p12证书安装在电脑上,再用xcode或或钥匙串访问来获取这个证书的公钥和sha-1值。 但是大部分开发uniapp应用的同学们,或者进行发布的运维人员的电脑都是windows,无法按照阿里云的教程来获取ios的公钥和sha-1。备案就被卡主了。 这里介绍下另一个方法,就是使用香蕉云编来在线上传证书获取。如下图所示,打开香蕉云编后,找到下图这个功能
804 0
|
开发框架 前端开发 Android开发
安卓与iOS开发中的跨平台策略
在移动应用开发的战场上,安卓和iOS两大阵营各据一方。随着技术的演进,跨平台开发框架成为开发者的新宠,旨在实现一次编码、多平台部署的梦想。本文将探讨跨平台开发的优势与挑战,并分享实用的开发技巧,帮助开发者在安卓和iOS的世界中游刃有余。
|
iOS开发 开发者
uniapp开发ios打包Error code = -5000 Error message: Error: certificate file(p12) import failed!报错问题如何解决
uniapp开发ios打包Error code = -5000 Error message: Error: certificate file(p12) import failed!报错问题如何解决
769 67
uniapp开发ios打包Error code = -5000 Error message: Error: certificate file(p12) import failed!报错问题如何解决
|
10月前
|
存储 数据安全/隐私保护 开发者
苹果app上架app store 之苹果开发者账户在mac电脑上如何使用钥匙串访问-发行-APP发布证书ios_distribution.cer-优雅草卓伊凡
苹果app上架app store 之苹果开发者账户在mac电脑上如何使用钥匙串访问-发行-APP发布证书ios_distribution.cer-优雅草卓伊凡
533 8
苹果app上架app store 之苹果开发者账户在mac电脑上如何使用钥匙串访问-发行-APP发布证书ios_distribution.cer-优雅草卓伊凡
|
11月前
|
JavaScript 搜索推荐 Android开发
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
444 8
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
|
iOS开发 开发者 MacOS
深入探索iOS开发中的SwiftUI框架
【10月更文挑战第21天】 本文将带领读者深入了解Apple最新推出的SwiftUI框架,这一革命性的用户界面构建工具为iOS开发者提供了一种声明式、高效且直观的方式来创建复杂的用户界面。通过分析SwiftUI的核心概念、主要特性以及在实际项目中的应用示例,我们将展示如何利用SwiftUI简化UI代码,提高开发效率,并保持应用程序的高性能和响应性。无论你是iOS开发的新手还是有经验的开发者,本文都将为你提供宝贵的见解和实用的指导。
376 66
|
11月前
|
存储 开发工具 数据安全/隐私保护
iOS各个证书生成细节
在iOS开发中,证书和标识符的配置至关重要。CSR(证书签名请求)由私钥生成,提交给苹果获取`.cer`证书。P12文件由`.cer`证书和私钥导出,用于开发环境。App ID确保应用唯一性。流程包括创建App ID、生成CSR、申请证书并导出P12。主P12和推送P12可使用不同CSR。
700 3
|
10月前
|
iOS开发 开发者 Windows
uniapp云打包ios应用证书的获取方法,生成指南
打包用到的一共两个文件,一个是p12格式的私钥证书,一个是证书profile文件。其中生成p12证书的时候,按照官网的教程,是需要MAC电脑来协助做的,主要是生成一些csr文件和导出p12证书等。其实这些步骤也可以借助一些其他的工具来实现,不一定使用mac电脑,用windows电脑也可以创建。
1271 0
|
存储 监控 API
app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
1412 11
|
11月前
|
人工智能 程序员 API
iOS|记一名 iOS 开发新手的前两次 App 审核经历
啥,这玩意也有新手保护期?
356 0