iOS App簽名的原理

最簡單的實現

要實現這個需求很簡單,最直接的方式,蘋果官方生成一對公私鑰,私鑰由蘋果后臺保管,公鑰內置到iOS設備里,在我們將App上傳到App Store上時,蘋果后臺使用私鑰對App進行簽名,iOS設備下載這個應用后,用公鑰驗證這個簽名,若簽名正確,則說明這個App是經過蘋果后臺認證的,并且沒有被修改過,這樣也就達到了蘋果的目的:保證iOS設備安裝的每一個APP都是經過蘋果官方允許的。

image.png

如果我們的iOS設備安裝App只通過App Store這一種方式的話,那么問題到這里就已經解決了,但是實際上除了從App Store上下載應用,還可以以一下三種方式安裝一個APP:

1.作為開發者,開發App時直接進行真機調試。
2.In-House 企業內部分發,可以直接安裝企業證書簽名后的App。
3.AD-Hoc 相當于是企業分發的限制版,限制安裝設備數量。

image.png

1.在你的Mac上生成一對公鑰和私鑰,稱為公鑰L和私鑰L。

2.蘋果自己有一對固定的公鑰和私鑰,私鑰在蘋果后臺,公鑰內置在iOS設備中,分別稱為私鑰A和公鑰A。

3.把公鑰L傳到蘋果后天,用蘋果后天的私鑰A去簽名公鑰L,得到一份數據包括公鑰L和簽名,這份數據稱為證書。

4.在蘋果后臺申請好AppID,配置好設備ID列表,App權限開關,再加上第三步的證書,組成的數據用蘋果后天的私鑰A簽名,把數據和簽名一起組成一個Provisioning Profile文件,下載到本地Mac。

5.在開發時,編譯完一個App后,用本地的私鑰L對這個App進行簽名,同時把第四步生成的Provisionning Profile一起打包進App里,文件名為embeded.mobileprovision,把App安裝到手機。

6.在安裝時,就可以使用iOS設備里內置的公鑰A來驗證Provisioning Profile的數字簽名是否正確。

7.如果數字簽名沒有問題,那么就能確保設備ID,AppID,entitlements,和App都是經過蘋果認證的,可以安裝到iOS設備上。

上面的步驟對應我們平時具體操作和概念是這樣的:

1.第一步對應的是從keychain里“從這證書頒發機構請求證書”,這樣就在本地生成了一對公私鑰,保存的額CertificateSigningRequest就是公鑰,公鑰保存在本地電腦里。

2.第二步蘋果處理,不用管。

3.第三步把CertificateSigningRequest上傳到蘋果后天,生成證書,并下載到本地。

4.第四步是在蘋果網站操作的,配置AppID,設備ID,權限等,生成Provisioning Profile文件,并下載Provisioning Profile文件到本地。

5.xcode通過第三步下載下來的證書,去找對應的本地私鑰,用本地私鑰去簽名App,并把Provisioning Profile文件一起打包進去,安裝進iOS設備。

總結一些概念:
1.證書:內容是公鑰或者私鑰,由其它機構對其簽名組成的數據包。

2.entitlements:包含了App權限開關列表,AppID,設備ID等。

3.CertificateSigningRequest:本地公鑰。

4.p12:本地私鑰。

5.Provisioning Profile:包含證書,entitlements等數據,并由蘋果后臺私鑰簽名的數據包。

出處

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容