Android SSL pinning

我们可以借助Charles通过手机很方便的查看App API数据,但有时候我们API可能会有些敏感数据不太愿意让别人轻易看到;你设计的很精妙(赶工)的API也不太乐意光溜溜暴露给陌生人。有很多方法,这里就说一种比较低成本的方式:CertificatePinner

用法

只要在okhttp Client 里添加一下:

1
2
3
4
5
6
7
8
9
10
    private val jwtHttpClient = OkHttpClient.Builder()
.certificatePinner(
CertificatePinner.Builder().add(
"api.xxxlabs.io",
// "sha256/js3miE89h7ESW6Maw/yxPXAW3n9XzJBP4c------W4"
// "sha256/EzNouO9uXc9NwcZ1652EcCvsv1LKqeIwyhR------wg"
"sha256/++MBgDH5WGvL9Bcn5Be30cRcL0f5O+NyoXuWt-----1aI"
).build()
)
.addInterceptor { chain -> ...}

这个字段可以是后端通过SSL证书的pub key sha256算出来的。也可以随便填一个,直接请求下,错误日志会把正确的Key打印出来,直接贴上去,即可。

·

参考

https://medium.com/@develodroid/android-ssl-pinning-using-okhttp-ca1239065616
https://square.github.io/okhttp/3.x/okhttp/okhttp3/CertificatePinner.html