【问题标题】:How does SSL Hostname matching work on JWS?SSL 主机名匹配如何在 JWS 上工作?
【发布时间】:2017-10-30 22:05:54
【问题描述】:
在使用适用于 Android 的 Google SafetyNet 时,文档建议您
验证 SSL 证书链并使用 SSL 主机名匹配
确保叶认证问题发给attest.android.com
现在这是如何工作的?我会假设我收到 JWS 消息检查证书和签名等,但会针对从 attest.android.com 获取的证书进行验证,但 attest.android.com 不是实时主机。
SSL 签名是否可以在事先不知道域的公钥的情况下进行验证?即我可以验证来自传入 JWS 消息的所有内容吗?我不明白这怎么可能,是吗?
【问题讨论】:
标签:
android
ssl
java-web-start
safetynet
【解决方案1】:
不幸的是,文档描述的不是你必须做的。
JWS 数据包括三个部分:标头、有效负载和签名。简单来说,头部包含用于对有效负载进行签名的公钥证书,并且签名包含在末尾。
要验证 SafetyNet JWS,您首先需要提取嵌入在标头中的证书。这些证书具有可以验证到公共根证书的信任链,因此您应该验证这些确实是有效的证书,并且它们是颁发给attest.android.com。
然后您取出签名,并根据嵌入的证书对其进行验证。
如果您选中此项,那么您可以信任有效负载。但在查看basicIntegrity 和ctsProfileMatch 之前,请确保apkPackageName、apkDigestSha256 和apkCertificateDigestSha256 与您的应用匹配,这样您就知道响应实际上来自您未修改的应用。
最理想的情况是,您的编程语言应该包含一个 JWS 库和一个 SSL 库,它们可以为您完成此任务,因此您不必自己编写。 public sample 包含一个 Java 示例供您仔细阅读。