iOS應用簽名(下)

描述文件服務器

前面的文章咱們已經介紹了簡單的應用簽名可是這種簽名方式並不能解決應用濫用的問題,因此蘋果又加了兩個限制.第一限制在蘋果後臺註冊過的設備才能夠安裝.第二限制簽名只能針對某一個具體的APP.而且蘋果還想控制App裏面的iCloud/PUSH/後臺運行/調試器附加這些權限,因此蘋果把這些權限開關統一稱爲Entitlements(受權文件).並將這個文件放在了一個叫作Provisioning Profile(描述文件)文件中.描述文件是在AppleDevelop網站建立的(在Xcode中填上AppleID它會代辦建立),Xcode運行時會打包進入APP內.網站

因此咱們使用CSR申請證書時,咱們還要申請一個東西!! 就是描述文件!!流程以下調試

這個描述文件裏面就是 能夠安裝的設備有哪些.. APP的ID是什麼.. 權限是些什麼! 在開發時,編譯完一個 APP 後,用本地的私鑰M對這個APP進行簽名,同時把從蘋果服務器獲得的 Provisioning Profile 文件打包進APP裏,文件名爲embedded.mobileprovision,把 APP 安裝到手機上.code

咱們能夠利用$security cms -D -i embedded.mobileprovision命令查看Provisioning profile內容,這些Xcode建立的Profile文件都存放在~/Library/MobileDevice/Provisioning Profiles/目錄下cdn

注意! 每次咱們新建項目其實會生成一個描述文件!選擇運行到手機上!! 咱們只須要編譯一下!在APP包裏面就能夠看到. blog

那麼爲了便於咱們查看信息! 咱們能夠經過Xcode來查看!!資源

固然,Provisioning profile自己也是經過簽名認證的,因此別想着你能夠更改裏面的東西來達到擴充權限\設備的目的.只有老老實實的去網站向Apple申請一份權限更多\設備更多的profile。開發

總體的流程get

首先咱們總結一下剛纔的一些名詞it

  • 證書: 內容是公鑰或者私鑰,由認證機構對其簽名組成的數據包!咱們開發可使用鑰匙串訪問看到

  • P12: 就是本地私鑰,能夠導入到其餘電腦
  • Entitlements: 權限文件,包含了APP一些權限的plist文件
  • CertificateSigningRequest: CSR文件包含了本地公鑰的數據文件
  • Provisioning Profile: 描述文件,包含了證書/Entitlements等數據,並由蘋果後臺私鑰簽名的數據包.

流程以下:

  • 第 1 步對應的是 keychain 裏的 「從證書頒發機構請求證書」,這裏就本地生成了一對公私鑰,保存的 CertificateSigningRequest 裏面就包含公鑰,私鑰保存在本地電腦裏.

  • 第 2 步向蘋果申請對應把 CSR 傳到蘋果後臺生成證書.

  • 第 3 步證書下載到本地.這時本地有兩個證書.一個是第 1 步生成的私鑰,一個是這裏下載回來的證書,keychain 會把這兩個證書關聯起來,由於他們公私鑰是對應的,在XCode選擇下載回來的證書時,實際上會找到 keychain 裏對應的私鑰去簽名.這裏私鑰只有生成它的這臺 Mac 有,若是別的 Mac 也要編譯簽名這個 App 怎麼辦?答案是把私鑰導出給其餘 Mac 用,在 keychain 裏導出私鑰,就會存成 .p12 文件,其餘 Mac 打開後就導入了這個私鑰.

  • 第 4 步都是在蘋果網站上操做,配置 AppID / 權限 / 設備等,最後下載 Provisioning Profile 文件。

  • 第 5 步 XCode 會經過第 3 步下載回來的證書(存着公鑰),在本地找到對應的私鑰(第一步生成的),用本地私鑰去簽名 App,並把 Provisioning Profile 文件命名爲 embedded.mobileprovision 一塊兒打包進去。因此任何本地調試的APP,都會有一個embedded.mobileprovision(描述文件)從App Store下載的沒有.

APP簽名的數據 這裏對 App 的簽名數據保存分兩部分

  • 1.Mach-O 可執行文件會把簽名直接寫入文件裏

MachOView查看

  • 2.其餘資源文件則會保存在 _CodeSignature 目錄下在APP包裏。

至此關於iOS應用簽名的原理就介紹完了.下篇文章將介紹iOS應用重簽名技術. 因爲知識水平有限若有錯誤及不足,歡迎你們留言區評論指正.

原文地址:

相關文章
相關標籤/搜索