iOS應用簽名(下)

iOS玩命發表於2019-05-08

描述檔案

前面的文章我們已經介紹了簡單的應用簽名但是這種簽名方式並不能解決應用濫用的問題,所以蘋果又加了兩個限制.第一限制在蘋果後臺註冊過的裝置才可以安裝.第二限制簽名只能針對某一個具體的APP.並且蘋果還想控制App裡面的iCloud/PUSH/後臺執行/偵錯程式附加這些許可權,所以蘋果把這些許可權開關統一稱為Entitlements(授權檔案).並將這個檔案放在了一個叫做Provisioning Profile(描述檔案)檔案中.描述檔案是在AppleDevelop網站建立的(在Xcode中填上AppleID它會代辦建立),Xcode執行時會打包進入APP內.

所以我們使用CSR申請證書時,我們還要申請一個東西!! 就是描述檔案!!流程如下

iOS應用簽名(下)

這個描述檔案裡面就是 可以安裝的裝置有哪些.. APP的ID是什麼.. 許可權是些什麼! 在開發時,編譯完一個 APP 後,用本地的私鑰M對這個APP進行簽名,同時把從蘋果伺服器得到的 Provisioning Profile 檔案打包進APP裡,檔名為embedded.mobileprovision,把 APP 安裝到手機上.

iOS應用簽名(下)

我們可以利用$security cms -D -i embedded.mobileprovision命令檢視Provisioning profile內容,這些Xcode建立的Profile檔案都存放在~/Library/MobileDevice/Provisioning Profiles/目錄下

iOS應用簽名(下)

注意! 每次我們新建專案其實會生成一個描述檔案!選擇執行到手機上!! 我們只需要編譯一下!在APP包裡面就可以看到.

iOS應用簽名(下)

那麼為了便於我們檢視資訊! 我們可以通過Xcode來檢視!!

iOS應用簽名(下)

當然,Provisioning profile本身也是通過簽名認證的,所以別想著你可以更改裡面的東西來達到擴充許可權\裝置的目的.只有老老實實的去網站向Apple申請一份許可權更多\裝置更多的profile。

整體的流程

首先我們總結一下剛才的一些名詞

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

iOS應用簽名(下)

  • **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 開啟後就匯入了這個私鑰.

    iOS應用簽名(下)

  • 第 4 步都是在蘋果網站上操作,配置 AppID / 許可權 / 裝置等,最後下載 Provisioning Profile 檔案。

  • 第 5 步 XCode 會通過第 3 步下載回來的證書(存著公鑰),在本地找到對應的私鑰(第一步生成的),用本地私鑰去簽名 App,並把 Provisioning Profile 檔案命名為 embedded.mobileprovision 一起打包進去。所以任何本地除錯的APP,都會有一個embedded.mobileprovision(描述檔案)從App Store下載的沒有.

APP簽名的資料 這裡對 App 的簽名資料儲存分兩部分

  • 1.Mach-O 可執行檔案會把簽名直接寫入檔案裡
    iOS應用簽名(下)

MachOView檢視

  • 2.其他資原始檔則會儲存在 _CodeSignature 目錄下在APP包裡。
    iOS應用簽名(下)

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

微信公眾號“iOSSir”!每日干貨、程式資訊分享!

看你想看的,得你想得的!

iOS開發者微信交流群!如果二維碼過期了,可以新增公眾號小助理微信“kele22558”拉你進群!

iOS應用簽名(下)

相關文章