是否可以从签署 iOS 应用程序的证书中获取数据?

Posted

技术标签:

【中文标题】是否可以从签署 iOS 应用程序的证书中获取数据?【英文标题】:Is it possible to get data from the certificate iOS application was signed with? 【发布时间】:2014-01-14 14:46:07 【问题描述】:

我需要以编程方式从用于签署 ios 应用程序的证书中获取数据(公钥)。有谁知道这是否可能?有一些API吗?看起来 MacOS 有多种解决方案,但没有一个适合 iOS。

【问题讨论】:

你不能从 Apple Developer Portal 复制公钥/私钥,正如答案所说:***.com/a/6708011/1515075 【参考方案1】:

尝试以下步骤:

    提取您的 iOS 应用程序的内容(扩展名:.ipa)。为此,您只需使用存档实用程序即可。 切换到提取的内容,您会在其中看到一个应用文件(扩展名:.app) 右击应用并选择显示包内容 您会看到您在以下名称下使用的配置文件:embedded.mobileprovision 在终端中执行以下命令(使用正确的路径)或使用您选择的应用程序(如 TextWrangler)打开 embedded.mobileprovision。您将在 PropertyListDeveloperCertificates 内的 <data> 元素中找到签名证书密钥(或证书,如果您使用了多个)

    security cms -D -i embedded.mobileprovision


另外,如果要提取公钥并直接保存到文件中,在终端中执行以下操作:

    如果您尚未安装 Homebrew,请下载并安装它:

    ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go/install)"

    安装 XMLStarlet 或任何其他帮助我们解析 plist 内容的工具:

    brew 安装 xmlstarlet

    和之前一样,我们使用security cms 命令来解码embedded.mobileprovision 配置文件,但这次我们直接将其提供给XMLStarlet(xml 命令)来解析DeveloperCertificates 元素,其中包含公钥。我们使用 openssl 读取它并将其写入一个文件,我们称之为publickey.pem:

    security cms -D -i embedded.mobileprovision | xml sel -t -v "/plist/dict/key[. = 'DeveloperCertificates']/following-sibling::array[1]/data[1]" | awk '打印 $1' | sed '/^$/d' | base64 -D | openssl x509 -inform der > publickey.pem

    您可以在文件publickey.pem中找到公钥

【讨论】:

您应该也可以在运行时执行此操作。见***.com/questions/17584426/…【参考方案2】:

如果您想从应用程序内部检查证书,那么在 iOS 上是不可能的。主要原因之一是应用程序已被 Apple 辞职。

iOS 应用程序比 Mac OS 上的应用程序更加沙盒化。

【讨论】:

以上是关于是否可以从签署 iOS 应用程序的证书中获取数据?的主要内容,如果未能解决你的问题,请参考以下文章

为 iOS 9 重新签署 IPA

使用另一个证书签署 iOS 应用程序

如何为 App Store 分发重新签署 iOS 应用程序?

Maven 可以重新签署依赖项吗?

向应用商店中的现有应用发布更新时签署 iOS 应用

如何下载私钥证书分发 iOS?