了解 APP 應用簽名

代碼簽名

什么是代碼簽名

????代碼簽名是對可執行文件或腳本進行數字簽名,用來確認軟件的來源并保證在簽名后未被修改或損壞的措施。和數字簽名原理一樣,只不過簽名的數據是代碼而已.數字簽名使用非對稱加密和哈希函數來確保數據的完整性,可以用于識別和驗證簽名者。

代碼簽名的好處

  • 確保一段代碼自簽名后未被更改。系統甚至可以檢測到最小的更改,無論是有意的(例如惡意攻擊者)還是意外的(例如文件損壞時)。當代碼簽名完好無損時,系統可以確定代碼與簽名者的預期相符。
  • 將代碼標識為來自特定來源(開發人員或簽名者)。代碼簽名包括明確指向特定作者的密碼信息。
  • 確定代碼對于特定目的是否值得信賴。除此之外,開發人員可以使用代碼簽名來聲明應用程序的更新版本應被系統視為與先前版本相同的應用程序。

蘋果簽名過程

證書和密鑰

  1. CSR 文件
    ????通常,在開發使用的機器上應該已經有一個開發者證書,一個公鑰,以及一個私鑰。 這些是代碼簽名機制的核心。像 SSL 一樣,代碼簽名也依賴于采用 X.509 標準的公開密鑰加密。開發者通過 Key Chain 生成 CertificateSigningRequest(證書請求文件) 文件,這個文件里面包含了開發者的個人信息和公鑰,并且在申請時私鑰保存在本地

    CSR文件

  2. CER 文件
    ????開發者將 CSR 文件上傳至蘋果網站提交給 Apple Worldwide Developer Relations Certification Authority(Apple WWDRCA)Apple WWDRCA 會使用其根證書私鑰簽名生成了 .cer 證書文件,這個證書里面包含了開發者的信息和公鑰,以及數字簽名

    ????在 OS X 上,X.509 的基本組成部分(例如證書等)都是由一個叫Key chain(鑰匙串訪問)的工具來進行管理。當下載 CER 文件安裝至鑰匙串時,鑰匙串會將這兩個證書進行關聯,要用一個證書設置代碼簽名,必須擁有私鑰,所有證書的私鑰都會被列在這里。 還有一種可以用來快速地顯示出系統中能用來對代碼進行簽名的認證的方法,那就是利用用途廣泛的命令行工具 security

    security find-identity -v -p codesigning  
    
  3. P12 文件
    ????當 CER 安裝到鑰匙串中,開發者將其導出為 .P12 格式的文件,這個文件中不僅包含了公鑰信息,還有私鑰信息,以及數字簽名

申請開發證書的流程

授權機制(Entitlements) 和 配置文件 (Provisioning)

????蘋果對 App 的 部分功能設定了權限開關,把這些權限開關統一稱為 Entitlements(授權文件),并且對安裝的設備(Device)做了限制,需要注冊的設備才可以 安裝,將AppIdDeviceEntitlements以及其他信息保存到了 Provisioning Profile(描述文件)文件中。
????當開發者下載 .mobileprovision 文件后雙擊運行,Xcode 通常會將其存放在 ~/Library/MobileDevice/Provisioning Profiles/ 目錄中。開發者可以前往該目錄或者安裝 ProfilesManager.app進行查看當前電腦下的描述文件。 可以通過下面命令查看下載后的描述文件信息:

security cms -D -i <mobileprovision文件路徑>

????通過查看后,我們可以發現 Provisioning Profile 文件其實是 plist 文件, 當然,Provisioning Profile文件也是經過服務器數字簽名的,所以它是防篡改的

codesign

????蘋果對 App 簽名過程本身是由命令行工具 codesign 來完成的。通常,Xcode 會處理大多數代碼簽名任務,幫助管理代碼簽名身份,并將代碼簽名應用于構建和分發的應用程序。需要注意的是 Xcode 只允許在有限的選項中進行選擇,這些選項都是既擁有公鑰也擁有私鑰的證書。當然了,開發者也可以使用 codesign 工具進行手動簽名:

  • 手動代碼簽名

    codesign -s <身份> -v <代碼路徑>
    
  • 檢查代碼簽名

    codesign -v <代碼路徑>
    
  • 獲取有關代碼簽名信息

    codesign -d -r- <代碼路徑>
    
    

那么在簽名過程中,codeSign 做了什么呢?

????codesign 將 App 內的資源(包括可執行文件、資源、文件、嵌套代碼(Framework)等)在進行一次數字簽名,通過單向散列函數獲得哈希值,并用開發者的私鑰 M 對其進行加密,并將蘋果服務器生成的數字證書一起保存至 App 內。在 App 內可能包含不同的數字簽名:

  • 如果代碼是通用的,則每個切片(架構)的目標代碼都是單獨簽名的。此簽名存儲在二進制文件 Mach-O 本身中。
  • 應用程序包的各種數據組件(例如Info.plist文件,如果有的話)也被簽名。這些簽名存儲在_CodeSignature/CodeResources捆綁包中調用的文件中。
  • 嵌入在應用程序中的嵌套代碼(例如Framework)本身是經過簽名的,并且它們的簽名也存儲在_CodeSignature/CodeResources包中。
code_signing

App 安裝

????蘋果系統原本就持有 WWDRCA 的公鑰A,系統通過公鑰 A,對 App 內存放的蘋果服務器簽名過的數字證書進行驗證,查看是否經過蘋果官方許可,并對比 UUID 等信息,這里只驗證安裝行為是否正確。在通過證書內的開發者公鑰對代碼簽名進行驗證,這里驗證代碼的完整性。


鑰匙串-系統-Apple WWDRCA
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,606評論 6 533
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,582評論 3 418
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,540評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,028評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,801評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,223評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,294評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,442評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,976評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,800評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,996評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,543評論 5 360
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,233評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,662評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,926評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,702評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,991評論 2 374

推薦閱讀更多精彩內容