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

时间:2013-04-21 21:50:40

标签: ios keychain ios-provisioning

我已经获得了一个iOS应用程序代码库,我想通过之前开发人员使用的现有Enterprise证书进行分发。

导入提供的.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密码,但不及时。

谢谢!

1 个答案:

答案 0 :(得分:18)

我知道您已经通过获取.p12文件的密码解决了您的问题,但我想我会对您提到的每个文件中存在的内容有所了解,这样可以让任何人遇到将来的问题。

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

令人遗憾的是,答案是非常坚实的'不'。其根本原因是公钥基础设施(PKI)的核心,这是一套处理数字证书创建,验证,使用和撤销的管理技术,人员和实践。 PKI的核心是公钥 - 私钥对的概念。 “公共”密钥是您广泛共享的密钥,任何人都可以拥有该密钥,任何希望验证由数字证书签名的邮件的人都需要访问此密钥。 “私人”密钥是链接密钥,只有您(或更确切地说,您的计算机)在签名邮件时才知道并使用。正是这个签名通过使用“公共”密钥进行验证,该密钥被广泛共享,证明该消息实际上是真实的。

当我们构建开发或分发证书时,我们固有地要求Keychain Access,openssl或您首选的SSL工具链来创建公钥 - 私钥对。公钥与其他“主题”字段(如姓名和电子邮件地址)一起进入CertificateSigningRequest文件,我们将此文件发送给Apple。该文件主要告诉Apple他们可以使用哪些公钥来验证您的应用签名 - 为他们提供私钥的副本毕竟,如果其他人拥有你的私钥,他们就能够协同工作,因为你在iOS平台上有效地摧毁了问责制的概念(例如,这个App的签名检查有效,但我仍然不知道它是否是< em>实际上由我信任的开发人员签名......)。在任何时候,您的私钥都是传输到Apple或Developer Portal;它非常幸福地存在于您的钥匙串中,直到1)证书过期,2)您主动撤销开发者门户网站的证书,或3)您意外(或故意)从钥匙串中删除密钥对。

那么这些文件中的内容是什么?

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

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

.cer - 这是Apple颁发的证书,其中包含密钥对的公钥部分。 Apple使用此证书验证您提交的应用程序在运送到App Store审核小组时未被篡改:

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

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

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