恢复没有 p12 密码的签名证书?

Posted

技术标签:

【中文标题】恢复没有 p12 密码的签名证书?【英文标题】:Recover signing certificate without p12 password? 【发布时间】:2013-04-21 21:50:39 【问题描述】:

我收到了一个 ios 应用程序代码库,我想通过之前开发人员使用的现有企业证书分发它。

导入提供的 .mobileprovision 文件后,我(毫不奇怪)收到“未找到有效的签名身份”错误。特别是在构建时:

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

我得到了原始的 CertificateSigningRequest.certSigningRequest 文件、一个 .p12 文件和一个 .cer 文件。我没有得到 .p12 文件的密码。

是否可以在没有 .p12 文件密码的情况下从 CertificateSigningRequest.certSigningRequest 重建我需要的内容?我可能会得到 .p12 密码,但不是及时。

谢谢!

【问题讨论】:

cer文件是否包含私钥? 我已经通过获取 .p12 文件的密码解决了这个问题,但是如果有任何进一步的评论可以帮助其他人解决这个困境,我会暂时保留这个问题。 我认为你必须暴力破解它。 【参考方案1】:

我知道您已经通过获取 .p12 文件的密码解决了您的问题,但我想我会稍微说明一下您提到的每个文件中的内容,以使运​​行在以后的问题。

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

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

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

那么每个文件中的内容是什么?

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

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

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

您使用只有您知道的私钥对您的应用程序进行签名,并将签名的二进制文件上传到 Apple。 Apple 然后使用您已与他们共享的公钥验证签名。 如果算术正确,则表明该应用没有被篡改,您可以开始使用了。 如果数学运算不成立,则可能是应用被篡改,或者(更有可能)证书被吊销或重新生成,并且应用是使用旧的或不正确的密钥对签署的。

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

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

【讨论】:

很棒的解释-谢谢。这大致是我的想法,但此信息提供了了解这一切的详细信息。由于我的问题是“我可以...”并且您已经回答得很好,因此将其标记为答案。再次感谢。

以上是关于恢复没有 p12 密码的签名证书?的主要内容,如果未能解决你的问题,请参考以下文章

Adobe AIR-无法为签名者建立有效的证书链

如何生成自签名双向认证证书 ssl

iOS包重签名技术知识

如何保护 iOS p12 分发证书?

p12 文件中没有推送证书?

从jks证书中提取公钥和私钥(jks证书转pem证书)