蘋果證書申請流程及原理分析

針對蘋果證書申請簽名記一下自己的看法胰挑,有錯誤或遺漏的地方請指出徽鼎。

一.目的

蘋果為什么要采取如此復(fù)雜的證書簽名機制

? ? ? ?對盜版軟件做到一定的控制腥沽,大部分主流操作系統(tǒng)(Windows/Mac/Linux)對運行在自己平臺上的軟件都得不到很好的管理谦炒,隨便哪里下載都能用或悲。蘋果希望對自己的平臺有一定的控制權(quán),在ios系統(tǒng)上運行的軟件都需要得到自己的允許怪与。蘋果最近對使用熱更新的部分軟件給予了警告夺刑,說明蘋果在控制權(quán)方面是絲毫不想讓步的。(同意你的軟件安裝在ios系統(tǒng)分别,而且你的每次更新或者改變遍愿,人家也要知道,也要人家同意耘斩。)

二.概念了解

對稱加密:

? ? ?對原始的可逆變換沼填。如 abcd變成defg,字母表順移三位括授,密鑰就是3(當(dāng)然這是簡單舉例坞笙,實際應(yīng)用中進行了相當(dāng)復(fù)雜的位運算),通訊兩端知道密鑰3就可以進行加解密荚虚。優(yōu)點加解密速度快薛夜,對服務(wù)器壓力小。缺點在于其中一端制定了加密密鑰版述,怎么傳送到另一端梯澜。只要經(jīng)過網(wǎng)絡(luò)就有可能被攔截,攻擊者知道了密鑰院水,你的加密就毫無意義腊徙。是不是要對密鑰再一次加密,那生成密鑰還是存在上述問題檬某,除非你騎馬送過去撬腾。怎么解決,往下看恢恼。

非對稱加密(基于公鑰的加密):

? ? ?生成兩份密鑰民傻,分別是公鑰和私鑰,公鑰加密私鑰解密,私鑰加密公鑰揭秘(實際應(yīng)用中公鑰用來加密漓踢,私鑰多用來簽名認證)牵署,私鑰自己保存,公鑰散發(fā)出去喧半,解決了對稱加密中密鑰的安全傳輸問題奴迅。

數(shù)字簽名:

? ? ? 在要傳送的數(shù)據(jù)后面加上一段信息(給數(shù)據(jù)簽名),證明信息沒有被修改過挺据。簡要描述:對數(shù)據(jù)做hash計算取具,得到一個hash值,這個過程不可逆(不能通過hash值得到原數(shù)據(jù)扁耐,代表算法MD5)暇检。將簽名和數(shù)據(jù)一起加密發(fā)送出去,對方接到數(shù)據(jù)后用自己的的密鑰解開婉称,拿出數(shù)據(jù)和簽名(上文中提到的hash值)块仆,將數(shù)據(jù)用同樣的hash算法處理,若得到同樣的簽名王暗。則證明數(shù)據(jù)沒有被修改過悔据,反正則被修改,主要用非對稱加密的方式來實現(xiàn)俗壹。這里有個前提蜜暑,hash算法要保證不同的內(nèi)容一定會得到不同的hash值。

三.簽名機制(圖文流程)

有了上面的概念我們來一步步學(xué)習(xí)蘋果是如何用簽名加密來實現(xiàn)對ios控制的

?問題一.蘋果要讓發(fā)布在appStore的App都得到自己官方的認證許可

? ? ? 簡單解決思路:蘋果官方生成一對公私鑰策肝,私鑰由蘋果后臺保存,公鑰內(nèi)置在每臺ios系統(tǒng)內(nèi)隐绵。在上傳app到appstore時之众,蘋果對每個app都用私鑰數(shù)字簽名。iOS系統(tǒng)裝入app的時候會用公鑰解密驗證依许,這樣就能保證app是蘋果同意安裝的(假設(shè)私鑰是不會外泄的棺禾,只有蘋果才知道,不然這事沒發(fā)往下說了峭跳。當(dāng)然也不可能外泄)膘婶。其實上面的思路已能夠解決讓蘋果很大程度上控制app和ios系統(tǒng)。

