关于证书
Certificates 由Certificate Authority 发行。
数字证书就是互联网通讯中,标志通讯各方身份信息的一串数字,验证通信实体身份的方式
- 为了在设备上安装或者调试我们的应用,我们需要签名
- 为了签名,我们需要证书
- 为了证书,我们需要签名证书申请CSR(Certificate Signing Request)
- 为了CSR,我们需要手动创建或者通过xcode 创建(CSR,即密钥)
- 拿到了CSR,我们将CSR 上传并生成证书,然后将证书下载下来
- 下载证书到 Mac 上双击即可安装(也可以在Xcode中自动同步证书)
- 证书安装成功后,在专用密钥中可以查看到包含其对应公钥的证书
- 展开安装的证书前面的箭头,可以看到其对应的专用密钥。
人工手动的方式请求证书
- 通过 Keychain 证书助理从证书颁发机构请求证书
- 从钥匙串访问–>证书助理–>从证书颁发机构请求证书–>证书助理请求界面
- ---------CertificateSigningRequest.certSigningRequest
- Keychain Access|Keys 中将新增一对非对称密钥对--------Public/Private Key Pair
- private key 始终保存在 Mac OS 的 Keychain Access 中
- public key 一般随证书(随Provisioning Profile,随App)散布出去,对 App 签名进行校验认证
- 妥善保存本地 Keychain 中的 private key,以防伪冒
供应配置文件(Provisioning Profiles)
用来签署应用程序
- 其的内容:证书、App ID 和 设备 ID
- 决定 Xcode 用哪个证书(公钥)与私钥组合来签署应用程序
- 在应用程序打包时嵌入到 .ipa 包里
- 安装应用程序时,Provisioning Profile 文件被拷贝到 iOS 设备中,运行该 iOS App 的设备通过它来认证安装的程序
Provisioning Profile的构成
(1)Name:该mobileprovision的文件名。
(2)UUID:该mobileprovision文件的真实文件名。
(3)TeamName:Apple ID账号名。
(4)TeamIdentifier:Team Identity。
(5)AppIDName:explicit/wildcard App ID name(ApplicationIdentifierPrefix)。
(6)ApplicationIdentifierPrefix:完整App ID的前缀(TeamIdentifier.*)。
(7)DeveloperCertificates:包含了可以为使用该配置文件应用签名的所有证书。
1、选中右击列表中某个Provisioning Profile可以【Show in Finder】到[~/Library/MobileDevice/Provisioning\ Profiles]目录
2、右键finder—>前往文件夹 —>/Users/winni/Library—>MobileDevice—>Provisioning Profiles
Team Provisioning Profile
Team Provisioning Profile包含一个为Xcode iOS Wildcard App ID()生成的iOS Team Provisioning Profile:(匹配所有应用程序),账户里所有的Development Certificates和Devices都可以使用它在这个team注册的所有设备上调试所有的应用程序(不管bundle identifier是什么)
为开发者自动创建的Wildcard/Explicit App IDs创建对应的iOS Team Provisioning Profile
还会为开发者自己创建的App IDs(包括通用与精确的)创建对应的iOS Team Provisioning Profile
- Add an Apple ID account to Xcode
- Fix issue “No Provisioning Profiles with a valid signing identity” in Xcode
- Assign Your App to a Team in Xcode project settings of General|Identity
- Register new device on the apple development website or Xcode detected new device connected
Team Provisioning Profile同Provisioning Profile,只不过是由Xcode自动生成的,也被配置到【XcodeTarget|Build Settings|Code Signing|Provisioning Profile】下。
在发布应用之前,创建code signing identity,然后sign code
code signatures, code signing identities, code signing certificates, and security trust policies.
Xcode中配置的Code Signing Identity(entitlements、certificate)必须与Provisioning Profile匹配,并且配置的Certificate必须在本机Keychain Access中存在对应Public/Private Key Pair,否则编译会报错。
Xcode所在的Mac设备(系统)使用CA证书(WWDRCA.cer)来判断Code Signing Identity中Certificate的合法性:
若用WWDRCA公钥能成功解密出证书并得到公钥(Public Key)和内容摘要(Signature),证明此证书确乃AppleWWDRCA发布,即证书来源可信;
再对证书本身使用哈希算法计算摘要,若与上一步得到的摘要一致,则证明此证书未被篡改过,即证书完整。
每个证书(其实是公钥)对应Key Pair中的私钥会被用来对内容(executable code,resources such as images and nib files aren’t signed)进行数字签名(CodeSign)——使用哈希算法生成内容摘要(digest)
公钥被包含在数字证书里,数字证书又被包含在描述文件(Provisioning File)中,描述文件在应用被安装的时候会被拷贝到iOS设备中
第一步,App在Mac/iOS真机上启动时,需要对配置的bundle ID、entitlements和certificate与Provisioning Profile进行匹配校验
第二步,iOS/Mac真机上的ios_development.cer被AppleWWDRCA.cer中的 public key解密校验合法后,获取每个开发证书中可信任的公钥对App的可靠性和完整性进行校验。
iOS/Mac设备(系统)使用App Provisioning Profile(Code Signing Identity)中的开发证书来判断App的合法性:
* 若用证书公钥能成功解密出App(executable code)的内容摘要(Signature),证明此App确乃认证开发者发布,即来源可信;
* 再对App(executable code)本身使用哈希算法计算摘要,若与上一步得到的摘要一致,则证明此App(executable code)未被篡改过,即内容完整。
基于Provisioning Profile校验了CodeSign的一致性
基于Certificate校验App的可靠性和完整性
启动时,真机的device ID(UUID)必须在Provisioning Profile的ProvisionedDevices授权之列
1 account, 6 code signing identities, and 35 provisioning profiles were successfully exported.
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)。
选中右下列表中某行Account Name条目|ViewDetails,可以查看Signing Identities和Provisioning Profiles。
* 选中欲导出的Signing Identity条目,点击栏底+之后的☸|Export,必须输入密码,并需授权export key “privateKey” from keychain,将导出Certificates.p12。将导出选中的Signing Identities的证书(.p12为自动添加的后缀)
点击左下角的download all按钮可从Member Center同步该账号下所有的Provisioning Profile到本地。
选中右击列表中某个Provisioning Profile可以【Show in Finder】到[~/Library/MobileDevice/Provisioning\ Profiles]目录,其中Provisioning Profile的真实名称为$(UUID).mobileprovision,名如”2488109f-ff65-442e-9774-fd50bd6bc827.mobileprovision”,其中Name中为Xcode中看到的描述性别名。
2.Keychain Access导出PKCS12文件(*.p12)