iOS開發(fā)同學(xué)都知道我們想要把開發(fā)好的App安裝到手機(jī)(真機(jī))上測試昙沦,需要有對應(yīng)的開發(fā)者證書和描述文件才行辖众,其實(shí)這里面就涉及到了蘋果的雙向簽名認(rèn)證機(jī)制卓起。蘋果的雙向簽名機(jī)制主要用到了非對稱加密RSA以及哈希算法的知識,了解這個機(jī)制之后凹炸,我們會發(fā)現(xiàn)蘋果還是非常聰明的戏阅。了解這個機(jī)制之前,建議大家先熟悉蘋果開發(fā)者證書和描述文件的申請流程啤它,不熟悉的朋友可以到我之前的文章了解一下傳送門奕筐。
接下來我們就一步一步的來分析蘋果的雙向簽名機(jī)制:
一、我們知道RSA加密的是需要一對秘鑰(公鑰和私鑰)的变骡,公鑰加密离赫,私鑰解密,反過來也成立塌碌。蘋果利用RSA加密機(jī)制在服務(wù)器端存放一個私鑰(為了方便描述渊胸,我們稱為私鑰A),在iOS系統(tǒng)端存放一個公鑰(和私有對應(yīng)台妆,這里稱為公鑰A)翎猛,因為服務(wù)器和iOS系統(tǒng)都是蘋果的,所以這個很容易做到接剩。
二切厘、當(dāng)我們通過CSR文件去申請證書時,此時Mac系統(tǒng)幫我們生成了一對秘鑰:公鑰M和私鑰M搂漠,并將公鑰M放在CSR文件中到蘋果服務(wù)器申請證書迂卢。
三、蘋果服務(wù)器收到CSR文件后,用服務(wù)器的私鑰A對公鑰M進(jìn)行簽名得到一串HASH值而克,并用公鑰M將公鑰M和HASH值一起生成一份cer證書文件靶壮,然后我們下載到電腦上雙擊打開會加載到鑰匙串中。之后將鑰匙串中的證書導(dǎo)出p12文件給到其他開發(fā)者员萍,那么其他開發(fā)者才能有權(quán)限進(jìn)行真機(jī)安裝調(diào)試了腾降。
四、等到我們打包編譯的時候碎绎,Xcode會根據(jù)登錄的開發(fā)者賬號從蘋果服務(wù)器拉取對應(yīng)BundleID的描述文件(其中包含設(shè)備ID列表螃壤、App ID、權(quán)限文件以及cer證書等)筋帖,再用Mac電腦上的私鑰M對App的資源文件和可執(zhí)行文件MACHO進(jìn)行簽名奸晴,最后將描述文件、簽名文件日麸、以及MACHO文件等一起打包成ipa文件(注意:ipa文件實(shí)際上就是Zip文件)寄啼。
五、當(dāng)我們在手機(jī)上安裝App的時候代箭,iOS系統(tǒng)首先用公鑰A去解密證書墩划,成功后得到公鑰M,這一步的解密動作也是驗證此證書是否是蘋果服務(wù)器頒發(fā)的證書嗡综,驗證了這個證書是蘋果允許的乙帮。然后再拿解密得到的公鑰M對App進(jìn)行解密來驗證此App是否是當(dāng)前這個證書允許的,從而間接的驗證了這個App是蘋果服務(wù)器允許安裝到手機(jī)的极景。其中察净,如果證書類型是發(fā)布證書,則是直接安裝的(當(dāng)然這是AppStore的安裝方式)戴陡;如果證書是開發(fā)證書塞绿,則需要去驗證一下當(dāng)前手機(jī)設(shè)備是否是允許安裝的設(shè)備,通過后才能將App安裝到手機(jī)上恤批。最后附一張流程圖异吻,幫助大家理解~