問題二.如何讓開發(fā)者使用真機調(diào)試

? ? ? ?以上的解決思路確實能保證從appstore下載裝入iOS系統(tǒng)的app是蘋果官方允許的蛀醉,但對于開發(fā)者來說要用真機調(diào)試啊悬襟,不能用模擬器開發(fā)完直接上appstore吧。這時候怎么把app裝入真機ios系統(tǒng)拯刁,如何對調(diào)試過程進行控制脊岳。

? ? ? 解決思路:在app每次真機編譯完成之后傳送到蘋果后臺,后臺私鑰對其進行簽名,然后裝機調(diào)試割捅。這確實是一個辦法奶躯,但頻繁的調(diào)試每次都要后臺交互簽名。單就網(wǎng)絡(luò)問題蘋果和開發(fā)者都不會接受的亿驾。

? ? ? 所以蘋果給出了現(xiàn)行的方法嘹黔,證書簽名(雙層簽名方法)。以上比較好理解莫瞬,以下會分條說明并帶著截圖儡蔓。

圖1


圖2
圖3

? 1.從本地申請一對密鑰,見圖1圖2乏悄。你可以看到本地鑰匙串已經(jīng)生成一對密鑰(下文簡稱公鑰P浙值,私鑰P,圖3)檩小,本地也生成了一個certSigningRequest(證書簽名請求)文件开呐,暫且理解為本地生成的公鑰P文件。

? ?2.證書請求文件已準備好了规求,還是通過最基本流程截圖展示證書請求過程筐付,當(dāng)然后面也會解釋原理。

? ? 進入蘋果開發(fā)者網(wǎng)站阻肿,注冊了付費的開發(fā)者賬號才能看到如下頁面

圖4?

選擇申請一個證書瓦戚,下以開發(fā)證書為例

圖5


圖6

?選擇繼續(xù),這里需要上傳我們本地生成的公鑰P文件

圖7

選擇downlaod丛塌,下載證書文件到本地较解。也可以回到圖5處下載生成的證書文件。

圖8

如下圖證書文件

圖9

? 至此我們已經(jīng)把證書請求下來了赴邻。解釋一下此過程蘋果做了什么印衔,為什么說控制了開發(fā)者的安裝行為

? ? ?接上 3. ? 見圖7圖8 我們把我們本地生成的公鑰P傳到了蘋果后臺,蘋果后臺有一對固定密鑰姥敛,這同上面appstore提到的簽名密鑰一樣(下文簡稱公鑰Q奸焙,私鑰Q),蘋果用私鑰Q對我們上傳的公鑰P進行了加密數(shù)字簽名彤敛。生成了如圖9所示的證書文件与帆。簡單理解這個文件包含了公鑰P及私鑰Q對其的數(shù)字簽名。

圖10

? ? ? 4.我們把下載的證書雙擊安裝然后配置到xcdoe里邊如圖10墨榄,在我們開發(fā)時玄糟,編譯完一個app時本地的私鑰P會對此app進行數(shù)字簽名,同時會把上面配置的證書文件一起打包進app里渠概,過程見圖茶凳。便可裝到手機上(其實大部分還是不可以的嫂拴,因為描述文件問題,后面解釋)贮喧。通過以下的原理解釋你先明白蘋果怎么通過證書控制調(diào)試安裝行為筒狠。

? ? ? 原理解釋:a.在安裝的時候,iOS系統(tǒng)取出app 內(nèi)的證書箱沦,通過ios系統(tǒng)內(nèi)置的公鑰Q(上文提到過的內(nèi)置公鑰)去驗證證書的數(shù)字簽名是否正確辩恼,在這一步驗證什么呢赴精,驗證了證書是沒有被修改過的融蹂,也就保證了內(nèi)含的公鑰P是蘋果認證過的。b. 然后再用公鑰P對app(私鑰P簽名過的)進行驗證肚逸,這個過程就間接驗證了此安裝行為是否經(jīng)過蘋果的允許寒跳。這里可能有點繞聘萨,對不太理解的小伙伴在補充一下。我們通過內(nèi)置私鑰Q驗證了公鑰的P的可靠性(這跟appstrore驗證原理相同)童太,如此一來只要可以被公鑰P認證通過的app也就是安全的米辐。這樣的app就只能是私鑰P簽名過的了(因為它們是一對么,我是安全的书释,你加密簽名過的也就是安全的了)翘贮。

