App 上架 AppStore 需要經過蘋果的審覈,違規 App 不能上架。蘋果 iOS 系統有一套完善的加密方案,在不越獄破解的情況下,非 AppStore 下載的 App 需要證書籤名,才能在 iOS 上運行。證書需要向蘋果申請,有幾類證書。免費證書。用於入門級開發者,可以用 Xcode 真機調試,不能上架 AppStore。個人開發者證書。需要收費,支持個人真機調試,可以將上架 AppStore。公司證書。需要收費,支持多人協作開發,可以將上架 AppStore。企業證書。需要收費,支持企業自己發佈 App, 不可以上架到 AppStore。某些 App 可以通過 Safari 下載,信任證書後正常使用。這種 App 就是用了企業證書。爲什麼蘋果公司允許企業證書呢?顧名思義,企業證書是在企業內部使用的。正常情況下,企業證書有如下用途。某些 App 只是企業內部使用,不方便上架 AppStore。比如企業內部有個 OA 系統,用於員工打卡、請假、收發郵件。企業爲 OA 系統開發了 iOS 的 App。這個 App 對企業內部員工很有用,企業外用戶完全無用。因此這個 OA 系統 App 不方便上架 AppStore,就算想上架,也不能審覈通過。某些 App 雖然可上架 AppStore 外發,但新版本還在開發測試過程中。使用企業證書籤名 App,放到網上,員工打開網頁就可下載,方便測試。在開發測試期間,往往一天好幾次構建新安裝包,內部員工(特別是測試人員)在網上可以下載到最新的測試包。------------------------假如通過企業證書,將一些內容違規(比如色情、政策、版權、隱私等)不能上架的 App 外發給用戶,屬於濫用企業證書。也有些 App 本身內容並沒有什麼不妥,實際可以上架 AppStore。但它包含內購,而不想給蘋果分成。蘋果規定,假如 App 內購買的虛擬物品,是用於 App 本身的,就需要接入並且只能接入蘋果的應用內購買(In-App Purchase,IAP),比如某些會員充值,遊戲道具購買之類。但假如使用蘋果的 IAP,內購收益需要分給蘋果三成。有些 App 不想給蘋果分成,想使用微信、支付寶等第三方支付,就用企業證書來分發 App。對於蘋果公司來說,這也是濫用企業證書。蘋果公司不允許濫用企業證書。一旦發現,情況惡劣,會封殺企業證書,企業證書被封殺後,企業自己發佈的 App 就閃退不能用了。另一個懲罰是,將開發者(個人或公司)列入黑名單。列入黑名單後,審覈通常會非常慢。有時不僅僅是違規 App,而是這個開發者名下的所有 App 審覈都非常慢。正常情況下,App 平均審覈時間是兩三天。但黑名單上的開發者,有時會審覈幾周,甚至幾個月。幾個月不能發佈新版本,就會損失很大。更重的懲罰是,將開發者名下的 App 全部下架,整改後才能重新上架。有些企業爲了避免牽連,有時會用不同的銀行卡註冊不同的開發賬號。需要用不同的銀行卡,因爲蘋果公司會檢查銀行卡賬號,銀行卡賬號相同的,基本可以判斷是同一個用戶。自然有時會誤殺。個人開發者,不要將自己的銀行卡借給他人(比如親戚)註冊開發者賬號,不然可能會受到牽連。蘋果對企業證書管理比較嚴,催生了淘寶上的一個生意,租售企業證書。有些 App,因爲內容違規或其它原因不能上架,但又不想暴露自己的企業證書。就會在淘寶上租借或購買其他企業證書來簽名發佈,跟蘋果公司打游擊戰。淘寶某個企業證書暴露被封殺了,又換一個企業證書重新簽名發佈。------------------------iOS 證書,實際是某種數字簽名。數字簽名基於非對稱加密,目的是保證文件沒有被篡改。比如 Alice 想發文件給 Bob,就生成一對私鑰和公鑰。Alice 保留私鑰,而將公鑰發給 Bob(也可不通過網絡而用其它手段,比如郵寄一個存儲公鑰的 U 盤)。要發文件了,Alice 就先計算文件的摘要,然後將摘要用私鑰加密,將文件和加密摘要一起發給 Bob。Bob 就用公鑰將摘要解密,同時計算出文件的摘要信息。之後對比解密後的摘要,和計算出來的摘要,假如兩者相同,就表示文件沒有被篡改。下面我粗略描述一下 App 認證流程,細節可能有誤。蘋果有一對私鑰和公鑰,私鑰在他的服務器上,經過重重保護。而對應的公鑰內嵌在每一臺 iOS 設備上。當開發者註冊證書時,會在本機生成私鑰和公鑰,將公鑰上傳給蘋果服務器。蘋果服務器用自身的私鑰,對開發者上傳的公鑰做數字簽名,生成證書(cer)。經過蘋果的私鑰簽名,就保證這個開發者證書沒有被篡改。這個證書並非公鑰本身,但它包含了公鑰。同時開發者會將 App 的描述文件(.mobileprovision) 下載回本機。描述文件主要用於控制 App 的權限,比如這個是否推送、是否支持 iCould 等。原則上,證書(cer) 和描述文件(.mobileprovision) 是可以合併的。但每個 App 的權限都有所不同,於是就將其拆分成證書和描述文件。當 App 構建簽名時,選擇證書(cer) 和描述文件(mobileprovision),會尋找對應的私鑰,找不到私鑰就會簽名失敗。之後計算 App 所有資源的摘要,將摘要用私鑰加密,生成一個 _CodeSignature 的目錄。同時會將公鑰和權限信息嵌入到最終生成包中,生成 embedded.mobileprovision。_CodeSignature 中的摘要經過私鑰加密,embedded.mobileprovision 包含對應的公鑰用於加密(這個公鑰經過蘋果自身私鑰的簽名,保證不會被篡改)。私鑰只在本機中保存,用於構建時加密,並不會包含在安裝包中。上述簽名過程,Xcode 是全自動的,開發者沒有必要了解其過程。整個流程,私鑰都只保存在本機中,並沒有經過網絡,假如私鑰經過網絡傳輸,就可能被竊取而不夠安全。而本機上的私鑰,可以導出成 p12 文件,導入到另一臺開發機中。------------------------用戶安裝這個 App 後,需要手動信任描述文件。信任後,蘋果用自家的公鑰來驗證開發者的公鑰沒有被篡改。再用開發者的公鑰將 _CodeSignature 保持的摘要信息解密,驗證 App 的資源本身沒有被篡改。經過驗證,App 就可以運行。App 內的描述文件,需要用戶手動選擇信任。App 不可能在用戶不知情的情況下偷偷運行。企業證書籤名過的 App, 加密的摘要,和用於解密的描述文件都包含在安裝包中。因此用戶用Safari 打開鏈接、安裝、信任描述文件後,就可以運行。而開發者上傳到 AppStore 上的 App,會經過蘋果的私鑰重新加密簽名。因此在 AppStore 上下載的 App,不用手動點信任,也可以直接運行。iOS 設備必然可信任蘋果自身的證書。iOS 也有第三方應用商店,比如 PP 助手、同步推等等。這些商店號稱免費安裝任何 App,實際是去抓別人的 App,用自己的企業證書重新簽名。因而信任第三方商店證書之後,就可以免費運行衆多收費 App。但這是有隱患的,你不知道這些商店重新簽名時,添加了些什麼東西。第三方商店爲了盈利,也很有動力偷偷添加些佐料。從第三方商店下載的 App 往往過了一段時間就突然閃退不能用了,很可能是他們的企業證書過期或者被封殺了。對於最終用戶,沒有必要理解上述驗證。只需要記住,不要安裝來歷不明的 App。就算不小心安裝了,也不要信任其描述文件。只要不信任,它就沒有辦法運行。只在 AppStore 下載 App,不要爲了貪小便宜去第三方商店下載 App,也不要越獄 iOS 系統。現在的手機不單單是電話本身,還是你的錢包、名片,實在太重要了。
App 上架 AppStore和證書的各種區別
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
iOS開發之高德地圖
戎耀gej
2020-07-06 13:52:21
黑馬程序員——Objective-C程序設計(第4版)學習筆記之09-多態、動態類型和動態綁定——黑馬 IOS 技術博客
dumengqiu
2020-07-06 06:33:27
黑馬程序員——Objective-C程序設計(第4版)學習筆記之04-數據類型和表達式——黑馬 IOS 技術博客
dumengqiu
2020-07-06 06:33:27
黑馬程序員——Objective-C程序設計(第4版)學習筆記之07-類——黑馬 IOS 技術博客
dumengqiu
2020-07-06 06:33:27
git 常用操作(隨時更新)
hoftime
2020-07-03 16:17:52
獲得當前視圖的控制器
littleSun_zheng
2020-07-03 03:15:15
label 字體換色
UILabel *lab = [[UILabel alloc] initWithFrame:CGRectMake(10, 20, 300,50)]; lab.numberOfLines = 0; la
Rain_flay
2020-07-03 00:50:41
iOS 9適配技巧(ios自學筆記)
wangyang6275
2020-07-02 22:34:18
美國網絡巨頭服務器集體炸毛?【已解決/附解決方案】
火毅、无别
2020-07-02 15:30:15
iOS退出app
jayne_duan
2020-07-01 22:01:18