AppStore官方商店購買,公司證書安裝或TestFlight下載。為瞭阻止盜版,軟禁,病毒入侵,無提示安裝和其他您無法控制的因素,並確保正式允許iOS設備上安裝的所有應用程序,Apple建立瞭一套應用程序簽名機制。
電子簽名

數字簽名,也稱為公鑰數字簽名,是隻能由信息發送者生成的數字字符串,不能被他人偽造。發件人使用簽名標記對要發送的數據進行簽名,以表明該數據已通過身份驗證並且未被篡改。
數據傳輸
讓我們模擬數據傳輸過程。
如果發件人以純文本格式直接將原始數據發送給收件人,則數據非常不安全並且容易被篡改。
為瞭提高安全性並同時簡化純文本,您可以對數據進行哈希處理以獲得原始數據的摘要,然後將摘要發送給收件人。但是,如果散列算法泄漏,則存在數據篡改的風險。
它引入瞭一種非對稱加密算法,使用哈希算法對數據片段計算摘要,然後使用RSA私鑰對摘要進行加密,以獲得原始數據的數字簽名。發件人將數字簽名與原始數據一起發送給收件人。
經過哈希加密和非對稱加密後的原始數據稱為數字簽名。
接收到數據後,接收方必須執行簽名驗證,以確保在數據傳輸過程中未對其進行篡改。
數字簽名驗證
驗證簽名的具體步驟如下:
接收到數據後,原始數據將使用相同的哈希進行加密以獲得哈希值(摘要)。
然後,它使用不對稱性來解密數字簽名的驗證哈希值(摘要)。
最後,將兩個哈希值進行比較以查看它們是否一致,以查看數據是否已被篡改。
恢復數字簽名和照片的整個過程:

讓我們看看如何使用數字簽名來確保iOS上安裝的所有應用程序都經過Apple的批準。
代碼簽名
代碼簽名是一種在簽名後對可執行文件或腳本進行數字簽名的方法,以確保軟件沒有被修改或損壞。它的原理類似於數字簽名,不同之處在於它是簽名代碼,而不是數據。
簡單的代碼簽名

如果您隻能從App Store下載該應用程序,則檢查方法相對簡單。
公鑰和私鑰對由Apple正式生成,公鑰內置在iOS系統中,並且私鑰存儲在Apple後臺。
當您將應用程序上載到App Store時,Apple後端會使用您的私鑰對應用程序數據進行簽名。 iOS系統下載應用程序後,公共密鑰會驗證簽名。如果簽名正確,則必須在Apple後端對應用進行身份驗證,並且該應用已被修改或損壞。但是,App Store並不是在iOS設備上安裝應用程序的唯一渠道,包括開發人員的現場調試,TestFlight的內部測試以及內部公司證書的分發。目前,簡單的代碼簽名無法滿足應用程序的完整驗證。
這會增加iOS代碼簽名的復雜性,從而導致雙重代碼簽名(雙重簽名)。
雙碼簽名
“雙層”旨在使用兩對公鑰和私鑰進行密碼驗證。這是Mac上的一對,Apple服務提供的一對。
雙重代碼簽名的存在是為瞭滿足以下條件:
您必須獲得Apple的批準才能安裝該應用程序。
您隻能安裝在Apple後臺註冊的設備,例如TestFlight內部測試和真實設備調試模式。
受限制的簽名可能特定於唯一的應用程序。
您可以解壓縮ipa文件以猜測整個簽名過程。有效負載目錄中有embed.mobileprovision,這稱為描述文件,與在Apple後臺創建的PP(Provisioning Profile)文件相對應。這些文件包含:
證書(公鑰,簽名)
應用程式編號
資格(權限)
已註冊設備列表
有關應用程序是否可以正常啟動的任何其他信息
因此,大致的簽名過程如下:
在開發設備Mac上本地生成公用和專用密鑰對。
蘋果有一對公鑰和私鑰,蘋果私鑰在蘋果的後端,而蘋果公鑰在每個iOS設備上。

