上架Appstore背后的故事

來(lái)源: Cocoa開(kāi)發(fā)者社區(qū)
作者:鄭明明
時(shí)間:2021-04-01
17011
眾說(shuō)周知,iOS系統(tǒng)對(duì)第三方APP擁有很強(qiáng)力的控制權(quán),有別于安卓系統(tǒng)上可以從任意地方下載,蘋(píng)果保證了每一個(gè)安裝在iOS系統(tǒng)中的APP都是經(jīng)過(guò)官方認(rèn)證的。那么在這表層現(xiàn)象的背后,引發(fā)我們的思考,蘋(píng)果是如何保證認(rèn)證。

前言

眾說(shuō)周知,iOS系統(tǒng)對(duì)第三方APP擁有很強(qiáng)力的控制權(quán),有別于安卓系統(tǒng)上可以從任意地方下載,蘋(píng)果保證了每一個(gè)安裝在iOS系統(tǒng)中的APP都是經(jīng)過(guò)官方認(rèn)證的。那么在這表層現(xiàn)象的背后,引發(fā)我們的思考,蘋(píng)果是如何保證認(rèn)證。

640.webp.jpg

準(zhǔn)備知識(shí):非對(duì)稱加密

一、理論

首先說(shuō)到非對(duì)稱加密,大家都熟知一個(gè)算法,RSA(又三位數(shù)學(xué)家名字首字母構(gòu)成),這個(gè)算法中包含很多數(shù)學(xué)公式和理論證明,這里就不做深究。我們來(lái)簡(jiǎn)單地理解下非對(duì)稱加密的思想。

先來(lái)看看對(duì)稱加密的過(guò)程,對(duì)稱加密的雙方都保持相同的加密密鑰和解密密鑰,數(shù)據(jù)經(jīng)過(guò)加密密鑰加密之后再網(wǎng)絡(luò)中傳輸,對(duì)稱加密最大的問(wèn)題就是解密秘鑰的如何安全傳輸。

再來(lái)看看非對(duì)稱加密,非對(duì)稱加密有兩個(gè)密鑰,公鑰和私鑰,公鑰公開(kāi),私鑰私有。

二、非對(duì)稱加密的例子

加密:

A想要傳輸信息給B,那么B首先生成公鑰和私鑰,公鑰發(fā)送給A,私鑰保留,A收到B的公鑰之后,將信息利用公鑰加密,然后傳輸給B,B通過(guò)私鑰解密。

防止篡改:

B想要給A發(fā)送一個(gè)證明,那么B首先生成公鑰和私鑰,利用私鑰加密證明生成加密文件,然后將證明和加密文件以及公鑰一同發(fā)送給A,A收到之后,利用公鑰將加密文件解密,然后對(duì)比證明,如果相同,則可以認(rèn)為證明沒(méi)有被篡改過(guò)。

蘋(píng)果的數(shù)字簽名

蘋(píng)果生成了一對(duì)密鑰,公鑰安裝在每臺(tái)iOS設(shè)備上,私鑰保存在蘋(píng)果后臺(tái)服務(wù)器中,當(dāng)APP上架到Appstore的時(shí)候,蘋(píng)果后臺(tái)用私鑰對(duì)App進(jìn)行簽名(加密),當(dāng)用戶使用iOS設(shè)備下載App時(shí),利用設(shè)備中的公鑰驗(yàn)證簽名,如果簽名正確,那么可以認(rèn)為該App是被官方認(rèn)證的,同時(shí)也沒(méi)有被修改過(guò)。

上面的邏輯很通俗易懂,當(dāng)然,這只是最簡(jiǎn)單的邏輯??紤]到很多實(shí)際情況,蘋(píng)果制定了更為復(fù)雜的簽名機(jī)制。

實(shí)際情況

開(kāi)發(fā)者可以直接把開(kāi)發(fā)中的應(yīng)用安裝進(jìn)手機(jī)進(jìn)行調(diào)試

更復(fù)雜的簽名機(jī)制

一、簽名

首先在Mac機(jī)器中生成一對(duì)公鑰和私鑰,這里標(biāo)記為公鑰M,私鑰M(M:Mac)

同樣蘋(píng)果仍然持有一對(duì)密鑰,公鑰放在iOS設(shè)備上,私鑰放在后臺(tái)服務(wù)器,這里標(biāo)記為公鑰A,私鑰A(A:Apple)

簽名:

1.將公鑰M上傳到后臺(tái)服務(wù)器,通過(guò)私鑰A進(jìn)行簽名,然后返回簽名和公鑰M,將其稱為證書(shū)

2.用私鑰M對(duì)App簽名

將以上兩者內(nèi)容打包,安裝在手機(jī)上

二、驗(yàn)證

首先利用設(shè)備中的公鑰A對(duì)證書(shū)中的簽名進(jìn)行驗(yàn)證,確保公鑰M是是認(rèn)證過(guò)的

然后利用公鑰鑰M對(duì)App簽名進(jìn)行驗(yàn)證,確保App是認(rèn)證過(guò)的

更完善的策略設(shè)計(jì)

以上是簽名的大致過(guò)程,但是蘋(píng)果還加了兩個(gè)限制:

1.只有在后臺(tái)注冊(cè)過(guò)的設(shè)備才能安裝

2.簽名機(jī)制應(yīng)該針對(duì)具體的某一App

完善的簽名機(jī)制

做一些小調(diào)整

在簽名過(guò)程中,原來(lái)只講私鑰M上傳后臺(tái)服務(wù)器,現(xiàn)在需要將設(shè)備的IDs和AppID以及Entitlements(權(quán)限開(kāi)關(guān))也傳入到后臺(tái)服務(wù)器

