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

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

【问题讨论】:

标签: ios certificate


【解决方案1】:

尝试以下步骤:

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

    security cms -D -i embedded.mobileprovision


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

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

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

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

    brew 安装 xmlstarlet

  3. 和之前一样,我们使用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

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

【讨论】:

【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2011-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-01
    • 2020-06-07
    • 1970-01-01
    • 2020-07-12
    • 1970-01-01
    相关资源
    最近更新 更多