SSL主机名匹配如何在JWS上运行?

时间:2017-05-30 12:19:57

标签: android ssl java-web-start safetynet

使用Google SafetyNet for Android时,文档建议您

  

验证SSL证书链并使用SSL主机名匹配   确保叶子认证是attest.android.com

的问题

现在这是如何工作的?我会假设我得到JWS消息检查证书和签名等但是会对来自attestandand.com.com的证书进行验证,但是证明.android.com不是现场主机。

SSL签名是否适合验证,而无需事先知道域的公钥?即我可以从传入的JWS消息中验证所有内容吗?我不知道这是怎么可能的,不是吗?

1 个答案:

答案 0 :(得分:0)

不幸的是,文档描述并不像你需要做的那样。

JWS数据包括三个部分:标题,有效负载和签名。简化标题包含用于签署有效负载的公钥证书,最后包含签名。

要验证SafetyNet JWS,首先需要提取标头中嵌入的证书。这些证书具有可以验证为公共根证书的信任链,因此您应该验证这些证书确实是有效的证书,并且它们是颁发给attest.android.com的。

然后取出签名,并根据嵌入的证书进行验证。

如果您选中此项,则可以信任有效负载。但在查看basicIntegrityctsProfileMatch之前,请确保apkPackageNameapkDigestSha256apkCertificateDigestSha256与您的应用相匹配,以便您知道回复确实来了来自您未经修改的应用程序。

最理想的是,您的编程语言应该包含一个JWS库和一个可以为您执行此操作的SSL库,因此您不必自己编写。 public sample包含一个Java样本供您阅读。