2014-01-14 43 views
4

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

+0

难道你不能从Apple Developer Portal中复制公钥/私钥吗?答案如下:http://stackoverflow.com/a/6708011/1515075 –

回答

1

尝试以下步骤:

  1. 提取您的iOS应用程序(扩展名:.ipa)的内容。你可以简单地使用Archive Utility来做到这一点。
  2. 切换到提取的内容,在那里你看到一个应用程序文件(扩展名:.app
  3. 右键点击应用,然后选择显示包内容
  4. 你会看到你的名字下使用供应配置文件:embedded.mobileprovision
  5. 在终端(使用正确的路径)中执行以下命令或使用您选择的应用程序(如TextWrangler)打开embedded.mobileprovision。你会找到<data>元素中的签名证书密钥(或者,如果你使用一个以上的证书)内DeveloperCertificates的对propertyList

    安全 CMS -D -i embedded.mobileprovision


此外,如果要提取的公共密钥并将其直接保存到一个文件中,执行终端如下:

  1. 下载并安装自制,如果你还没有安装它已经:

    红宝石-e “$(卷曲-fsSL https://raw.github.com/mxcl/homebrew/go/install)”

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

    brew install 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'{print $ 1}'| sed'/^$/d'| base64 -D | openssl x509 -inform der> publickey。PEM

  4. 你会找到公共密钥的文件publickey.pem

+1

你应该也可以在运行时做到这一点。见http://stackoverflow.com/questions/17584426/check-if-app-is-ad-hocdevapp-store-build-at-run-time – jverrijt

1

中如果你想从应用程序内部检查证书,那么它在iOS上是不可能的。其中一个主要原因是Apple申请辞职。

iOS应用程序在Mac OS上的沙盒程序要多得多。

相关问题