為什么要做雙重驗(yàn)證甥雕?
debug模式下,安裝包不需要上傳到App Store,可以直接安裝到手機(jī)上。蘋果為了保證系統(tǒng)的安全性,又必須對(duì)安裝的APP有絕對(duì)的控制權(quán)。APP必須經(jīng)過蘋果允許才可以安裝砂客,不能被濫用導(dǎo)致非開發(fā)APP也能被安裝。為了實(shí)現(xiàn)這些需求,iOS簽名的復(fù)雜度也就開始增加了,蘋果這里給出的方案是雙層簽名呵恢。
雙重代碼簽名的實(shí)現(xiàn)流程
說明:
iOS的雙層代碼簽名流程這里簡單梳理一下,這也不是最終的iOS簽名原理鞠值。iOS的最終簽名在這個(gè)基礎(chǔ)上還要稍微加點(diǎn)東西。
首先這里有兩個(gè)角色渗钉。一個(gè)是iOS系統(tǒng) 還有一個(gè)就是我們的Mac系統(tǒng)彤恶,因?yàn)閕OS的APP開發(fā)環(huán)境在Mac系統(tǒng)下,所以這個(gè)依賴關(guān)系成為了蘋果雙層簽名的基礎(chǔ)鳄橘。
步驟:
1.在Mac系統(tǒng)中生成非對(duì)稱加密算法的一對(duì)公鑰\私鑰(你的Xcode幫你代辦了).這里稱為公鑰M 私鑰M 声离。 M = Mac
2.蘋果自己有固定的一對(duì)公私鑰,跟之前App Store原理一樣,私鑰在蘋果后臺(tái),公鑰在每個(gè)iOS系統(tǒng)中.這里稱為公鑰A , 私鑰A. A=Apple
3.把公鑰M 以及一些你開發(fā)者的信息,傳到蘋果后臺(tái)(這個(gè)就是CSR文件),用蘋果后臺(tái)里的私鑰 A 去簽名公鑰M瘫怜。得到一份數(shù)據(jù)包含了公鑰M 以及其簽名术徊,把這份數(shù)據(jù)稱為證書。
4.在開發(fā)時(shí)鲸湃,編譯完一個(gè) APP 后赠涮,用本地的私鑰 M(今后你導(dǎo)出的P12) 對(duì)這個(gè) APP 進(jìn)行簽名,同時(shí)把第三步得到的證書一起打包進(jìn) APP 里唤锉,安裝到手機(jī)上。
5.在安裝時(shí)别瞭,iOS 系統(tǒng)取得證書窿祥,通過系統(tǒng)內(nèi)置的公鑰 A,去驗(yàn)證證書的數(shù)字簽名是否正確蝙寨。
6.驗(yàn)證證書后確保了鑰 M 是蘋果認(rèn)證過的晒衩,再用公鑰 M 去驗(yàn)證 APP 的簽名,這里就間接驗(yàn)證了這個(gè) APP 安裝行為是否經(jīng)過蘋果官方允許墙歪。(這里只驗(yàn)證安裝行為听系,不驗(yàn)證APP 是否被改動(dòng),因?yàn)殚_發(fā)階段 APP 內(nèi)容總是不斷變化的虹菲,蘋果不需要管靠胜。)
注意:以上的操作會(huì)存在一個(gè)重大的bug,蘋果是絕對(duì)不允許這樣的事情發(fā)生的。就是這樣子操作的話我們可以不經(jīng)過蘋果的服務(wù)器生成證書浪漠,自己進(jìn)行驗(yàn)證就可以安裝APP陕习,所以就引申出了描述文件。
描述文件
描述文件(Provisioning profile)一般包括三樣?xùn)|西:證書址愿、App ID该镣、設(shè)備信息、權(quán)限信息响谓。當(dāng)我們?cè)谡鏅C(jī)運(yùn)行或者打包一個(gè)項(xiàng)目的時(shí)候损合,證書用來證明我們程序的安全性和合法性。
蘋果為了解決應(yīng)用濫用的問題,所以蘋果又加了兩個(gè)限制:
第一限制在蘋果后臺(tái)注冊(cè)過的設(shè)備才可以安裝娘纷。
第二限制簽名只能針對(duì)某一個(gè)具體的APP嫁审。
并且蘋果還想控制App里面的iCloud/PUSH/后臺(tái)運(yùn)行/調(diào)試器附加這些權(quán)限,所以蘋果把這些權(quán)限開關(guān)統(tǒng)一稱為Entitlements(授權(quán)文件).并將這個(gè)文件放在了一個(gè)叫做Provisioning Profile(描述文件)文件中。
描述文件是在AppleDevelop網(wǎng)站創(chuàng)建的(在Xcode中填上AppleID它會(huì)代辦創(chuàng)建),Xcode運(yùn)行時(shí)會(huì)打包進(jìn)入APP內(nèi)失驶。
所以我們使用CSR申請(qǐng)證書時(shí),我們還要申請(qǐng)一個(gè)東西!! 就是描述文件!
在開發(fā)時(shí),編譯完一個(gè) APP 后,用本地的私鑰M對(duì)這個(gè)APP進(jìn)行簽名,同時(shí)把從蘋果服務(wù)器得到的 Provisioning Profile 文件打包進(jìn)APP里,文件名為embedded.mobileprovision,把 APP 安裝到手機(jī)上土居。最后系統(tǒng)進(jìn)行驗(yàn)證。
注意:描述文件不能篡改嬉探,也別想著改擦耀,改的話就驗(yàn)證不通過了。當(dāng)需要新的描述文件時(shí)候只能夠重新向蘋果服務(wù)器生成涩堤。