使用Google SafetyNet for Android时,文档建议您
验证SSL证书链并使用SSL主机名匹配 确保叶子认证是
的问题attest.android.com
现在这是如何工作的?我会假设我得到JWS消息检查证书和签名等但是会对来自attestandand.com.com的证书进行验证,但是证明.android.com不是现场主机。
SSL签名是否适合验证,而无需事先知道域的公钥?即我可以从传入的JWS消息中验证所有内容吗?我不知道这是怎么可能的,不是吗?
答案 0 :(得分:0)
不幸的是,文档描述并不像你需要做的那样。
JWS数据包括三个部分:标题,有效负载和签名。简化标题包含用于签署有效负载的公钥证书,最后包含签名。
要验证SafetyNet JWS,首先需要提取标头中嵌入的证书。这些证书具有可以验证为公共根证书的信任链,因此您应该验证这些证书确实是有效的证书,并且它们是颁发给attest.android.com
的。
然后取出签名,并根据嵌入的证书进行验证。
如果您选中此项,则可以信任有效负载。但在查看basicIntegrity
和ctsProfileMatch
之前,请确保apkPackageName
,apkDigestSha256
和apkCertificateDigestSha256
与您的应用相匹配,以便您知道回复确实来了来自您未经修改的应用程序。
最理想的是,您的编程语言应该包含一个JWS库和一个可以为您执行此操作的SSL库,因此您不必自己编写。 public sample包含一个Java样本供您阅读。