通過將Mac公鑰上載到Apple後端,並使用Apple私鑰對Mac公鑰簽名,您將獲得Mac公鑰和簽名數據的組合,稱為證書。
在Apple後臺中,當您申請App ID,應用程序應用的已配置UDID(已註冊設備)和權利的列表以及步驟3中的證書時,使用Apple私鑰對合並的數據進行簽名,然後將數據和簽名一起應用。創建一個PP文件並將其下載到本地開發設備Mac。
編譯項目時,Mac私鑰會對該應用程序進行簽名,同時打包在步驟4中獲得的PP文件,文件名將被嵌入。mobileprovision,該應用程序已準備好在手機上安裝。
在安裝過程中,iOS系統會獲取證書,並使用內置的Apple公鑰來驗證證書是否正確簽名。繼續使用Apple公鑰驗證您的個人資料是否正確。
使用Mac公鑰檢查應用程序簽名是否已被篡改。
在此處插入照片說明
以上步驟對應於實際任務和概念,例如:
步驟1:在Mac上打開“鑰匙串訪問→證書支持→向證書頒發機構申請證書.”。此步驟將在本地生成公用和專用密鑰對,並具有導出的CSR文件(CertificateSigningRequest.certSigningRequest)。被建造。 Mac公鑰和Mac私鑰也存儲在本地。有關特定文件,請參見步驟3。
步驟2:每個iOS設備已經具有Apple公鑰。有關Apple私鑰的含義,請參見步驟3。
步驟3:在Apple後端上載從iOS證書模塊本地導出的CSR文件,以生成.cer證書文件,這是Apple私鑰。在本地下載.cer證書,安裝證書,在鑰匙串中找到證書,然後導出Mac私有密鑰(.p12文件)。對應於步驟1中導出的Mac公鑰。鑰匙串連接這兩個證書。使用.cer證書簽署CSR文件,然後導入簽署的證書。
步驟4:在Apple Background中配置應用程序ID,權限,設備等,然後下載PP文件。
步驟5:在編譯應用程序時,Xcode將使用您在步驟3中下載的證書(使用Mac公鑰)在本地找到該Mac私鑰,然後使用Mac私鑰對應用進行簽名和打包,然後將其安裝到軟件包中。做吧包含PP文件,ipa的文件名為embed.mobileprovision。在這裡,應用程序的簽名數據分為兩部分:Mach-O可執行文件直接對描述文件進行簽名,資源文件存儲在_CodeSignature目錄中,並且可以安裝應用程序。
步驟6:使用Apple公鑰驗證描述文件的簽名。已經傳遞瞭與步驟4相對應的簽名,以指示可以使用該證書,然後繼續進行下一步。
步驟7:使用Apple Public Key驗證證書簽名。傳遞對應於步驟3的簽名,表明Mac公鑰是合法的。轉到下一步。
步驟8:使用Mac公鑰驗證應用簽名。對應於步驟4。通過以上所有檢查後,您需要檢查描述文件的內容,並將其與應用本身中的信息進行比較(例如,設備ID是否在UDID列表中)。一旦應用程序ID相同,權限開關就會與權利匹配,並且都經過驗證,您就可以開始安裝應用程序瞭。如前所述,雙層代碼簽名是用於開發測試程序包,內部公司簽名和Ad-Hoc程序包的簽名和驗證過程,但是公司簽名並不限制已安裝設備的數量,因此沒有描述文件。設備列表,但ProvisionsAllDevices小於或大於true的記錄。
從App Store下載的安裝包沒有描述文件,但是您需要進行應用ID和權限檢查,因此需要在將證書和PP文件放到架子上之前對其進行配置。但是,在將應用程序上載到App Store之後,它與PP文件無關,因此您可以理解,App Store中軟件包的簽名驗證使用上述最簡單的簽名方法,而Apple背景直接使用私鑰對應用程序進行簽名。
請先 登入 以發表留言。