-
数字签名
-
定义核心:它就是通过hash混淆算法和非对称加密的一种过程
-
作用:防止数据篡改,一般夹带在要传输的数据中
-
一般生成的流程为:Data---Hash算法---> Digest(摘要) ---私钥加密---> SignatureA(签名)
-
验签流程为:
- Data---Hash算法---> DigestA、SignatureA----公钥解密---->DigestB
- DigestA 和DigestB 对比是否一样,称为签名验证流程
注意:哈希算法是无法解密的
-
-
数字证书
-
实质为:公钥 + 公钥身份信息+ SignatureB(证书机构签发的)
-
获取证书公钥前需对SignatureB进行验签操作
- 拿SignatureB的公钥 解密SignaureB 得到摘要DigestB
- 证书中的公钥 通过Hash算法算出DigestA
- DigestB、DigestA 进行比较
-
作用:保证了SignatureA 对应公钥的安全性
-
-
证书信任链
-
CA证书 一般是在安装系统/软件时内置的
-
证书一般分为三种
- 根证书 Root Certificate
- 中间证书 Intermediate Certificate
- 叶子证书 Leaf Certificate 例如: Xcode 的开发证书 是有苹果的(中间证书)Apple Worldwide Developer Relations Certification Authortity 进行签发的
-
打包的原理
-
测试包安装流程
- 在你的 Mac 开发机器生成一对公私钥,这里称为公钥L,私钥L。L:Local
- 苹果自己有固定的一对公私钥,跟上面 AppStore 例子一样,私钥在苹果后台,公钥在每个 iOS 设备上。这里称为公钥A,私钥A。A:Apple
- 把公钥 L 传到苹果后台,用苹果后台里的私钥 A 去签名公钥 L。得到一份数据包含了公钥 L 以及其签名,把这份数据称为证书。
- 在苹果后台申请 AppID,配置好设备 ID 列表和 APP 可使用的权限,再加上第③步的证书,组成的数据用私钥 A 签名,把数据和签名一起组成一个 Provisioning Profile 文件,下载到本地 Mac 开发机。
- 在开发时,编译完一个 APP 后,用本地的私钥 L 对这个 APP 进行签名,同时把第④步得到的 Provisioning Profile 文件打包进 APP 里,文件名为 embedded.mobileprovision,把 APP 安装到手机上。
- 在安装时,iOS 系统取得证书,通过系统内置的公钥 A,去验证 embedded.mobileprovision 的数字签名是否正确,里面的证书签名也会再验一遍。
- 确保了 embedded.mobileprovision 里的数据都是苹果授权以后,就可以取出里面的数据,做各种验证,包括用公钥 L 验证APP签名,验证设备 ID 是否在 ID 列表上,AppID 是否对应得上,权限开关是否跟 APP 里的 Entitlements 对应等。
- 最终安装进手机系统中
-
生产包流程
- IPA 上传AppStore ,进行验签,重新对ipa 进行打包 移除 profile
-
-