在自定义 API 调用上验证签名证书指纹

Verify signing certificate fingerprint on custom API Call

我确实有一个问题困扰着我。每当您使用 Google API 之类的 Firebase 数据库时,您都会在创建应用程序时告诉端点允许使用它的应用程序包名称以及您用于签署应用程序的证书的指纹。 现在,当您尝试从另一个应用程序(不同的包名称)使用 API 或更改签名证书(例如,从调试切换到发布)时,Google 将拒绝调用。

这让我想到了。 Google 如何在运行时知道签名证书指纹?

我们可以使用相同的机制通过检查指纹来保护自定义 API 端点吗? 获取包名很容易,没有什么可依赖的,但我对证书指纹感兴趣。

我的目标是通过参数散列 + salt 和可能的时间戳以外的方式对服务器上的请求进行身份验证。

我对该主题做了更多研究。事实证明,您可以像这样在运行时访问签名证书:

Signature[] sigs = context.getPackageManager().getPackageInfo(context.getPackageName(),PackageManager.GET_SIGNATURES).signatures;
for (Signature sig : sigs) {
    Log.i("App", "Signature : " + sig.hashCode());
}

found here