問題二.如何控制開發(fā)者權(quán)限的濫用

? ? ?至此蘋果解決了開發(fā)者的問題,給予了開發(fā)者通過證書真機安裝App的權(quán)限爆惧。但是問題貌似又回到了原點狸页,你開發(fā)者把這樣的app丟出去,大家又可以肆無忌憚下載了扯再,還繞過了appstrore芍耘。又可能被濫用了,瞎搞了一通熄阻,是不是齿穗。人蘋果爸爸手段多得很,來兩個限制饺律。

?? ? ? ? 1·.讓簽名只能針對某個(有人說通配符,應(yīng)該是某些跺株,這些細節(jié)先忽略)具體的app复濒,意思就是你要在后臺注冊你的AppID。

? ? ? 2乒省,對可以安裝設(shè)備數(shù)量也進行限制100個(企業(yè)證書巧颈?細節(jié)先不要在意,后面解釋)袖扛,要把這100個設(shè)備的設(shè)備號也要后臺注冊砸泛。

? ? ? ?有了上面兩條十籍,開發(fā)者也逃不出蘋果的手心了。怎么解決唇礁,照常理勾栗,在生成證書文件的時候把這兩個限制條件一塊加進去,把本地公鑰P盏筐,注冊的appID和設(shè)備號一塊簽名加密围俘,生成一個證書下載供開發(fā)者使用,可能變得有點復(fù)雜琢融。如果只有這兩項限制是完全行可行的界牡。但是ApplePay/push/iCould這些蘋果都想控制,你也需要申請漾抬,人家還要把信息加在里證書里邊宿亡。著實不好擴展,于是蘋果將它們分開纳令,搞了另一個東西叫Provisioning Profile(描述文件)挽荠,就是把你的證書,注冊的appId和設(shè)備ID搞一塊在用私鑰Q進行簽名泊碑。坤按,搞完之后出現(xiàn)了一個mobileprovision這樣的文件,我們下載到本地馒过。以下圖文展示

? ?注冊appid臭脓,下邊有選項里有可以使用通配符

圖11

注冊設(shè)備號,可以添加100個腹忽,每年可更新

圖12

給描述文件添加信息 此處添加appID

圖13

? 選擇證書

圖14

選擇設(shè)備

圖15
圖16
圖17
圖18


圖19

? ? 以上我們已經(jīng)準備好描述文件来累,蘋果正是用它來控制開發(fā)者對app的濫用。?

? ? ?如此一來又會多出兩條步驟窘奏,希望你沒有暈嘹锁,解釋一下它是怎么工作的。首先配好證書着裹,把你下載的描述文件也雙擊安裝领猾,在xcode里也把它配好見圖19。其他過程不變骇扇,在編譯本地簽完名之后會把這個描述文件也一塊打包進app摔竿。安裝的時候通過系統(tǒng)內(nèi)置的公鑰Q,去驗證mobileprovision數(shù)字簽名少孝,當(dāng)然證書也會在驗一遍继低。確保mobileprovision注冊的信息都是蘋果授權(quán)的。然后取出mobileprovision的數(shù)據(jù)列表做各種匹配驗證稍走,包括用上面提到的用公鑰P驗證app簽名袁翁,驗證當(dāng)前設(shè)備的設(shè)備ID是否在此ID列表上柴底,appid是否對應(yīng)的上,各種權(quán)限開關(guān)等等粱胜。

其他問題解釋:

企業(yè)證書:此類證書是不需要配置設(shè)備號ID的柄驻,數(shù)量不限。但是不能發(fā)不到appstore

