ssl证书合并_APP优雅进行SSL证书校验——(一)服务器篇

5ca801a3a3677efa137007f2d9fb795d.png

前言

本方案不会导致证书更换时候APP停服。

因为:

  1. APP不做证书完整校验。只做公钥校验;
  2. 服务器续费证书时候,不更换私钥,所以公钥不变动;客户端可以继续认可新版证书。

本方案的收益:

  1. 证书可以续费,可以和WEB端业务走同一个域名。
  2. APP一旦走了抓包(HTTPS的抓包),将会产生一个临时证书,与内置的公钥摘要不匹配,将会直接报错。很大程度上保证了APP的API请求不被截获篡改。再结合一些混淆服务,让dex文件不可读,API业务对接不做任何验签加密即可用于生产,减少研发投入。

在前面 为什么不推荐APP使用SSL-PINNING? 这篇文章,笔者提到了APP的证书校验的几种方式:

  1. 不校验
  2. 系统信任证书校验
  3. 公钥校验 ssl public key pinning
  4. 证书全内容校验 ssl certificate pinning

笔者推荐2和3两种。在我最近做的项目采取了第3种方案。

本篇和接下来的2篇文章将详解在真实生产项目中,我和同事对接详细流程和一些可复用的经验。

准备工作

1. SSL服务器证书。如果还没有采购证书,申请即可。我推荐let's encrypt证书(90天一续期)。申请方式见 https://imququ.com/post/letsencrypt-certificate.html

流程

1. 提取证书的公钥

openssl rsa -in certificate.crt -pubout > public_key.pub

2. 将 public_key.pub 内的 ---begin public key------end public key--- 去除,并合并成一行

cat public_key.pub | grep -v 'PUBLIC' | awk '{printf("%s",$0)}'

得到的输出类似

MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMI...

3. 利用2命令输出的结果,然后 计算sha256摘要 (下载pubkey-sha256.py)

python pubkey-sha256.py MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMI...

得到的输出类似

SHA256:S8Ff3JCaO4V...

将开头的 SHA256: 改成 sha256/ ,得到

sha256/S8Ff3JCaO4V...

将此字符串给到安卓和iOS端,并按照后续文章进行编码:

后续

1. APP优雅进行SSL证书校验——(二)安卓篇

2. APP优雅进行SSL证书校验——(三)iOS篇 [文章未完成]

参考及引用

1. 如何正確設定 AFNetworking 的安全連線 « Nelson 寫些 iOS 開發的東東

2. https://gist.github.com/StevenMaude/f054064ede8c9e781ed8

3. CertificatePinner (OkHttp 3.10.0 API)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值