苹果手机免费下载软件

发布时间: 2023-02-23 17:40 阅读: 文章来源:转载

为什么苹果允许用户安装未受信任的企业级开发者所开发的软件?

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 本身的,就需要接入苹果的应用内购买(IPA), 不能使用第三方支付。但假如使用苹果的 IPA,内购收益需要分给苹果三成。有些 App 不想给苹果分成,想使用微信、支付宝等第三方支付,就用企业证书来分发 App。对于苹果公司来说,这也是企业证书的滥用。

苹果公司不允许滥用企业证书。一旦发现,情况恶劣,会封杀企业证书,企业证书被封杀后,企业自己发布的 App 就不能用了。

另一个惩罚是,将开发者(个人或公司)列入黑名单。列入黑名单后,审核通常会非常慢。有时不仅仅是违规 App,而是这个开发者名下的所有 App 审核都非常慢。正常情况下,App 平均审核时间是两三天。但黑名单上的开发者,有时会审核几周,甚至几个月。几个月不能发布新版本,就会损失很大。

更重的惩罚是,将开发者名下的 App 全部下架,整改后才能重新上架。

有些企业为了避免牵连,有时会用不同的银行卡注册不同的开发账号。需要用不同的银行卡,因为苹果公司会检查银行卡账号,银行卡账号相同的,基本可以判断是同一个用户。自然有时会误杀。个人开发者,不要将自己的银行卡借给他人(比如亲戚)注册开发者账号,不然可能会受到牵连。

苹果对企业证书管理比较严,催生了淘宝上的一个生意,贩卖企业证书。有些 App, 因为内容违规或其它原因不能上架,但又不想暴露自己的企业证书。就会在淘宝上购买其他企业证书来签名发布,跟苹果公司打游击战。淘宝某个企业证书暴露被封杀了,又换一个企业证书重新签名发布。

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

iOS 证书签名,实际是某种数字签名。数字签名基于非对称加密。我粗略描述一下认证流程,细节可能有误。

当开发者注册证书时,会在本机生成私钥和公钥,将公钥上传给苹果服务器,生成一个描述文件(.mobileprovision),将描述文件下载回本机。描述文件并非公钥本身,但它包含了公钥,也包含了其它必要信息。

当 App 构建签名时,选择描述文件(mobileprovision),会寻找对应的私钥,找不到私钥就会签名失败。之后计算 App 所有资源的摘要,将摘要用私钥加密,生成一个 _CodeSignature 的目录。同时会将 mobileprovision 嵌入到最终生成包中,生成 embedded.mobileprovision。_CodeSignature 中的摘要经过私钥加密,embedded.mobileprovision 包含对应的公钥用于加密。私钥只在本机中保存,用于构建时加密,并不会包含在安装包中。

上述签名过程,Xcode 是全自动的,开发者没有必要了解其过程。整个流程,私钥都只保存在本机中,并没有经过网络,假如私钥经过网络传输,就可能被窃取而不够安全。而本机上的私钥,可以导出成 p12 文件,导入到另一台开发机中。

用户安装这个 App 后,需要手动信任描述文件。信任后,iOS 系统用公钥将 _CodeSignature 保持的摘要信息解密,同时计算出 App 的资源摘要信息。解密的摘要和计算的摘要做对比,对比后相同就表示资源没有被篡改,App 才可以运行。

App 内的描述文件,需要用户手动选择信任的。App 不可能在用户不知情的情况下偷偷运行。企业证书签名过的 App, 加密的摘要,和用于解密的描述文件都包含在安装包中。因此用户用Safari 打开链接、安装、信任描述文件后,就可以运行。

而开发者上传到 AppStore 上的 App,会经过苹果的私钥重新加密签名。苹果的私钥在他的服务器上,经过重重保护。而对应的公钥就在每一台 iOS 设备上。因此在 AppStore 上下载的 App,不用手动点信任,也可以直接运行。iOS 设备必然可信任苹果自身的证书。

iOS 也有第三方应用商店,比如 PP助手、同步推等等。这些商店号称免费安装任何 App,实际是去抓别人的 App,用自己的企业证书重新签名。因而信任第三方商店证书之后,就可以免费运行众多收费 App。但这是有隐患的,因为你不知道这些商店重新签名时,添加了些什么东西。第三方商店为了盈利,也很有动力在偷偷添加些佐料。

对于最终用户,没有必要理解上述验证。只需要记住,不要安装来历不明的 App。就算不小心安装了,也不要信任其描述文件。只要不信任,它就没有办法运行。只在 AppStore 下载 App,不要为了贪小便宜去第三方商店下载 App,也不要越狱 iOS 系统。现在的手机不单单是电话本身,还是你的钱包、名片,实在太重要了。

•••展开全文
相关文章