在使用谷歌安全网Android版的文档建议你如何在JWS上使用SSL主机名匹配?
验证SSL证书链,使用SSL主机名匹配 确保叶认证是问题
attest.android.com
现在如何工作?我会假设我得到的JWS消息检查证书和签名等,但会验证从attest.android.com获取的证书,但attest.android.com不是一个活的主机。
SSL签名不需要事先知道域的公钥就可以进行验证吗?即我可以验证传入的JWS消息中的所有内容吗?我不明白这是可能的,是吗?
在使用谷歌安全网Android版的文档建议你如何在JWS上使用SSL主机名匹配?
验证SSL证书链,使用SSL主机名匹配 确保叶认证是问题
attest.android.com
现在如何工作?我会假设我得到的JWS消息检查证书和签名等,但会验证从attest.android.com获取的证书,但attest.android.com不是一个活的主机。
SSL签名不需要事先知道域的公钥就可以进行验证吗?即我可以验证传入的JWS消息中的所有内容吗?我不明白这是可能的,是吗?
不幸的是,文档并不是非常具有描述性,因为您必须执行此操作。
JWS数据包括三个部分:标头,有效载荷和签名。简化事情,标题包含用于签署有效负载的公钥证书,签名包含在最后。
要验证SafetyNet JWS,首先需要提取标头中嵌入的证书。这些证书具有可以验证到公共根证书的信任链,因此您应该验证这些证书确实是有效的证书,并且它们颁发给attest.android.com
。
然后您拿出签名,并根据嵌入式证书进行验证。
如果您选中此项,则可以信任有效载荷。但在查看basicIntegrity
和ctsProfileMatch
之前,请确保apkPackageName
,apkDigestSha256
和apkCertificateDigestSha256
与您的应用相匹配,因此您知道该响应实际上来自未修改的应用。
理想情况下,您的编程语言应该包含一个JWS库和一个SSL库,可以为您做到这一点,所以您不必亲自编写它。 public sample包括一个Java示例供您阅读。