如何共享 iOS 证书

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何共享 iOS 证书相关的知识,希望对你有一定的参考价值。

参考技术A

借阅: 如何在多台机器上共享ios证书

注:必须得从申请机器上导出private key.到其他机器上

1. Certification(证书)
证书是对电脑开发资格的认证,每个开发者帐号有一套,分为两种:1) Developer Certification(开发证书)安装在电脑上提供权限:开发人员通过设备进行真机测试。可以生成副本供多台电脑安装;2) Distribution Certification(发布证书)安装在电脑上提供发布iOS程序的权限:开发人员可以制做测试版和发布版的程序。不可生成副本,仅有配置该证书的电脑才可使用;(副本制做介绍在下面Keychain中介绍)
2. Provisioning Profile(授权文件)
授权文件是对设备如iPod Touch、iPad、iPhone的授权,文件内记录的是设备的UDID和程序的App Id,即使被授权的设备可以安装或调试Bundle identifier与授权文件中记录的App Id对应的程序。开发者帐号在创建授权文件时候会选择App Id,(开发者帐号下App Id中添加,单选)和UDID(开发者帐号下Devices中添加最多100个,多选)。
授权文件分为两种,对应相应的证书使用:
1) Developer Provisioning Profile(开发授权文件)在装有开发证书或副本的电脑上使用,开发人员选择该授权文件通过电脑将程序安装到授权文件记录的设备中,即可进行真机测试。注意:确保电脑有权限真机调试,即安装了开发证书或副本;在开发工具中程序的Bundle identifier和选中使用的授权文件的App Id要一致;连接调试的设备的UDID在选中的授权文件中有记录。
2) Distribution Provisioning Profile(发布授权文件)在装有发布证书的电脑上(即配置证书的电脑,只有一台)制做测试版和发布版的程序。发布版就是发布到App Store上的程序文件,开发者帐号创建授权文件时选择store选项,选择App Id,无需选择UDID;测试版就是在发布之前交给测试人员可同步到设备上的程序文件,开发者帐号创建授权文件时选择AdHoc,选择App Id和UDID;只有选中的UDID对应的设备才可能安装上通过该授权文件制做的程序。
3. Keychain(开发密钥)
安装证书成功的情况下证书下都会生成Keychain,上面提到的证书副本就是通过配置证书的电脑导出Keychain(就是.p12文件)安装到其他机子上,让其他机子得到证书对应的权限。Developer Certification就可以制做副本Keychain分发到其他电脑上安装,使其可以进行真机测试。 注意:Distribution Certification只有配置证书的电脑才可使用,因此即使导出导出Keychain安装到其他电脑上,其他电脑也不可能具有证书的权限。

如何确定 iOS 应用程序是使用开发证书还是分发证书签名的?

【中文标题】如何确定 iOS 应用程序是使用开发证书还是分发证书签名的?【英文标题】:How to find out whether iOS app was signed with a development or a distribution certificate? 【发布时间】:2017-09-14 12:10:12 【问题描述】:

我想知道 iOS 应用是否可以查明它是使用开发证书还是分发证书签名的。

我发现 iOS 应用可以通过访问 bundle 的信息字典来获取一些关于自身的元信息。例如,可以通过从字典中读取 CFBundleVersion 键来检索版本。是否存在类似的获取签名证书信息的方法?

我之所以问,是因为 APNS。当我的应用程序向我的云服务器注册 APNS 设备令牌时,云服务器需要知道是否需要通过调用 Apple 的生产 APNS 服务器(“api.push.apple.com”)或开发 APNS 服务器来创建该令牌的推送消息“api.development.push.apple.com”。

【问题讨论】:

APNS 设置存储在权利中,而不是签名证书中。您查看过codesign 工具的源代码吗? 我没有查看协同设计工具的源代码。你关于权利的评论很有趣。我看到我的项目包含一个扩展名为“.entitlements”的文件。该文件指定键“APS Environment”的值为“development”。因此,从应用程序访问该信息也可以解决我的问题。我(尚)不知道如何从我的 Swift 代码中以编程方式获取该信息,但感谢您的提示! 在代码签名构建阶段,该值设置为developmentproduction。这取决于代码签名证书和配置文件。 以下是在运行时读取应用权利的分步说明:davedelong.com/blog/2018/01/10/reading-your-own-entitlements 【参考方案1】:

有关 APNS 服务器的信息位于二进制文件代码签名部分的权利中。基本步骤是:

    dladdr 获取二进制文件的加载地址。 循环遍历LC_CODE_SIGNATURE 的所有 Mach-O 加载命令 解析代码签名命令的方式与codesign 工具相同。它在 opensource.apple.com 上开源。 解析权利 plist-data。 提取 aps-environment 值。

这与在二进制文件上运行命令codesign -d --entitlements :- 基本相同。

【讨论】:

以上是关于如何共享 iOS 证书的主要内容,如果未能解决你的问题,请参考以下文章

如何保护 iOS p12 分发证书?

如何共享个人 Apple iOS 开发者帐户

如何共享现有的 iOS 配置文件(或应提交的应用程序)?

如何获取和备份 SSL 证书

Android:如何在使用相同证书签名的项目之间共享代码

iOS 多人共享开发证书