当使用 Android 版 Google SafetyNet 时,文档建议您
验证 SSL 证书链并使用 SSL 主机名匹配
确保叶子认证是问题attest.android.com
现在这是如何运作的?我假设我收到 JWS 消息检查证书和签名等,但会根据从 attest.android.com 获取的证书进行验证,但 attest.android.com 不是实时主机。
SSL 签名是否可以在事先不知道域公钥的情况下进行验证?即我可以验证传入 JWS 消息中的所有内容吗?我不明白这怎么可能,是吗?
不幸的是,该文档并没有很好地描述您必须执行的操作。
JWS数据包括三部分:标头、有效负载和签名。简单地说,标头包含用于对有效负载进行签名的公钥证书,签名包含在末尾。
要验证 SafetyNet JWS,您首先需要提取标头中嵌入的证书。这些证书具有可以验证公共根证书的信任链,因此您应该验证这些证书确实是有效的证书,并且它们颁发给attest.android.com
.
然后取出签名,并根据嵌入的证书进行验证。
如果您选中此项,那么您就可以信任有效负载。但在看之前basicIntegrity
and ctsProfileMatch
,请确保apkPackageName
, apkDigestSha256
and apkCertificateDigestSha256
与您的应用程序的响应相匹配,这样您就知道响应实际上来自您未经修改的应用程序。
最佳情况下,您的编程语言应该包含可以为您执行此操作的 JWS 库和 SSL 库,这样您就不必自己编写它。这公开样本包括一个 Java 示例供您仔细阅读。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)