上架Appstore背后的故事

原文鏈接

前言

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

準(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ò)朴上。

蘋果的數(shù)字簽名

蘋果生成了一對(duì)密鑰,公鑰安裝在每臺(tái)iOS設(shè)備上娱挨,私鑰保存在蘋果后臺(tái)服務(wù)器中余指,當(dāng)APP上架到Appstore的時(shí)候,蘋果后臺(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í)際情況占键,蘋果制定了更為復(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)

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

簽名:

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

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

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

二萤晴、驗(yàn)證

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

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

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

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

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

簽名機(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簽名得到證書两入,然后將證書和添加的信息打包后再用私鑰簽名(由一次簽名變成兩次簽名,驗(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中選擇“從證書頒發(fā)機(jī)構(gòu)請(qǐng)求證書”,可以在本地生成一對(duì)公鑰私鑰紧武,私鑰保存在電腦中剃氧,公鑰為生成的CertificateSigningRequest

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

簽名:

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

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

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

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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市诸尽,隨后出現(xiàn)的幾起案子原杂,更是在濱河造成了極大的恐慌,老刑警劉巖弦讽,帶你破解...
    沈念sama閱讀 221,548評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件污尉,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡往产,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門某宪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)仿村,“玉大人,你說(shuō)我怎么就攤上這事兴喂“遥” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 167,990評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵衣迷,是天一觀的道長(zhǎng)畏鼓。 經(jīng)常有香客問(wèn)我,道長(zhǎng)壶谒,這世上最難降的妖魔是什么云矫? 我笑而不...
    開(kāi)封第一講書人閱讀 59,618評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮汗菜,結(jié)果婚禮上让禀,老公的妹妹穿的比我還像新娘。我一直安慰自己陨界,他們只是感情好巡揍,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,618評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著菌瘪,像睡著了一般腮敌。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 52,246評(píng)論 1 308
  • 那天糜工,我揣著相機(jī)與錄音斗这,去河邊找鬼。 笑死啤斗,一個(gè)胖子當(dāng)著我的面吹牛表箭,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播钮莲,決...
    沈念sama閱讀 40,819評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼免钻,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了崔拥?” 一聲冷哼從身側(cè)響起极舔,我...
    開(kāi)封第一講書人閱讀 39,725評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎链瓦,沒(méi)想到半個(gè)月后拆魏,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,268評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡慈俯,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,356評(píng)論 3 340
  • 正文 我和宋清朗相戀三年渤刃,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片贴膘。...
    茶點(diǎn)故事閱讀 40,488評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡卖子,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出刑峡,到底是詐尸還是另有隱情洋闽,我是刑警寧澤,帶...
    沈念sama閱讀 36,181評(píng)論 5 350
  • 正文 年R本政府宣布突梦,位于F島的核電站诫舅,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏宫患。R本人自食惡果不足惜刊懈,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,862評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望撮奏。 院中可真熱鬧俏讹,春花似錦、人聲如沸畜吊。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,331評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)玲献。三九已至殉疼,卻和暖如春梯浪,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背瓢娜。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,445評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工挂洛, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人眠砾。 一個(gè)月前我還...
    沈念sama閱讀 48,897評(píng)論 3 376
  • 正文 我出身青樓虏劲,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親褒颈。 傳聞我的和親對(duì)象是個(gè)殘疾皇子柒巫,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,500評(píng)論 2 359

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

  • 前言 眾說(shuō)周知,iOS系統(tǒng)對(duì)第三方APP擁有很強(qiáng)力的控制權(quán)谷丸,有別于安卓系統(tǒng)上可以從任意地方下載堡掏,蘋果保證了每一個(gè)安...
    鄭明明閱讀 1,909評(píng)論 8 5
  • 轉(zhuǎn)自 bang' blog 有改動(dòng)。 iOS 簽名機(jī)制挺復(fù)雜刨疼,各種證書泉唁,Provisioning Profile...
    就叫yang閱讀 796評(píng)論 0 2
  • 原文轉(zhuǎn)載: https://wereadteam.github.io/2017/03/13/Signature/ ...
    walkerwzy閱讀 378評(píng)論 0 0
  • 原文地址:iOS App 簽名的原理 bang’s blog iOS 簽名機(jī)制挺復(fù)雜,各種證書揩慕,Provision...
    高浩浩浩浩浩浩閱讀 664評(píng)論 0 3
  • 你會(huì)娶我嗎 你會(huì)嫁我嗎 頭可斷亭畜,血可流 我會(huì)一世向你低頭 你會(huì)離婚嗎 心可跳,腳可走 我會(huì)立馬爬墻走
    yukhaCHAN閱讀 116評(píng)論 0 0