大多数(如果不是全部的话(文章都指出证书固定对应用程序很重要。然而,如果你正在创建你的SDK并将其出售给他人使用,那么是否有必要实现它并没有太多讨论。
想到了一些问题
- 如果我在SDK中添加证书固定,它会干扰客户端的网络实现吗?(例如,引入错误或崩溃(
- 如果不添加证书固定,而集成我的SDK的客户端添加了证书固定,这是否足以保证发送到我的SDK服务器的数据是";安全";?(我猜不会,因为从SDK的角度来看,客户端不知道哪些源是"安全的"(
我没有做太多的SDK开发,真的很好奇。提前感谢!
我尝试过的
- 了解应用程序的证书固定
- 为小型应用程序实现了证书固定
首先要问的是您的SDK正在连接到哪个远程服务?
这里有几种可能的选择:
- 您的SDK只是您提供的解决方案的移动部分,并且只有后端集成,客户端需要在其后端实现
在这种情况下,我建议将证书固定留给客户端,因为他应该负责应用程序是否正在联系他信任的后端。如果操作正确,整个应用程序将得到正确的保护。
- 您的SDK正在联系您的某个远程服务器
在这种情况下,您基本上有两个选项:
- 将锁定留给客户端(例如,什么都不做或在SDK文档中提出一些建议(,不建议这样做,因为这样您就无法控制SDK的安全性
- 在SDK本身中实现固定(推荐使用(
- 您的SDK正在联系一些由其他供应商拥有的公共远程服务(例如,一些AWS服务或Google服务/API(
在这种情况下,您有与第2点中相同的选项,但将锁定留给客户端的危险性较小,因为这些服务使用众所周知的公共信任证书,并且有其他防滥用措施(例如,您需要有正确的令牌来与服务通信,并在其基础设施中创建一些帐户等(。
- 还有一个选项(我认为这在这里不适用,但为了清楚起见,我列举了它(,即您的SDK完全离线,并且与任何远程服务都没有通信
当然,在这种情况下,不需要证书固定本身。
更直接地回答您的问题:若你们说你们有自己的SDK服务器,我会选择在SDK端钉扎实现。
关于它是否会干扰客户端证书固定,这取决于您如何实现证书固定本身,因为有几种方法可以做到这一点。
- 网络安全配置
- OkHttp和证书内部
- TrustManager
有一篇关于上述每种方法的简短文章https://www.netguru.com/blog/3-ways-how-to-implement-certificate-pinning-on-android
我从安卓的角度描述了它,但以上假设对两个移动平台都是正确的(iOS端的实现可能与安卓端不同(