代码签名原理

- 当我们使用Mac上的Xcode安装APP的时候,Xcode会在我们的Mac电脑上生成一对RSA的公钥M和私钥M(M=Mac);然后将公钥M通过CSR(Certificate Signing Request)文件向苹果服务器请求签名;
- 之前说了苹果服务器和iOS系统之间是有一对公钥A和私钥A的(A=Apple)
- 苹果服务器收到CSR文件之后,会使用自己的私钥A对公钥M的hash进行签名,这样公钥M和经过苹果服务器私钥A签名过的hash组成一份文件返回给Mac系统了,这份文件就叫做证书;我们打开Mac系统上的钥匙串访问就能看到许多的证书,点击签名的箭头还能看到对应的私钥M;
- 在开发过程中,编译完一个APP后,用本地的私钥M(或者别人给你的p12)对这个APP进行签名,同时把上一步得到的证书一起打包进APP里,安装到手机上
- 在安装APP时,iOS系统获取APP包里的证书,通过iOS系统内置的公钥A,去验证这个证书签名是否正确
- 验证通过之后,就说明证书里的公钥M是没有经过篡改的,再使用这个公钥M去验证APP的签名,如果通过了验证就说明APP也是没有被篡改过,可以安装的
重签名
重签步骤
- 删除插件(
Plugin)和带有插件的.app包(比如Apple Watch)
- 对
Frameworks里面的库进行重签名
- 对可执行文件进行
+x(可执行)权限
- 添加描述文件(新建工程,真机编译得到)
- 修改
plist文件中的BundleID
- 通过授权文件(
Eltilements)重签.app包
相关命令