前两篇介绍了 RSA、HASH、和对称加密,今天结合iPhone感受一下苹果的双重认证签名
1.针对普通用户
因为市场上软件参差不齐,苹果为了保证用户手机安全,所以要求必须是通过App Store上下载的App才能进行安装(也就是经过了苹果审核的ipa包才能在手机上安装)
那么如何做到的呢
1.第一层认证 (公钥A 私钥A - 因为后面还有一层 所以给公钥私钥起了个名字)
iPhone手机上存有 公钥A
苹果服务器存有私钥A
这样就保证了苹果手机只能识别苹果服务器传过来的ipa包 - 这一步就叫做代码签名
代码签名的方式跟上节课讲的数字签名是一样的
流程大致就是苹果服务器使用私钥A对App数据的hash值进行签名,手机接收到数据后用公钥A验证这个hash值跟App数据
2.针对开发者用户 企业证书
如果只用一层认证的话 确实保证了用户使用App 只能从App Store上下载的问题
但是伴随而来的问题就是开发者如何使用真机调试了?
接下来就是第二层认证了
Mac电脑上 也有一对儿RSA 我们称之为 公钥M 私钥M
首先我们回顾一下 我们开发者制作证书的过程 来一并解释一下
首先申请证书前 我们需要申请一个csr文件 通过钥匙串访问-证书助理-从证书颁发机构请求证书
这一步其实就是就是把mac电脑里的公钥M传给苹果服务器 然后苹果服务器用私钥A 对公钥M进行签名并返回给mac电脑
然后就生成了.cer文件。
第二步我们通过选择appid 和 cer文件 以及已经在developer网站注册过的设备 生成一个描述文件
所以此时描述文件里现在有【设备ID、AppId、权限文件、cer文件(苹果服务器利用私钥A进项签名的公钥M)】
第三步利用证书进项真机调试的时候 xcode做了什么呢?
用私钥M对App数据进行签名 和描述文件一起传给了iPhone
我们还记得苹果手机有公钥A,这时候苹果手机利用公钥A对描述文件里的cer文件(私钥A签名的公钥M)进项认证得到 公钥M
而此时app数据使用的私钥M签名,当手机拿到公钥M也就能对APP数据签名进行认证了。
当然还有appid 和 设备id的校验 - 苹果做这一步就是为了保证开发不能在任何手机上安装(只限99台哦)!
接下来就要来点儿干货了
首先找个已经运行真机的项目 - 在Products 下有个 .app文件 右键showInFinder 然后选中该文件右键 显示包内容
这是一个比较完整的手动重签过程,有兴趣的同学可以自行查阅自己体验
利用Xcode重签名可以给我们省几步,第3步,第4步还有第6步。
当然剩下的这几步 我们可以写成 shell脚本 方便以后使用 可以在这里下载该脚本,里面注释相当详尽,自行查阅
接下来就是新建一个工程,改好bundleid 确保有对应的描述文件,然后运行找个空项目。
在Build Phases里面添加一个Run Script 并添加sh appSign.sh 在此之前要下载该文件 放到工程目录下,并添加执行权限。
然后在根目录下创建个一个APP的文件夹并将越狱ipa放进去,cmd+r 即可。
其实写这些东西课能并不能让更多的读者去完全了解该过程(本人描述能力有限,文字并不能很好的表达,也没有太多精力去搞),仅此记录一下自己的学习历程吧。
我创建个一个MVVMDemo,这是之前写着玩的,然后直接拿来用了。