前言
APP端抓包中, 设置抓包代理后会发现部分APP(如app store、Facebook)直接没法访问,其余部分app又功能正常,为何呢?这涉及 ssl-pinning,证书锁定。算法
证书锁定(SSL/TLS Pining),顾名思义,将服务器提供的SSL/TLS证书内置到移动端开发的APP客户端内,当客户端发起请求时,经过对比内置的证书和服务器端证书的内容,以肯定这个连接的合法性。浏览器
HTTPS与中间人攻击
HTTPS
- HTTPS其实是由HTTP协议与TLS协议组合而成的一个协议。
- TLS协议做用于HTTPS建议客户端与服务端通讯创建信任的过程;HTTP协议做用于客户端与服务端的正式通讯过程,两者通讯的数据是被TLS协议最终生成的密钥加密过。
- HTTPS创建链接过程会生成三个随机数,经过这三个随机数,客户端与服务端可以使用相同的算法生成后续HTTP通讯过程当中对接加密算法使用的密钥。
- HTTPS协议中,非对称加密只是在协议创建的过程,协议创建后使用的是对称加密。
中间人攻击
- 市面上的抓包软件的实现原理就是中间人攻击。
- TLS创建链接时,客户端生成的随机数一、服务端生成的随机数2都是明文,只有随机数3使用非对称加密技术加密。
- 中间人攻击的关键是截获服务器返回的证书并伪造证书发送给客户端骗取信任,获取随机数3,进而达成盗取信息的目的。
- 客户端校验证书合法性的三种方式(这也是客户端容易被骗的缘由):
- 查看证书是否过时
- 服务器证书上的域名是否和服务器的实际域名相匹配
- 校验证书链 ——所以,中间人攻击能够在终端手动添加信任根证书,即Charles/Fiddler抓包以前须要安装证书的缘由。
ssl-pinning
1.概述
在公共网络中咱们使用安全的SSL/TLS通讯协议进行通讯,而且使用数字证书来提供加密和认证。HTTPS的握手环节仍然面临(MIM中间人)攻击的可能性,所以CA证书签发机构也存在被黑客入侵的可能性,同时移动设备也面临内置证书被篡改的风险。安全
2.证书锁定原理
证书锁定(SSL/TLS Pinning)提供了两种锁定方式:服务器
- Certificate Pinning,证书锁定
- Public Key Pinning,公钥锁定
2.1 证书锁定
2.2 公钥锁定
- 具体作法:公钥锁定是提早证书中的公钥并内置到移动端APP内,经过与服务器对比公钥值来验证链接的合法性。
- 优势:在制做证书密钥时,公钥在证书续期先后能够保持不变(即密钥对不变),因此能够避免证书有效期问题。
3.证书锁定指纹(hash)
- 获取移动端所需证书
- 若是是证书锁定,即获取证书的摘要hash
- 获取移动端所需公钥
- 若是是公钥锁定,则获取证书公钥的摘要hash
4.总结
证书锁定旨在解决移动端APP与服务端通讯的惟一性。工具
- 实际通讯过程当中,若是锁定过程失败,那么客户端APP将拒绝针对服务端的全部SSL/TLS请求。
- Facebook/Twitter经过证书锁定以防止Charles/Fiddler等抓包工具的中间人攻击。
HTTPS入门, 图解SSL从回车到握手](https://link.zhihu.com/?target=https%3A//www.infinisign.com/faq/ssl-hello-process)加密