证书锁定SSL Pinning

证书锁定SSL Pinning

证书锁定(SSL/TLS Pinning)顾名思义,将服务器提供的SSL/TLS证书内置到移动端开发的APP客户端中,当客户端发起请求时,通过比对内置的证书和服务器端证书的内容,以确定这个连接的合法性。

1. 概述

在公共网络中通知我们使用安全的SSL/TLS通信协议来进行通信,并且使用数字证书来提供加密和认证我们知道握手环节仍然面临(MIM中间人)攻击的可能性,因为CA证书签发机构也存在被黑客入侵的可能性,同时移动设备也面临内置证书被篡改的风险。

2. 证书锁定原理

证书锁定(SSL/TLS Pinning)提供了两种锁定方式:

  • Certificate Pinning
  • Public Key Pinning

文头和概述描述的实际上是Certificate Pinning(证书锁定)。

2.1 证书锁定

  1. 我们需要将APP代码内置仅接受指定域名的证书,而不接受操作系统或浏览器内置的CA根证书对应的任何证书
  2. 通过这种授权方式,保障了APP与服务端通信的唯一性和安全性
  3. 因此我们移动端APP与服务端(例如API网关)之间的通信是可以保证绝对安全
  4. 但是CA签发证书都存在有效期问题,所以缺点是在证书续期后需要将证书重新内置到APP中。

2.2 公钥锁定

  1. 公钥锁定则是提取证书中的公钥并内置到移动端APP中,通过与服务器对比公钥值来验证连接的合法性
  2. 我们在制作证书密钥时,公钥在证书的续期前后都可以保持不变(即密钥对不变),所以可以避免证书有效期问题。

3. 证书锁定指纹(Hash)

3.1 获取移动端所需证书

如果采用证书锁定方式,则获取证书的摘要hash,以infinisign.com为例

## 在线读取服务器端.cer格式证书
openssl s_client -connect infinisign.com:443 -showcerts < /dev/null | openssl x509 -outform DER > infinisign.der
## 提取证书的摘要hash并查看base64格式
openssl dgst -sha256 -binary infinisign.der | openssl enc -base64
wLgBEAGmLltnXbK6pzpvPMeOCTKZ0QwrWGem6DkNf6o=

所以其中的wLgBEAGmLltnXbK6pzpvPMeOCTKZ0QwrWGem6DkNf6o=就是我们将要进行证书锁定的指纹(Hash)信息。

3.2 获取移动端所需公钥

如果采用公钥锁定方式,则获取证书公钥的摘要hash,以infinisign.com为例

## 在线读取服务器端证书的公钥
openssl x509 -pubkey -noout -in infinisign.der -inform DER | openssl rsa -outform DER -pubin -in /dev/stdin 2>/dev/null > infinisign.pubkey
## 提取证书的摘要hash并查看base64格式
openssl dgst -sha256 -binary infinisign.pubkey | openssl enc -base64
bAExy9pPp0EnzjAlYn1bsSEGvqYi1shl1OOshfH3XDA=

所以其中的bAExy9pPp0EnzjAlYn1bsSEGvqYi1shl1OOshfH3XDA=就是我们将要进行证书锁定的指纹(Hash)信息。

4. 总结

  1. 证书锁定旨在解决移动端APP与服务端通信的唯一性
  2. 实际通信过程中,如果锁定过程失败,那么客户端APP将拒绝针对服务器的所有 SSL/TLS 请求
  3. FaceBook/Twitter则通过证书锁定以防止Charles/Fiddler等抓包工具中间人攻击
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值