p12文件:上文我們提到了本地的公私鑰年柠,它就是用我這臺mac生成的凿歼,那如果其他Mac也要調(diào)試,對app簽名的話冗恨,我們就導(dǎo)出私鑰(p12)文件給別臺mac答憔,把證書和描述文件一塊拷貝過去,搞定

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末掀抹,一起剝皮案震驚了整個濱河市虐拓,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌傲武,老刑警劉巖蓉驹,帶你破解...
    沈念sama閱讀 221,888評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異揪利,居然都是意外死亡态兴,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評論 3 399
  • 文/潘曉璐 我一進店門疟位,熙熙樓的掌柜王于貴愁眉苦臉地迎上來瞻润,“玉大人,你說我怎么就攤上這事甜刻∩茏玻” “怎么了?”我有些...
    開封第一講書人閱讀 168,386評論 0 360
  • 文/不壞的土叔 我叫張陵得院,是天一觀的道長傻铣。 經(jīng)常有香客問我,道長祥绞,這世上最難降的妖魔是什么非洲? 我笑而不...
    開封第一講書人閱讀 59,726評論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮蜕径,結(jié)果婚禮上怪蔑,老公的妹妹穿的比我還像新娘。我一直安慰自己丧荐,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,729評論 6 397
  • 文/花漫 我一把揭開白布喧枷。 她就那樣靜靜地躺著虹统,像睡著了一般弓坞。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上车荔,一...
    開封第一講書人閱讀 52,337評論 1 310
  • 那天渡冻,我揣著相機與錄音,去河邊找鬼忧便。 笑死族吻,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的珠增。 我是一名探鬼主播超歌,決...
    沈念sama閱讀 40,902評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼蒂教!你這毒婦竟也來了巍举?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,807評論 0 276
  • 序言:老撾萬榮一對情侶失蹤凝垛,失蹤者是張志新(化名)和其女友劉穎懊悯,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體梦皮,經(jīng)...
    沈念sama閱讀 46,349評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡炭分,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,439評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了剑肯。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片捧毛。...
    茶點故事閱讀 40,567評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖退子,靈堂內(nèi)的尸體忽然破棺而出岖妄,到底是詐尸還是另有隱情,我是刑警寧澤寂祥,帶...
    沈念sama閱讀 36,242評論 5 350
  • 正文 年R本政府宣布荐虐,位于F島的核電站,受9級特大地震影響丸凭,放射性物質(zhì)發(fā)生泄漏福扬。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,933評論 3 334
  • 文/蒙蒙 一惜犀、第九天 我趴在偏房一處隱蔽的房頂上張望铛碑。 院中可真熱鬧,春花似錦虽界、人聲如沸汽烦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,420評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽撇吞。三九已至俗冻,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間牍颈,已是汗流浹背迄薄。 一陣腳步聲響...
    開封第一講書人閱讀 33,531評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留煮岁,地道東北人讥蔽。 一個月前我還...
    沈念sama閱讀 48,995評論 3 377
  • 正文 我出身青樓,卻偏偏與公主長得像画机,于是被迫代替她去往敵國和親冶伞。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,585評論 2 359

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

  • 本文轉(zhuǎn)載色罚,出處如下:數(shù)字證書原理 文中首先解釋了加密解密的一些基礎(chǔ)知識和概念碰缔,然后通過一個加密通信過程的例子說明了...
    隨安居士閱讀 1,691評論 1 8
  • 2018-Read-Record 記錄我的2018學(xué)習(xí)歷程 文中首先解釋了加密解密的一些基礎(chǔ)知識和概念金抡,然后通過一...
    NinthDay閱讀 11,307評論 8 105
  • 文中首先解釋了加密解密的一些基礎(chǔ)知識和概念,然后通過一個加密通信過程的例子說明了加密算法的作用腌且,以及數(shù)字證書的出現(xiàn)...
    已認證用戶閱讀 3,848評論 1 4
  • 文中首先解釋了加密解密的一些基礎(chǔ)知識和概念梗肝,然后通過一個加密通信過程的例子說明了加密算法的作用,以及數(shù)字證書的出現(xiàn)...
    sunny沖哥閱讀 1,390評論 0 3
  • 猶記得那年初見铺董,也是如今日一般陰雨綿綿巫击,灰暗的下午,幽深的小巷精续,我?guī)缀跻谎劬涂粗辛四惆用獭H缓竽憔瓦@樣被我?guī)г诹松磉叀?..
    唐小包呼啦呼閱讀 172評論 0 2