先利用私鑰A簽名得到證書(shū),然后將證書(shū)和添加的信息打包后再用私鑰簽名(由一次簽名變成兩次簽名,驗(yàn)證也從一次變成兩次)

在驗(yàn)證過(guò)程中,添加了兩項(xiàng)驗(yàn)證:

1.用設(shè)備IDs驗(yàn)證iOS設(shè)備是否屬于注冊(cè)的設(shè)備范圍

2.用AppID驗(yàn)證App的ID是否對(duì)應(yīng)

概念與實(shí)際操作對(duì)應(yīng)

一、簽名

在keychain中選擇“從證書(shū)頒發(fā)機(jī)構(gòu)請(qǐng)求證書(shū)”,可以在本地生成一對(duì)公鑰私鑰,私鑰保存在電腦中,公鑰為生成的CertificateSigningRequest

iOS系統(tǒng)中保存一個(gè)公鑰,蘋(píng)果后臺(tái)保存一個(gè)私鑰

簽名:

1.將CertificateSigningRequest上傳到服務(wù)器進(jìn)行證書(shū)的申請(qǐng),然后在網(wǎng)頁(yè)上設(shè)置設(shè)備的IDs、AppID和Entitlements,配置完成后即可下載Provisioning Profile文件(該文件中包含證書(shū)、設(shè)備IDs、AppID、Entitlements)

2.Xcode通過(guò)Provisioning Profile中的本地公鑰可以找到對(duì)應(yīng)的私鑰(如果其他機(jī)器想要編譯這個(gè)APP,則需要將私鑰導(dǎo)出,為.p12文件),并簽名該App,接著把Provisioning Profile文件命名為embedded.mobileprovision一同打包

二、驗(yàn)證

1.先用公鑰驗(yàn)證證書(shū)和附加信息的包的簽名,然后再驗(yàn)證證書(shū)的簽名

2.利用公鑰驗(yàn)證App簽名

3.利用附加信息驗(yàn)證

立即登錄,閱讀全文
版權(quán)說(shuō)明:
本文內(nèi)容來(lái)自于Cocoa開(kāi)發(fā)者社區(qū),本站不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。文章內(nèi)容系作者個(gè)人觀點(diǎn),不代表快出海對(duì)觀點(diǎn)贊同或支持。如有侵權(quán),請(qǐng)聯(lián)系管理員(zzx@kchuhai.com)刪除!
相關(guān)文章
法院推翻裁決,蘋(píng)果在巴西暫時(shí)不用開(kāi)放App Store
法院推翻裁決,蘋(píng)果在巴西暫時(shí)不用開(kāi)放App Store
今年11月,巴西監(jiān)管機(jī)構(gòu)裁決蘋(píng)果不得阻止開(kāi)發(fā)者在巴西App Store外部分發(fā)應(yīng)用,要求蘋(píng)果在20天內(nèi)允許使用替代支付系統(tǒng)和側(cè)載,否則將面臨每天25萬(wàn)雷亞爾(當(dāng)前約30.2萬(wàn)元)的罰款。
App Store
巴西市場(chǎng)
蘋(píng)果
2024-12-112024-12-11
蘋(píng)果提醒開(kāi)發(fā)者:臨近圣誕節(jié),App Store應(yīng)用審核時(shí)間可能延長(zhǎng)
蘋(píng)果提醒開(kāi)發(fā)者:臨近圣誕節(jié),App Store應(yīng)用審核時(shí)間可能延長(zhǎng)
蘋(píng)果公司今日通知開(kāi)發(fā)者,隨著圣誕節(jié)的臨近,App Store的審核時(shí)間可能會(huì)增加。蘋(píng)果建議開(kāi)發(fā)者開(kāi)始更新他們的應(yīng)用程序和游戲,為假日季做好準(zhǔn)備。
App Store
開(kāi)發(fā)者
蘋(píng)果
2024-12-052024-12-05
ASO必讀:影響應(yīng)用商店中App排名的關(guān)鍵因素
ASO必讀:影響應(yīng)用商店中App排名的關(guān)鍵因素
在當(dāng)今數(shù)字化時(shí)代,應(yīng)用已成為我們生活中不可或缺的一部分。應(yīng)用商店中有數(shù)以百萬(wàn)計(jì)的應(yīng)用程序,對(duì)于應(yīng)用開(kāi)發(fā)者來(lái)說(shuō),了解影響其應(yīng)用排名的因素至關(guān)重要。
ASO
App
應(yīng)用商店
2024-11-072024-11-07
歐盟地區(qū)App Store商業(yè)應(yīng)用開(kāi)發(fā)者,即日起需提供交易者身份資訊
歐盟地區(qū)App Store商業(yè)應(yīng)用開(kāi)發(fā)者,即日起需提供交易者身份資訊
應(yīng)對(duì)歐盟頒布的《數(shù)字服務(wù)法》,Apple要求在歐盟App Store發(fā)布應(yīng)用程序的開(kāi)發(fā)者必須提供交易者(Trader)身份資訊。
App Store
開(kāi)發(fā)者
2024-10-232024-10-23
優(yōu)質(zhì)服務(wù)商推薦
更多
掃碼登錄
打開(kāi)掃一掃, 關(guān)注公眾號(hào)后即可登錄/注冊(cè)
加載中
二維碼已失效 請(qǐng)重試
刷新
賬號(hào)登錄/注冊(cè)
小程序
快出海小程序
公眾號(hào)
快出海公眾號(hào)
商務(wù)合作
商務(wù)合作
投稿采訪
投稿采訪
出海管家
出海管家