最簡單的實現
要實現這個需求很簡單,最直接的方式,蘋果官方生成一對公私鑰,私鑰由蘋果后臺保管,公鑰內置到iOS設備里,在我們將App上傳到App Store上時,蘋果后臺使用私鑰對App進行簽名,iOS設備下載這個應用后,用公鑰驗證這個簽名,若簽名正確,則說明這個App是經過蘋果后臺認證的,并且沒有被修改過,這樣也就達到了蘋果的目的:保證iOS設備安裝的每一個APP都是經過蘋果官方允許的。
如果我們的iOS設備安裝App只通過App Store這一種方式的話,那么問題到這里就已經解決了,但是實際上除了從App Store上下載應用,還可以以一下三種方式安裝一個APP:
1.作為開發者,開發App時直接進行真機調試。
2.In-House 企業內部分發,可以直接安裝企業證書簽名后的App。
3.AD-Hoc 相當于是企業分發的限制版,限制安裝設備數量。
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等數據,并由蘋果后臺私鑰簽名的數據包。