iOS App 簽名的原理和流程

iOS 簽名機(jī)制包括各種證書:Provisioning Ptofile 、entitlements、CertificateSigningRequest、p12、AppID等。

★本文介紹一些iOS App 簽名的原理和流程,希望對(duì)您有所幫助!

一、簽名機(jī)制為了做什么

????iOS出來之前,是沒有簽名的,導(dǎo)致平臺(tái)對(duì)第三方軟件難以控制,盜版流行。蘋果希望解決這個(gè)問題,在iOS平臺(tái)對(duì)第三方APP有絕對(duì)的控制權(quán),保證安裝到iOS上的APP都是經(jīng)過蘋果官方允許的,怎么保證?? 就是通過簽名機(jī)制。

二、什么是簽名(非對(duì)稱加密RSA)

????通常我們說的簽名就是數(shù)字簽名,它是基于非對(duì)稱加密算法實(shí)現(xiàn)。對(duì)稱加密是通過同一份密鑰加密和解密數(shù)據(jù),而非對(duì)稱加密則有兩份密鑰,分別是公鑰和私鑰,用公鑰加密數(shù)據(jù),要用私鑰才能解密,用私鑰加密的數(shù)據(jù),要用公鑰才能解密,這里不再累贅RSA,如果有感興趣的同學(xué)可以看一看(RSA原理一RSA原理二)。

????數(shù)字簽名的作用是我對(duì)某一份數(shù)據(jù)打個(gè)標(biāo)記,表示我認(rèn)可了這份數(shù)據(jù)(簽個(gè)名),然后我發(fā)送給其他人,其他人可以知道這份數(shù)據(jù)是經(jīng)過我認(rèn)證的,數(shù)據(jù)沒有被篡改過。

????有了上述非對(duì)稱加密算法,就可以實(shí)現(xiàn)

簽名
校驗(yàn)

這里用MD5加密原因:

1、若原始數(shù)據(jù)有任何變化,計(jì)算出的摘要值都會(huì)變化。(不可逆)

2、摘要要夠短。(MD5加密后得到固定長(zhǎng)度(32字符)的字符串) ?(你問我為什么要夠短?請(qǐng)轉(zhuǎn)看RSA原理!)

三、通過簽名,保證安裝到iOS上的APP 都是經(jīng)過蘋果認(rèn)證允許的

????最直接的方式:蘋果官方生成一對(duì)公私鑰,在iOS里內(nèi)置一個(gè)公鑰,私鑰由蘋果后臺(tái)保存,我們上傳APP上AppsStore時(shí),蘋果后臺(tái)用私鑰對(duì)APP數(shù)據(jù)進(jìn)行簽名,iOS安裝時(shí),就會(huì)用公鑰進(jìn)行校驗(yàn)其是否是經(jīng)過蘋果官方認(rèn)證允許的。

AppStore

????如果我們只是從AppStore上下載這一種方式的話,那這件事就over了,But我們還有三種方式安裝一個(gè)APP:

1、開發(fā)APP時(shí)可以直接把開發(fā)的應(yīng)用安裝進(jìn)手機(jī)調(diào)試。

2、In-House 企業(yè)內(nèi)部分發(fā),可以直接安裝企業(yè)證書簽名后的APP。

3、AD-Hoc 相當(dāng)于企業(yè)分發(fā)的限制版,限制安裝的設(shè)備數(shù)量,較少用。

四、其他三種方式安裝方式簽名

1、開發(fā)時(shí)安裝,兩個(gè)需求

①安裝包不需要傳到蘋果服務(wù)器,可以直接在手機(jī)上安裝。

②蘋果必須對(duì)這里的安裝有控制權(quán)。(經(jīng)過蘋果認(rèn)證、不能被濫用導(dǎo)致非開發(fā)APP也能安裝)

蘋果這里用的是雙層簽名,流程如下

開發(fā)時(shí)簽名

注釋:③ 把公鑰L 傳到蘋果后臺(tái),用蘋果后臺(tái)里的私鑰A 去簽名公鑰L 。得到一份數(shù)據(jù)包包含公鑰L 以及其簽名,把這份數(shù)據(jù)包成為證書。

