以下内容来自小码哥教育底层原理班的笔记总结,更多详情可以去腾讯课堂购买.
密钥的基本概念:
由公钥加密的密文,必须使用与该公钥对应的私钥才能解密,由私钥加密的密文,必须使用与该私钥对应的公钥才能解密
由消息的接收者,生成一对公钥、私钥
将公钥发给消息的发送者,消息的发送者使用公钥加密消息
保证数据不被篡改,不能保证信息加密
证书是为了解决中间人攻击(是否伪造公钥 )而产生的
比如A要给B发消息:A->B,有个中间人攻击C
1.消息接受者B生成一对公私钥
2.B把公钥发送给A的过程中,被中间攻击者C拦截了公钥
3.此时C成为消息接受者,用自己生成的公私钥模仿B,把C的公钥发给A,然后发消息
4.此时C就拦截了A发来的消息,用B发来的公钥加密A发来的消息,与B沟通,成功拦截A->B之间的消息
怎么解决中间人攻击问题呢?
1.消息接受者B生成一对公私钥后,把自己的公钥发送给权威认证机构
2.权威认证机构会把B的信息,B的公钥,权威机构用自己的私钥对B的公钥做的一个签名
3.消息发送者A,可以去权威机构请求B的证书,用权威机构公开的公钥,验证B证书的合法性
iOS签名机制流程图
iOS签名机制 – 流程图.png签名流程图解释:
①在Mac设备上运行Xcode,打包App时,Mac设备的私钥会对代码,资源文件进行签名
②在生成苹果证书时在钥匙串找到Mac设备的公钥CertificateSigningRequest.certSigningRequest文件上传到Apple后台,Apple后台会用私钥对Mac设备的公钥进行签名生成证书
③把②生成的证书和在后台配置的devices,app id,entitlements再次用Apple后台的私钥进行签名生成mobileProvision文件
④iOS设备的公钥会对mobileProvision的签名进行验证,看devices,app id,entitlements是否被篡改
⑤iOS设备的公钥然后再对证书的签名进行验证,查看Mac设备的公钥是否被篡改
⑥从⑤中获取到Mac设备的公钥,去验证用Xcode打包的App是否被篡改
另外:
苹果的一套复杂的机制是为了保证App不被窜改,更方便的打包安装,如果不为方便考虑,只需要第①步使用Apple后台签名和第⑥步iOS设备的Apple公钥验证是否篡改也是可以的.
每次打包时,把App的代码上传到Apple后台,经过Apple后台私钥签名,然后再下载下来,通过iOS设备的Apple公钥进行验证也能达到App不被篡改的目的,这样每次上传下载就太过于麻烦,于是有了以下的验证流程.
网友评论