本文首發(fā)在我的個(gè)人博客: http://blog.shenyuanluo.com/
,喜歡的朋友歡迎訂閱。
做 iOS 開發(fā)的都知道,打包必需準(zhǔn)備好 證書 和 配置文件;沒有這兩個(gè),將無法打包給別人測試或者上傳 App Store。
那什么是證書?什么是配置文件呢?要了解這兩個(gè)東西,先來了解一下其原理。
簽名
我們知道,數(shù)據(jù)在傳輸過程中,安全性很重要;接收方怎么判斷接收到的數(shù)據(jù)是 完整的 并且是 合法的 呢?
-
完整性:是指數(shù)據(jù)自
發(fā)送方發(fā)出后,在到達(dá)接收方的過程當(dāng)中未發(fā)生任何改動(dòng)、丟失。 -
合法性:是指
接收方接收到的數(shù)據(jù)是來自可信賴的發(fā)送方。
MD5消息摘要算法
MD5 消息摘要算法(MD5 Message-Digest Algorithm):是一種被廣泛使用的密碼散列函數(shù),可以產(chǎn)生出一個(gè)128位(16字節(jié))的散列值(hash value),用于確保信息傳輸完整一致。
完整性
發(fā)送方通過 MD5 算法 對數(shù)據(jù)生成 摘要(Digest),然后把數(shù)據(jù)和摘要一起傳輸;接收方在接收到數(shù)據(jù)之后,通過同樣的 MD5 算法對數(shù)據(jù)部分生成摘要,再通過對比接收的摘要是否一致來判斷數(shù)據(jù)是否完整。
對稱加密
對稱加密(Symmetric-key algorithm):是在
加密和解密時(shí)使用相同的密鑰,或是使用兩個(gè)可以簡單地相互推算的密鑰的一種算法。
非對稱加密
非對稱加密(Asymmetric-key algorithm):是需要兩個(gè)秘鑰,一個(gè)是公開秘鑰,另一個(gè)是私有秘鑰;使用
其中一個(gè)秘鑰進(jìn)行加密,加密后的密文只能用對應(yīng)的另一個(gè)秘鑰進(jìn)行解密的一種算法。
合法性
發(fā)送方 使用非對稱加密算法中的一個(gè)秘鑰對數(shù)據(jù)進(jìn)行加密,接收方 使用對應(yīng)的另一個(gè)秘鑰對接收到的數(shù)據(jù)進(jìn)行解密,如果可以解密,則認(rèn)為這數(shù)據(jù)是合法的。(理論上:對稱加密也是可以的。)
數(shù)字簽名
數(shù)字簽名(Digital Signature):通常定義兩種互補(bǔ)的運(yùn)算,一個(gè)用于簽名,另一個(gè)用于驗(yàn)證。
常見的數(shù)字簽名形式:
-
發(fā)送方通過 MD5 算法 對數(shù)據(jù)生成摘要,然后使用 非對稱加密算法 其中一個(gè)秘鑰對摘要進(jìn)行加密得到簽名,之后將數(shù)據(jù)和簽名一起傳輸; -
接收方在接收到數(shù)據(jù)之后,使用對應(yīng)的另一個(gè)秘鑰對簽名進(jìn)行解密得到摘要,驗(yàn)證數(shù)據(jù)的合法性,然后再對數(shù)據(jù)通過 MD5 算法 生成摘要,對比解密得到的摘要,驗(yàn)證數(shù)據(jù)的完整性。
數(shù)字簽名
由此可見 數(shù)字簽名 對數(shù)據(jù)的安全傳輸提供了有力的保障。但是,這樣的保障是有前提的,那就是必需保證 發(fā)送方的公鑰是絕對安全的。要不然,偽造公鑰的第三方,可以發(fā)送 病毒數(shù)據(jù) 給接收方,而接收方卻使用 假的公鑰,錯(cuò)誤驗(yàn)證了 病毒數(shù)據(jù) 是 “完整且是可信賴” 的,這樣的后果將不堪設(shè)想。
由此可見,保障 公鑰 的安全是多么的重要;但是怎么保證發(fā)送方公鑰的安全呢?這就需要 數(shù)字證書 來保障了。
證書
數(shù)字證書(Digital Certificate):是互聯(lián)網(wǎng)通訊中標(biāo)志通訊各方身份信息的一串?dāng)?shù)字,提供了一種在
Internet上驗(yàn)證通信實(shí)體身份的方式,數(shù)字證書不是數(shù)字身份證,而是身份認(rèn)證機(jī)構(gòu)蓋在數(shù)字身份證上的一個(gè)章或?。ɑ蛘哒f加在數(shù)字身份證上的一個(gè)簽名)。它是由權(quán)威機(jī)構(gòu)——CA機(jī)構(gòu),又稱為證書授權(quán)(Certificate Authority)中心發(fā)行的。
數(shù)字證書認(rèn)證機(jī)構(gòu)
數(shù)字證書認(rèn)證機(jī)構(gòu)(Certificate Authority,縮寫為CA):是負(fù)責(zé)發(fā)放和管理數(shù)字證書的權(quán)威機(jī)構(gòu),并作為電子商務(wù)交易中受信任的第三方,承擔(dān)公鑰體系中公鑰的合法性檢驗(yàn)的責(zé)任。
通常的做法是:
- 發(fā)送方將
公鑰交給 “Internet” 可信任的 數(shù)字證書認(rèn)證機(jī)構(gòu),然后該機(jī)構(gòu)利用非對稱加密算法用CA的私鑰對發(fā)送方的公鑰和一些相關(guān)信息(如:有效期、發(fā)送方基本信息等)進(jìn)行加密,得到 證書,之后將數(shù)據(jù)、簽名和證書一起傳輸; - 接收方接收到數(shù)據(jù)之后,對證書部分使用該機(jī)構(gòu)對應(yīng)的
CA的公鑰進(jìn)行解密得到發(fā)送方公鑰,之后利用該公鑰對簽名進(jìn)行解密驗(yàn)證其合法性和完整性。
數(shù)字證書
由此可知道,在網(wǎng)絡(luò)上安全的傳輸數(shù)據(jù),一般需要兩對密鑰:發(fā)送方公私鑰 以及 CA 的公私鑰。
iOS 簽名認(rèn)證
我們知道,在 Apple 的生態(tài)圈中,安裝的任何軟件都是需要經(jīng)過 Apple 認(rèn)證才被允許安裝的。那么怎么對 iOS 平臺(tái)的 APP 進(jìn)行安全認(rèn)證呢?
其大致流程如下:
- 在 maxOS 本地生成一對秘鑰;
- 上傳
公鑰向 CA(Apple 開發(fā)者中心)申請數(shù)字證書; - 安裝數(shù)字證書,此時(shí)在鑰匙串中會(huì)存在一個(gè)證書以及該證書對應(yīng)的本地的私鑰;
- iOS APP 打包時(shí),Xcode 利用本地的私鑰對 APP 進(jìn)行簽名;
- 將證書、簽名 和 APP 上傳 App Store(或給測試人員);
- iOS 設(shè)備安裝 APP 時(shí),使用設(shè)備內(nèi)置的(CA)公鑰解密證書,進(jìn)而對該 APP 進(jìn)行驗(yàn)證其安全性和完整性。
小結(jié)
說了這么久,那到底什么是 iOS 證書 和 配置文件 呢?
-
iOS 證書:就是 iOS 開發(fā)者將
macOS 本地的公鑰上傳至 Apple 開發(fā)者中心,通過CA私鑰對macOS 公鑰和開發(fā)者的一些信息進(jìn)行加密得到的數(shù)字證書。 - iOS 配置文件(Provisioning Profile):是包含了對應(yīng)的證書、開發(fā)組名、組內(nèi)設(shè)備、應(yīng)用 ID 以及一些能力等配置信息的文件。