加密、解密
对称加密、非对称加密
- 对称加密:加密、解密使用相同的密钥;DES、AES(Mac、Windows的磁盘加密使用的就是AES)
- 非对称加密:加密、解密使用不同的密钥。RSA
非对称加密原理
- 数学原理:一个很大的数很难被因式分解
- 非对称加密成对出现公钥、私钥
- 公钥加密一段信息,私钥可以解密
- 私钥加密一段信息,公钥可以认证
应用
公钥私钥的两条特性就产生了两种应用
- 加密、解密;
- 数字签名;
最常用的应用场景:
- 网银:U盾简化理解成公钥
- SSH、Gitlab;本机存储私钥,远程主机、Gitlab存储公钥
- 苹果服务器的数据无法被破解,因为私钥存在于手机中
- Telegram的端对端加密
存在的隐患:
A<----->C A<----->B<----->C
- A公钥加密, C私钥解密
- B监听干涉,A误认B是C,C误认B是A. A用B给的公钥加密,B用私钥解密出message,B再用C给的公钥加密message,C用私钥解密. A和C都不会知道B的存在
第三方认证机构数字签名
- 我们信任一些第三方认证机构(CNNIC除外)
- 数字签名的流程
- CNNIC可以给一个假冒网站颁发证书,系统/浏览器信任了CNNIC,就完全无法识别假冒网站
- 信任链,系统、浏览器有一些信任的根证书
- 苹果已经移除对WoSign证书的信任 iOS中可用的受信任根证书的列表
HTTPS
证书相关
证书
- iOS、Mac、AppleWatch、Apple TV开发、APNs、Apple Pay等
- 每类证书都有对应的develop、distribution
证书:证书是数字认证机构认证过的公钥
P12:P12包含私钥
Entitlements
Capabilities:iCloud、Push、Apple Pay、VPN、Maps、Background Mode、Data Protection
provision profile
profile包含 个Bundle Id、多个证书、多个Device Id、一个Entitlements
Code Sign
- 私钥加密代码,苹果共公钥认证
- Archive没有CodeSign,ExportIPA才会CodeSign
- 每次提交AppStore 要求与上次的私钥 致,只要公钥能认证通过就行
CertSignRequest
向Apple请求认证,同时在本机创建私钥,把公钥给Apple,Apple给这个公钥认证;
证书管理的机制
- 每个账号最多只能有3个distribution证书,25个develop证书
- 公司、企业账号可以创建 账户,分Admin、Develop等,分别有 同的权限
- Xcode8的自动管理证书机制要求登录一个开发者账号,可以操作对应的develop证书和profile
- Jenkins企业版打包就是切换到手动管理证书,替换Bundle Id、Team Id、Profile
常见问题
build version已存在
项目中会把 git commit 次数作为 build version, archive的时候根据 build version可以定位到对应的commit;
Your Account already has a valid iOS Distribution certificate
- profile失效
- 证书失效