iOS 應用簽名
在iOS系統出來之前,我們的主流作業系統(Mac/Windows
)上任何地方下載的軟體都能執行,系統安全存在隱患,那麼蘋果希望解決這樣的問題,要保證每一個安裝到 iOS
上的APP
都是經過蘋果官方允許的,所以就有了iOS的應用簽名。
1、什麼是應用簽名?
顧名思義,應用簽名就是對應用的簽名,對應用中可執行檔案或指令碼資料(其實就是程式碼)
進行一次Hash
,然後再進行一次RSA
加密後獲得的結果。這就是蘋果用來確認軟體在簽名後未被修改或損壞的措施。
2、蘋果是如果驗證應用簽名的?
蘋果給了使用者一個基本的驗證方式,在iOS系統中內建一個公鑰,私鑰由蘋果後臺伺服器儲存,當開發者將開發的App
上傳到AppStore
AppStore
的App
顯示處理中的原因),使用者從手機上的AppStore
下載應用後,iOS系統使用公鑰驗證這個簽名是否正確,如果簽名正確,說明這個App
是由蘋果後臺認證且沒有修改過的,這樣就保證了每一個App都是經過蘋果官方允許的。
3、上述簽名方式有什麼問題?
如果我們iOS
裝置安裝App
只從App Store
這一個入口這件事就簡單解決了,但是開發者肯定需要進行真機除錯,還有企業內部分發的渠道,那這些就不能解決了。
4、蘋果的雙層簽名方式
對於開發者來說 安裝包不需要上傳到App Store,可以直接安裝到手機上,但是蘋果又為了保證系統的安全性,必須對安裝的APP有絕對的控制權,不能被濫用導致非開發APP也能被安裝。
為了實現這些需求,iOS
簽名的複雜度也就開始增加了,蘋果這裡給出的方案是雙層簽名。
我們需要將我們開發階段的App
安裝到手機上時,蘋果就給開發這提供了申請證書的方式。
我們的Mac電腦上生成一對公鑰M
和私鑰M
,然後將公鑰M
打包成CSR
檔案上傳到蘋果伺服器,蘋果伺服器使用儲存在伺服器上的私鑰A
對公鑰M
進行非對稱加密後就會得到一個開發者證書,證書中包含的是被加密的公鑰M
,這個證書也就是我們常說的p12
檔案。
在開發階段我們想把App
安裝到手機上,在Build
的時候,Mac就會使用私鑰M
對App
進行一次簽名,然後把我們從蘋果伺服器請求回來的證書一起打包到我們的App
中,這時候iOS
作業系統就會使用公鑰A
然後使用公鑰A
對證書中加密的公鑰M
進行解密,驗證當前App
的簽名,這樣就完成蘋果的雙層驗證,既能保證了是蘋果允許安裝的,還能驗證是不是我們開發的App
。
5、描述檔案的產生
蘋果為了保證安裝的裝置是蘋果允許的的裝置和限制安裝的裝置數,在向蘋果申請證書的時候,蘋果會返回一個包含證書的描述檔案。
在我們開發的時候Xcode會向蘋果申請描述檔案。
可以使用Finder
的前往開啟,檔案存放位置 ~/資源庫/MobileDevice/Provisioning Profiles/
;
描述檔案中會有證書的資訊,授權裝置的資訊,申請的時間,過期的時間等等。
我們看一下這個證書,終端進入當前證書的資料夾,輸入指令security cms -Di embedded.mobileprovision
,我們發現描述檔案其實就是一個plist
。
以上是就是iOS應用簽名和應用簽名的驗證。