上面只解決了蘋果認(rèn)證,避免濫用該怎么解決呢??

蘋果再加兩個(gè)限制:

①限制再蘋果后臺(tái)注冊(cè)過的設(shè)備才可以安裝。

②限制簽名只能針對(duì)某一個(gè)具體的APP。

在上訴的第三步(蘋果用私鑰 簽名本地公鑰L),還可以增加上無線多數(shù)據(jù),這些數(shù)據(jù)都可以保證是經(jīng)過蘋果官方認(rèn)證的,不會(huì)被篡改。

避免濫用

????到這里證書已經(jīng)很復(fù)雜了,實(shí)際上除了設(shè)備ID / AppID,還有其他信息也需要蘋果簽名(APP里的iCloud / push / 后臺(tái)運(yùn)行等權(quán)限蘋果都想控制),蘋果把這些權(quán)限開關(guān)統(tǒng)一稱作Entitlements,它也需要通過簽名去授權(quán)。

????我們把上面的各種額外的信息都塞到證書里不太好,所以蘋果另外搞了一個(gè)東西(Provisioning Profile),它包含了證書以及上述提到的所有額外信息,以及所以信息的簽名。

所以整個(gè)流程稍微變了下

最終

注釋:

④把蘋果后臺(tái)申請(qǐng)的AppID、配置好的設(shè)備ID列表、APP可使用的權(quán)限和第③步的證書組成數(shù)據(jù)用私鑰A 簽名,然后把數(shù)據(jù)和簽名一起組成一個(gè)Provisioning Profile文件下載到Mac開發(fā)機(jī)

⑤開發(fā)時(shí),編譯完一個(gè)APP后,用本地的私鑰L 對(duì)這個(gè)APP進(jìn)行簽名,同時(shí)把第④步得到的Provisioning Profile文件打包進(jìn)APP里,文件名為embedded.mobileprovision。

⑥在安裝時(shí),iOS系統(tǒng)取得證書,通過系統(tǒng)內(nèi)置的公鑰A 去驗(yàn)證embedded.mobileprovision的數(shù)字簽名是否正確,里面的證書簽名也會(huì)驗(yàn)證一邊。

⑦確保了embedded.mobileprovision里的數(shù)據(jù)是蘋果認(rèn)證過的,就取出里面的數(shù)據(jù),進(jìn)行后續(xù)的設(shè)備ID是否在ID列表上,AppID是否對(duì)應(yīng)上,權(quán)限開關(guān)是否跟APP里的Entitlements對(duì)應(yīng)等。

2、另外兩種安裝方式:In-House 和 AD-Hoc?

????流程也差不多,只是企業(yè)簽名不限制安裝的設(shè)備數(shù),用戶安裝到iOS上需要手動(dòng)點(diǎn)擊信任這個(gè)企業(yè)。

五、AppStore簽名驗(yàn)證有點(diǎn)不一樣

????前面說到最簡(jiǎn)單的簽名方式,蘋果后臺(tái)簽名APP就可以了,實(shí)際上,蘋果也是這樣做的,如果過下載一個(gè)AppStore的安裝包,會(huì)發(fā)現(xiàn)里面沒有embedded.mobileprovision文件,也就是說它安裝和啟動(dòng)流程不依賴這個(gè)文件。

????據(jù)說上傳到AppStore的包,蘋果會(huì)重新對(duì)內(nèi)容加密,原來的本地私鑰簽名就沒用了,需要重新簽名,從AppStore下載的包,蘋果也不打算控制它的有效期,不需要內(nèi)置一個(gè)embedded.mobileprovision去校驗(yàn),直接在蘋果后臺(tái)的私鑰重新簽名,iOS安裝時(shí)用本地公鑰驗(yàn)證APP簽名就可以了。

????所以上傳到AppStore后,就跟你的證書 / Provisioning Profile 都沒關(guān)系了,無論他們是否過期或廢除,都不影響AppStore上的安裝包。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容