不管是互联网技术的发展,还是科学技术的进步,都进一步影响了我们对于智能设备的需求,尤其是智能手机部分。而智能手机的构成部分就是APP软件了,那么大家对于iOS签名 App 的发展和原理或多或少有一些了解吗:
iOS 签名机制挺复杂,各种证书,Provisioning Profile,entitlements,CertificateSigningRequest,p12,AppID,概念一堆,也很容易出错,本文尝试从原理出发,一步步推出为什么会有这么多概念,希望能有助于理解 iOS App 签名的原理和流程。
目的:先来看看苹果的签名机制是为了做什么。在 iOS 出来之前,在主流操作系统(Mac/Windows/Linux)上开发和运行软件是不需要签名的,软件随便从哪里下载都能运行,导致平台对第三方软件难以控制,盗版流行。苹果希望解决这样的问题,在 iOS 平台对第三方 App 有绝对的控制权,一定要保证每一个安装到 iOS 上的 App 都是经过苹果官方允许的,怎样保证呢?就是通过签名机制
代码签名
在iOS出来之前,以前的主流操作系统(Mac/Windows)软件随便从哪里下载都能运行,系统安全存在隐患,盗版软件、病毒入侵、静默安装等等。那么苹果希望解决这样的问题,要保证每一个安装到 iOS 上的 APP 都是经过苹果官方允许的,怎样保证呢?就是通过代码签名。
如果要实现验证,其实最简单的方式:就是通过苹果官方生成非对称加密的一对公私钥。在iOS的系统中内置一个公钥,私钥由苹果后台保存,我们传APP到AppStore时,苹果后台用私钥对APP数据进行签名,iOS系统下载这个APP后,用公钥验证这个签名,若签名正确,这个APP肯定是由苹果后台认证的,并且没有被修改过,也就达到了苹果的需求:保证安装的每一个APP都是经过苹果官方允许的。
向签名
苹果需求
安装包不需要上传到App Store,可以直接安装到手机上;
苹果为了保证系统的安全性,又必须对安装的APP有绝对的控制权:
① 经过苹果允许才可以安装;
② 不能被滥用导致非开发APP也能被安装;
双向签名的原理
这里有两个角色:一个是iOS系统,还有一个就是Mac系统,因为iOS的APP开发环境在Mac系统下,所以这个依赖关系成为了苹果双层签名的基础。