回覆列表
  • 1 # 使用者4262213080268

    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 本身內容並沒有什麼不妥,實際可以上架 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 所有資源的摘要,將摘要用私鑰加密,生成一個 的目錄。同時會將公鑰和許可權資訊嵌入到最終生成包中,生成 。 中的摘要經過私鑰加密, 包含對應的公鑰用於加密(這個公鑰經過蘋果自身私鑰的簽名,保證不會被篡改)。私鑰只在本機中儲存,用於構建時加密,並不會包含在安裝包中。

    上述簽名過程,Xcode 是全自動的,開發者沒有必要了解其過程。整個流程,私鑰都只儲存在本機中,並沒有經過網路,假如私鑰經過網路傳輸,就可能被竊取而不夠安全。而本機上的私鑰,可以匯出成 p12 檔案,匯入到另一臺開發機中。

    ------------------------

    使用者安裝這個 App 後,需要手動信任描述檔案。信任後,蘋果用自家的公鑰來驗證開發者的公鑰沒有被篡改。再用開發者的公鑰將 保持的摘要資訊解密,驗證 App 的資源本身沒有被篡改。經過驗證,App 就可以執行。

    App 內的描述檔案,需要使用者手動選擇信任。App 不可能在使用者不知情的情況下偷偷執行。企業證書籤名過的 App, 加密的摘要,和用於解密的描述檔案都包含在安裝包中。因此使用者用Safari 開啟連結、安裝、信任描述檔案後,就可以執行。

    而開發者上傳到 AppStore 上的 App,會經過蘋果的私鑰重新加密簽名。因此在 AppStore 上下載的 App,不用手動點信任,也可以直接執行。iOS 裝置必然可信任蘋果自身的證書。

    iOS 也有第三方應用商店,比如 PP 助手、同步推等等。這些商店號稱免費安裝任何 App,實際是去抓別人的 App,用自己的企業證書重新簽名。因而信任第三方商店證書之後,就可以免費執行眾多收費 App。但這是有隱患的,你不知道這些商店重新簽名時,添加了些什麼東西。第三方商店為了盈利,也很有動力偷偷新增些佐料。從第三方商店下載的 App 往往過了一段時間就突然閃退不能用了,很可能是他們的企業證書過期或者被封殺了。

    對於終端使用者,沒有必要理解上述驗證。只需要記住,不要安裝來歷不明的 App。就算不小心安裝了,也不要信任其描述檔案。只要不信任,它就沒有辦法執行。只在 AppStore 下載 App,不要為了貪小便宜去第三方商店下載 App,也不要越獄 iOS 系統。現在的手機不單單是電話本身,還是你的錢包、名片,實在太重要了。

  • 中秋節和大豐收的關聯?
  • 豬肺怎麼做好吃又止咳潤肺?