iOS證書相關(guān)概念梳理

非對稱加密

RSA算法原理(一)
RSA算法原理(二)

摘要算法

另一個(gè)神奇的算法就是摘要算法。摘要算法是指,可以將任意長度的文本,通過一個(gè)算法,得到一個(gè)固定長度的文本。這里文本不一定只是文本,可以是字節(jié)數(shù)據(jù)。所以摘要算法試圖將世間萬物,變成一個(gè)固定長度的東西。摘要算法具有以下重要特性:

只要源文本不同,計(jì)算得到的結(jié)果,必然不同

無法從結(jié)果反推出源(那是當(dāng)然的,不然就能量不守恒了)

典型的摘要算法,比如大名鼎鼎的MD5和SHA。摘要算法主要用于比對信息源是否一致,因?yàn)橹灰窗l(fā)生變化,得到的摘要必然不同;而且通常結(jié)果要比源短很多,所以稱為“摘要”。

數(shù)字簽名與證書

數(shù)字簽名是什么?

知道了證書的概念,下面來看在iOS開發(fā)中涉及到的相關(guān)知識(shí)
開發(fā)者基本都知道,除了從 AppStore 下載,我們還可以有三種方式安裝一個(gè) App:

  • 開發(fā) App 時(shí)可以直接把開發(fā)中的應(yīng)用安裝進(jìn)手機(jī)進(jìn)行調(diào)試。
  • In-House 企業(yè)內(nèi)部分發(fā),可以直接安裝企業(yè)證書簽名后的 APP。
  • AD-Hoc 相當(dāng)于企業(yè)分發(fā)的限制版,限制安裝設(shè)備數(shù)量,較少用。
iOS簽名
  1. 證書申請
    通過keychain的證書助手可以向apple(ca)生成一個(gè)以certSigningRequest為后綴的文件(這個(gè)文件包含你的公鑰還有一些其他信息)和一個(gè)私鑰保存在你的 keychain里。然后通過這個(gè)csr文件在開發(fā)者賬戶里創(chuàng)建證書。

  2. 如何加密(簡單)
    非對稱加密的應(yīng)用,一句話解釋即:公鑰加密, 私鑰解密或私鑰加密,公鑰解密。但私鑰我們要自己保存,不能泄露出去。所以我們就要用我們的私鑰對app加密,然后和公鑰(證書)打包一起,安裝到app里然后驗(yàn)證

  3. 如何驗(yàn)證
    首先驗(yàn)證證書,由于證書是蘋果頒發(fā)的,即通過私鑰進(jìn)行過數(shù)字簽名,所以
    很容易驗(yàn)證。然后用證書驗(yàn)證App的數(shù)字簽名。

  4. 權(quán)限管理

  • AppID
    限制簽名只能針對某一個(gè)具體的 APP。
  • 設(shè)備
    限制在蘋果后臺(tái)注冊過的設(shè)備才可以安裝
    *其他
    iCloud / push / 后臺(tái)運(yùn)行 等權(quán)限

具體流程下圖 圖片來自iOS App 簽名的原理

image.png

  1. 在你的 Mac 開發(fā)機(jī)器生成一對公私鑰,這里稱為公鑰L,私鑰L。L:Local
  2. 蘋果自己有固定的一對公私鑰,跟上面 AppStore 例子一樣,私鑰在蘋果后臺(tái),公鑰在每個(gè) iOS 設(shè)備上。這里稱為公鑰A,私鑰A。A:Apple
  3. 把公鑰 L 傳到蘋果后臺(tái),用蘋果后臺(tái)里的私鑰 A 去簽名公鑰 L。得到一份數(shù)據(jù)包含了公鑰 L 以及其簽名,把這份數(shù)據(jù)稱為證書。
  4. 在蘋果后臺(tái)申請 AppID,配置好設(shè)備 ID 列表和 APP 可使用的權(quán)限,再加上第③步的證書,組成的數(shù)據(jù)用私鑰 A 簽名,把數(shù)據(jù)和簽名一起組成一個(gè) Provisioning Profile 文件,下載到本地 Mac 開發(fā)機(jī)。
  5. 在開發(fā)時(shí),編譯完一個(gè) APP 后,用本地的私鑰 L 對這個(gè) APP 進(jìn)行簽名,同時(shí)把第④步得到的 Provisioning Profile 文件打包進(jìn) APP 里,文件名為 embedded.mobileprovision,把 APP 安裝到手機(jī)上。
  6. 在安裝時(shí),iOS 系統(tǒng)取得證書,通過系統(tǒng)內(nèi)置的公鑰 A,去驗(yàn)證 embedded.mobileprovision 的數(shù)字簽名是否正確,里面的證書簽名也會(huì)再驗(yàn)一遍。
  7. 確保了 embedded.mobileprovision 里的數(shù)據(jù)都是蘋果授權(quán)以后,就可以取出里面的數(shù)據(jù),做各種驗(yàn)證,包括用公鑰 L 驗(yàn)證APP簽名,驗(yàn)證設(shè)備 ID 是否在 ID 列表上,AppID 是否對應(yīng)得上,權(quán)限開關(guān)是否跟 APP 里的 Entitlements 對應(yīng)等。

引用

iOS App 簽名的原理
漫談iOS程序的證書和簽名機(jī)制

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

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

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