iOS應(yīng)用簽名(下)

image.png

描述文件

前面的文章我們已經(jīng)介紹了簡單的應(yīng)用簽名但是這種簽名方式并不能解決應(yīng)用濫用的問題,所以蘋果又加了兩個限制.第一限制在蘋果后臺注冊過的設(shè)備才可以安裝.第二限制簽名只能針對某一個具體的APP.并且蘋果還想控制App里面的iCloud/PUSH/后臺運行/調(diào)試器附加這些權(quán)限,所以蘋果把這些權(quán)限開關(guān)統(tǒng)一稱為Entitlements(授權(quán)文件).并將這個文件放在了一個叫做Provisioning Profile(描述文件)文件中.描述文件是在AppleDevelop網(wǎng)站創(chuàng)建的(在Xcode中填上AppleID它會代辦創(chuàng)建),Xcode運行時會打包進入APP內(nèi).
所以我們使用CSR申請證書時,我們還要申請一個東西!! 就是描述文件!!流程如下

image.png

這個描述文件里面就是 可以安裝的設(shè)備有哪些.. APP的ID是什么.. 權(quán)限是些什么!
在開發(fā)時,編譯完一個 APP 后,用本地的私鑰M對這個APP進行簽名,同時把從蘋果服務(wù)器得到的 Provisioning Profile 文件打包進APP里,文件名為embedded.mobileprovision,把 APP 安裝到手機上.
image.png

我們可以利用$security cms -D -i embedded.mobileprovision命令查看Provisioning profile內(nèi)容,這些Xcode創(chuàng)建的Profile文件都存放在~/Library/MobileDevice/Provisioning Profiles/目錄下
image.png

注意! 每次我們新建項目其實會生成一個描述文件!選擇運行到手機上!! 我們只需要編譯一下!在APP包里面就可以看到.
image.png

那么為了便于我們查看信息! 我們可以通過Xcode來查看!!
image.png

當然,Provisioning profile本身也是通過簽名認證的,所以別想著你可以更改里面的東西來達到擴充權(quán)限\設(shè)備的目的.只有老老實實的去網(wǎng)站向Apple申請一份權(quán)限更多\設(shè)備更多的profile。

整體的流程

首先我們總結(jié)一下剛才的一些名詞

  • 證書:內(nèi)容是公鑰或者私鑰,由認證機構(gòu)對其簽名組成的數(shù)據(jù)包!我們開發(fā)可以使用鑰匙串訪問看到
    image.png
  • P12:就是本地私鑰,可以導(dǎo)入到其他電腦
  • Entitlements:權(quán)限文件,包含了APP一些權(quán)限的plist文件
  • CertificateSigningRequest:CSR文件包含了本地公鑰的數(shù)據(jù)文件
  • Provisioning Profile:描述文件,包含了證書/Entitlements等數(shù)據(jù),并由蘋果后臺私鑰簽名的數(shù)據(jù)包.

流程如下:

  • 第 1 步對應(yīng)的是 keychain 里的 “從證書頒發(fā)機構(gòu)請求證書”,這里就本地生成了一對公私鑰,保存的 CertificateSigningRequest 里面就包含公鑰,私鑰保存在本地電腦里.
  • 第 2 步向蘋果申請對應(yīng)把 CSR 傳到蘋果后臺生成證書.
  • 第 3 步證書下載到本地.這時本地有兩個證書.一個是第 1 步生成的私鑰,一個是這里下載回來的證書,keychain 會把這兩個證書關(guān)聯(lián)起來,因為他們公私鑰是對應(yīng)的,在XCode選擇下載回來的證書時,實際上會找到 keychain 里對應(yīng)的私鑰去簽名.這里私鑰只有生成它的這臺 Mac 有,如果別的 Mac 也要編譯簽名這個 App 怎么辦?答案是把私鑰導(dǎo)出給其他 Mac 用,在 keychain 里導(dǎo)出私鑰,就會存成 .p12 文件,其他 Mac 打開后就導(dǎo)入了這個私鑰.


    image.png
  • 第 4 步都是在蘋果網(wǎng)站上操作,配置 AppID / 權(quán)限 / 設(shè)備等,最后下載 Provisioning Profile 文件。
  • 第 5 步 XCode 會通過第 3 步下載回來的證書(存著公鑰),在本地找到對應(yīng)的私鑰(第一步生成的),用本地私鑰去簽名 App,并把 Provisioning Profile 文件命名為 embedded.mobileprovision 一起打包進去。所以任何本地調(diào)試的APP,都會有一個embedded.mobileprovision(描述文件)從App Store下載的沒有.

APP簽名的數(shù)據(jù)

這里對 App 的簽名數(shù)據(jù)保存分兩部分

  • 1.Mach-O 可執(zhí)行文件會把簽名直接寫入文件里


    MachOView查看
  • 2.其他資源文件則會保存在 _CodeSignature 目錄下在APP包里。


    image.png

至此關(guān)于iOS應(yīng)用簽名的原理就介紹完了.下篇文章將介紹iOS應(yīng)用重簽名技術(shù).
由于知識水平有限如有錯誤及不足,歡迎大家留言區(qū)評論指正.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容