简单介绍下数字签名、数字证书
前沿
开发过程中需要对app发起的API请求进行验签,防篡改处理
数字证书
每个操作系统中会自带很多根证书(根证书即称为CA颁发机构),这些默认是隐士信任
的
如下图为Mac自带的系统根证书
https://support.apple.com/zh-cn/HT204132 这个链接是iPhone手机中内置的根证书
也有的根证书,是 加到 操作系统里,让用户点击确认后,信任的( 显示信任
),比如 抓包Charles的证书
抓包,就是 抓包工具 伪装成 服务器,APP连接此服务器进行通讯,然后 此服务器再伪装成客户端,和 真实的服务器进行通讯,它就成了 中间人了,所有的数据 它都能拿到,并且可以进行篡改
证书组成信息,包括主题名称、国家/地区、所在地、组织、组织单位、有效期、公共密钥信息、签发者信息
证书链
证书链:从根证书一级一级向下颁发证书,进行签名
验签
验签目的是防止 中间人攻击
所以要做 证书 检验,即 证书锁定 SSL Pinning
一般有3个方向,从宽到严依次为
叶节点证书 校验,在证书链上 校验 叶节点是否是 使用的证书,可以从证书的信息校验,比如 证书常用名称,证书序列号,证书指纹(证书的sha-256算法加密签名、 证书的sha-1算法加密签名),AFNet里面提供了 证书public key信息校验,证书data信息校验 , 但如果服务器换证书了,这个就悲剧了
根节点证书 校验,在证书链上 校验 根节点 使用的证书 ,比如 根证书 publicKey是否和 预埋的一致,根证书的sha-256签名和预埋的是否一致,但这种情况下,如果服务器换了别家的 CA颁发机构 ,就悲剧了
验证 根证书 是否是 系统自带的内置的证书,校验方式,就是验证证书的信息,比如 证书常用名称,证书序列号,证书指纹(证书的sha-256算法加密签名、 证书的sha-1算法加密签名),也就是 验证当前网络服务器的根证书的 sha-256算法签名 是否在 https://support.apple.com/zh-cn/HT204132 这个列表里
1 | // 获取证书链 |
1 | // 这个list为iPhone中的系统自带的根证书的sha256 |