是否可以从签署 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
。您将在 PropertyList 的 DeveloperCertificates 内的 <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 应用程序的证书中获取数据?的主要内容,如果未能解决你的问题,请参考以下文章