2014-01-14 44 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上的沙盒程序要多得多。

相關問題