iOS 簽名流程

iOS簽名

iOS開發(fā)時(shí)真機(jī)測(cè)試、AdHoc、應(yīng)用上架,我們都需要先到官網(wǎng)下載證書。這一過(guò)程其實(shí)就是iOS簽名機(jī)制。這一過(guò)程保證了每一個(gè)安裝到iOS平臺(tái)的應(yīng)用都是蘋果允許的。

數(shù)字簽名

數(shù)字簽名主要是根據(jù)非對(duì)稱算法實(shí)現(xiàn)的,對(duì)稱加密是通過(guò)同一份密鑰加密和解密數(shù)據(jù),而非對(duì)稱加密則有兩份密鑰,分別是公鑰和私鑰,用公鑰加密的數(shù)據(jù),要用私鑰才能解密,用私鑰加密的數(shù)據(jù),要用公鑰才能解密。
數(shù)字簽名作用是當(dāng)我對(duì)數(shù)據(jù)打了一個(gè)標(biāo)記,表示我認(rèn)可了這份數(shù)據(jù)(簽了個(gè)名),然后我發(fā)送給其他人,其他人可以知道這份數(shù)據(jù)是經(jīng)過(guò)我認(rèn)證的,數(shù)據(jù)沒(méi)有被篡改過(guò)。

數(shù)字簽名.png
  1. 首先用一種算法計(jì)算出原始數(shù)據(jù)的摘要。摘要一般滿足a.原始數(shù)據(jù)變化,摘要也要變化。b.摘要要足夠短。一般使用MD5算法。
  2. 生成一份非對(duì)稱加密的公鑰私鑰,私鑰自己拿著,公鑰發(fā)布出去。
  3. 用私鑰將摘要進(jìn)行加密,作為原始數(shù)據(jù)的簽名。將原始數(shù)據(jù)和簽名一起發(fā)送給客戶。
  4. 用戶收到數(shù)據(jù)后,將簽名通過(guò)公鑰解密得到摘要。數(shù)據(jù)通過(guò)同樣算法加密得到摘要,判斷摘要是否相等,來(lái)確定數(shù)據(jù)是否被篡改。

iOS 簽名

最簡(jiǎn)單的簽名

最簡(jiǎn)單的簽名方式為,蘋果生成公鑰和私鑰,私鑰放到蘋果后臺(tái),iOS內(nèi)置公鑰。App上傳到App Store時(shí),蘋果后臺(tái)用私鑰對(duì)App進(jìn)行數(shù)字簽名,iOS設(shè)備下載App時(shí),用公鑰驗(yàn)證簽名,如果App是通過(guò)蘋果后臺(tái)認(rèn)證的則安裝。

但是實(shí)際上除了App Store安裝app,我們還可以通過(guò)3種方式安裝:

  1. 開發(fā) App 時(shí)可以直接把開發(fā)中的應(yīng)用安裝進(jìn)手機(jī)進(jìn)行調(diào)試。
  2. In-House 企業(yè)內(nèi)部分發(fā),可以直接安裝企業(yè)證書簽名后的 APP。
  3. AD-Hoc 相當(dāng)于企業(yè)分發(fā)的限制版,限制安裝設(shè)備數(shù)量,較少用。

蘋果要對(duì)這三種方式安裝的App進(jìn)行控制,上面的方式就無(wú)法實(shí)現(xiàn)了。

開發(fā)App時(shí)應(yīng)用安裝 簽名流程

  1. Mac電腦上生成一對(duì)公鑰私鑰,這里稱為公鑰L、私鑰L
  2. 蘋果固有的一對(duì)公鑰私鑰,iOS設(shè)備內(nèi)置公鑰A,蘋果后臺(tái)保存私鑰A
  3. 公鑰L上傳到Apple后臺(tái),通過(guò)蘋果后臺(tái)私鑰A對(duì)其進(jìn)行簽名,得到一份數(shù)據(jù)包含公鑰L和它的簽名,稱為證書
  4. 在Apple后臺(tái)申請(qǐng)AppID、設(shè)備ID、App使用權(quán)限,和3的證書一起,通過(guò)私鑰A簽名,將數(shù)據(jù)和簽名組成Provisioning Profile(描述文件),下載到mac。
  5. 開發(fā)時(shí)編譯完App,會(huì)通過(guò)本地的私鑰L對(duì)App進(jìn)行簽名,同時(shí)把描述文件打包放到App中,文件名為 embedded.mobileprovision,把 App 安裝到手機(jī)上。
  6. 安裝時(shí),iOS系統(tǒng)取到證書,通過(guò)內(nèi)置的公鑰A,驗(yàn)證embedde zded.mobileprovisions的數(shù)字簽名是否正確。
  7. 確保了數(shù)據(jù)是蘋果授權(quán),取出里面的數(shù)據(jù),驗(yàn)證App簽名、設(shè)備ID是否在列表上,AppID是否對(duì)應(yīng),權(quán)限開關(guān)是否對(duì)應(yīng)。
