7

I've been handed an iOS app codebase, which I'd like to distribute via the existing Enterprise certificate used by the prior developer.

After importing the provided .mobileprovision file, I'm (not unsurprisingly) getting the "Valid signing identity not found" error. Specifically when building:

The identity '[name]' doesn't match any valid, non-expired certificate/private key pair in your keychains

I was given the original CertificateSigningRequest.certSigningRequest file, a .p12 file, and the .cer file. I was not given the password to the .p12 file.

Is it possible to rebuild what I need from the CertificateSigningRequest.certSigningRequest without the .p12 file's password? I can likely get the .p12 password, but not in a timely manner.

Thanks!

4

1 回答 1

20

我认识到您已经通过获取 .p12 文件的密码解决了您的问题,但我想我会稍微说明一下您提到的每个文件中的内容,以便任何人在未来。

要回答这个问题中的主要问题:我可以从 CertificateSigningRequest.certSigningRequest 文件中重建我需要的内容吗?

遗憾的是,答案是非常坚定的“不”。其根本原因是公钥基础设施 (PKI) 的核心,这是一组管理技术、人员和实践,用于处理数字证书的创建、验证、使用和撤销。PKI 的核心是公私密钥对的概念。“公共”密钥是您广泛共享的密钥,任何人都可能拥有它的副本,任何希望验证由数字证书签名的消息的人都需要访问此密钥。“私人”密钥是只有您(或更准确地说,您的机器)在签署消息时知道和使用的链接密钥。正是此签名通过使用广泛共享的“公共”密钥进行验证,从而验证消息实际上是真实的。

当我们构建开发或分发证书时,我们本质上是要求 Keychain Access、openssl 或您首选的 SSL 工具链来创建一个公私密钥对。公钥与姓名和电子邮件地址等其他“主题”字段一起进入 CertificateSigningRequest 文件,我们将此文件发送给 Apple。该文件主要告诉苹果他们可以使用什么公钥来验证你的应用程序签名——毕竟它不会给他们你的私钥的副本,如果其他人有你的私钥,他们就可以在你有效地销毁iOS 平台上的责任概念(例如,此应用程序的签名检查为有效,但我仍然不知道它是否真的有效由我信任的开发人员签名...)。在任何时候,您的私钥都不会传输到 Apple 或 Developer Portal;它非常愉快地驻留在您的钥匙串中,直到 1) 证书过期,2) 您主动从开发人员门户中撤销证书,或 3) 您意外(或有意)从钥匙串中删除密钥对。

那么,每个文件中都有什么?

CertificateSigningRequest.certSigningRequest - 这包含您在本地生成的公钥-私钥对中的公钥副本,以及证书签名请求格式所需的一些附加主题信息。Apple 会忽略这些附加信息,并在构建您的证书时使用他们为您的开发者帐户存档的姓名和电子邮件地址。

.p12 - 这是一个 PKCS#12 格式的文件,其中包含 Apple 颁发的证书的副本(它本身包含公钥)和链接的私钥的副本。此数据被加密以防止未经身份验证的访问,因此需要密码才能解密。

.cer - 这是 Apple 颁发的证书,包含密钥对的公钥部分。Apple 使用此证书来验证您提交的应用程序在传输到 App Store 审核团队的过程中没有被篡改:

  • 您使用只有您知道的私钥对您的应用程序进行签名,并将签名的二进制文件上传到 Apple。
  • 然后,Apple 使用您已经与他们共享的公钥验证签名。
    • 如果数学计算成功,那么应用程序没有被篡改,你可以开始了。
    • 如果数学不成立,要么应用程序被篡改,要么(更有可能)证书被撤销或重新生成,并且应用程序使用旧的或不正确的密钥对进行签名。

如您所见,私钥所在的唯一位置是原始开发人员的钥匙串以及加密的 .p12 文件中。根据您的评论和 Flup 的评论,您要么必须获取该 .p12 文件的密码,要么考虑突破加密。

无论如何,很高兴听到您能够从原始开发人员那里获得密码。如果您有任何后续问题,请告诉我。

于 2013-04-29T04:21:21.507 回答