1. 程式人生 > IOS開發 >iOS 應用簽名

iOS 應用簽名

在iOS系統出來之前,我們的主流作業系統(Mac/Windows)上任何地方下載的軟體都能執行,系統安全存在隱患,那麼蘋果希望解決這樣的問題,要保證每一個安裝到 iOS 上的APP都是經過蘋果官方允許的,所以就有了iOS的應用簽名。

1、什麼是應用簽名?

顧名思義,應用簽名就是對應用的簽名,對應用中可執行檔案或指令碼資料(其實就是程式碼)進行一次Hash,然後再進行一次RSA加密後獲得的結果。這就是蘋果用來確認軟體在簽名後未被修改或損壞的措施。

2、蘋果是如果驗證應用簽名的?

蘋果給了使用者一個基本的驗證方式,在iOS系統中內建一個公鑰,私鑰由蘋果後臺伺服器儲存,當開發者將開發的App上傳到AppStore

的時候,蘋果用暴力且直接的方式用伺服器的私鑰進行簽名(這就是平常我們看到我們上傳到AppStoreApp顯示處理中的原因),使用者從手機上的AppStore下載應用後,iOS系統使用公鑰驗證這個簽名是否正確,如果簽名正確,說明這個App是由蘋果後臺認證且沒有修改過的,這樣就保證了每一個App都是經過蘋果官方允許的。

3、上述簽名方式有什麼問題?

如果我們iOS裝置安裝App只從App Store這一個入口這件事就簡單解決了,但是開發者肯定需要進行真機除錯,還有企業內部分發的渠道,那這些就不能解決了。

4、蘋果的雙層簽名方式

對於開發者來說 安裝包不需要上傳到App Store,可以直接安裝到手機上,但是蘋果又為了保證系統的安全性,必須對安裝的APP有絕對的控制權,不能被濫用導致非開發APP也能被安裝。

為了實現這些需求,iOS簽名的複雜度也就開始增加了,蘋果這裡給出的方案是雙層簽名。

我們需要將我們開發階段的App安裝到手機上時,蘋果就給開發這提供了申請證書的方式。

雙層簽名.png

我們的Mac電腦上生成一對公鑰M私鑰M,然後將公鑰M打包成CSR檔案上傳到蘋果伺服器,蘋果伺服器使用儲存在伺服器上的私鑰A公鑰M進行非對稱加密後就會得到一個開發者證書,證書中包含的是被加密的公鑰M,這個證書也就是我們常說的p12檔案。

在開發階段我們想把App安裝到手機上,在Build的時候,Mac就會使用私鑰MApp進行一次簽名,然後把我們從蘋果伺服器請求回來的證書一起打包到我們的App中,這時候iOS作業系統就會使用公鑰A

對打包到App的證書進行解密,如果驗證成功了說明是蘋果允許安裝的。

然後使用公鑰A對證書中加密的公鑰M進行解密,驗證當前App的簽名,這樣就完成蘋果的雙層驗證,既能保證了是蘋果允許安裝的,還能驗證是不是我們開發的App

5、描述檔案的產生

蘋果為了保證安裝的裝置是蘋果允許的的裝置和限制安裝的裝置數,在向蘋果申請證書的時候,蘋果會返回一個包含證書的描述檔案。

在我們開發的時候Xcode會向蘋果申請描述檔案。

Xcode申請描述檔案

可以使用Finder 的前往開啟,檔案存放位置 ~/資源庫/MobileDevice/Provisioning Profiles/

描述檔案的位置

描述檔案中會有證書的資訊,授權裝置的資訊,申請的時間,過期的時間等等。

我們看一下這個證書,終端進入當前證書的資料夾,輸入指令security cms -Di embedded.mobileprovision ,我們發現描述檔案其實就是一個plist

以上是就是iOS應用簽名和應用簽名的驗證。