iOS 簽名流程圖.png

對(duì)應(yīng)操作

  • 第1步對(duì)應(yīng)就是從keychain中“從證書頒發(fā)機(jī)構(gòu)請(qǐng)求證書”,生成了本地的公鑰私鑰,保存的CertificateSigningRequest是公鑰,私鑰保存在電腦本地。
  • 第2步是蘋果自己處理的
  • 第3步對(duì)應(yīng)是將CertificateSigningRequest上傳到蘋果后臺(tái)生成證書,并下載到本地。

此時(shí)本地有兩個(gè)證書,一個(gè)是第1步生成包含私鑰的證書,另一個(gè)是剛下載的證書,keychain將兩個(gè)證書關(guān)聯(lián)起來(lái),因?yàn)樗麄児€和私鑰是對(duì)應(yīng)的。從Xcode中選擇證書是,實(shí)際上是通過(guò)keychain里對(duì)應(yīng)的私鑰去簽名。這個(gè)私鑰只有生成它的Mac中有,如果其他Mac也想要編譯簽名這個(gè)App的話,可以把私鑰導(dǎo)出給其他Mac用,從keychain導(dǎo)出.p12文件,其他Mac打開就導(dǎo)入了這個(gè)私鑰。

  • 第4步,在蘋果官網(wǎng)上操作,配置AppID/權(quán)限/設(shè)備等,最后下載描述文件
  • 第5步Xcode通過(guò)第3步下載回來(lái)的證書(公鑰),在本地找到對(duì)應(yīng)的私鑰,用本地的私鑰簽名App,并把描述文件命名為embedded.mobileprovision一起打包進(jìn)去。這里對(duì)App的簽名數(shù)據(jù)保存分2部分,Mach-O會(huì)把簽名直接寫到文件中,其他資源文件則會(huì)保存在 _CodeSignature 目錄下。
  • 6-7步是系統(tǒng)做的事
  1. 證書:公鑰L和簽名
  2. Entitlements:App權(quán)限
  3. CertificateSigningRequest:本地公鑰L
  4. p12:本地私鑰,可導(dǎo)入其他電腦
  5. Provisioning Profile:包含了證書、 Entitlements等數(shù)據(jù),蘋果后臺(tái)私鑰簽名的數(shù)據(jù)包

App Store

App發(fā)布到App Store的簽名驗(yàn)證方式和上述不同,最簡(jiǎn)單的簽名方式就可以滿足。事實(shí)上下載一個(gè)App Store的安裝包,里面不包含embedded.mobileprovision文件的,它并不依賴這個(gè)文件。
上傳到App Store的包蘋果會(huì)重新對(duì)內(nèi)容加密,原來(lái)本地的私鑰簽名就沒(méi)用了。AppStore下載的包,蘋果也不打算控制它的有限期,所以直接在蘋果后臺(tái)的私鑰簽名,iOS設(shè)備中公鑰驗(yàn)證就可以了。
為什么還要一樣弄證書和描述文件呢?猜測(cè)因?yàn)橄虢y(tǒng)一管理,描述文件中包含一個(gè)權(quán)限控制,AppID校驗(yàn)。蘋果不想上傳是重新用另一種協(xié)議驗(yàn)證,不如統(tǒng)一放到描述文件中,上傳到App Store時(shí)只要用同樣流程驗(yàn)證描述文件是否合法即可。
所以App上傳到App Store后,和證書、描述文件無(wú)關(guān),他們不會(huì)影響已經(jīng)上線的App。

學(xué)習(xí)鏈接

iOS App 簽名的原理

?著作權(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ù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,333評(píng)論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,491評(píng)論 3 416
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,263評(píng)論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,946評(píng)論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,708評(píng)論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,186評(píng)論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,255評(píng)論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,409評(píng)論 0 288
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,939評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,774評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,976評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,518評(píng)論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,209評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,641評(píng)論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,872評(píng)論 1 286
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,650評(píng)論 3 391
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,958評(píng)論 2 373

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