小编use*_*968的帖子

如何从 Android 应用程序中的标头数据验证 Safety Net JWS 签名

我使用SafetyNet API检查设备是否已 root 并使用以下有用的代码,但这使用 Android 验证 API 来验证 JWT 签名:

https://github.com/scottyab/safetynethelper

我想在客户端进行验证只是为了减少另一个 Web 服务的开销,而且它每天只有 10k 请求的限制。

所以解码 JWS 后我得到以下信息

JWS 消息响应示例

xxxx.yyy.zzzz

标头数据

{"alg":"RS256","x5c":["<certificate1 string>","<certificate2 string>"]}
Run Code Online (Sandbox Code Playgroud)

有效载荷数据

{"nonce":"<nounce>",
"timestampMs":1472794339527,
"apkPackageName":"<apkPackageName>",
"apkDigestSha256":"<sha digest string>",
"ctsProfileMatch":true,
"extension":"<extension string>",
"apkCertificateDigestSha256":["<apkCertificateDigestSha256 string>"],"basicIntegrity":true}
Run Code Online (Sandbox Code Playgroud)

如果执行 Base64 解码,此部分中的签名将变得不可读,因此下面是 JWS 最后一个元素中收到的签名字符串

Gw09rv1aBbtd4Er7F5ww_3TT1mPRD5YouMkPkwnRXJq8XW_cxlO4428DHTJdD8Tbep-Iv3nrVRWt2t4pH1uSr2kJ9budQJuXqzOUhN93r2Hfk-UAKUYQYhp89_wOWjSCG4ySVHD4jc9S1HrZlngaUosocOmhN4SzLZN5o8BXyBdXkjhWwgArd4bcLhCWJzmxz5iZfkhDiAyeNRq09CeqjRx_plqAy8eR_OaI_2idZBNIGfd2KmLK_CKaeVjDxuC4BzJsIlVRiuLrvP362Wwhz4r1bHh8flmHr88nK99apP2jkQD2l7lPv8y5F3FN3DKhJ15CzHR6ZbiTOw1fUteifg
Run Code Online (Sandbox Code Playgroud)

现在根据谷歌

“验证兼容性检查响应:从 JWS 消息中提取 SSL 证书链。验证 SSL 证书链并使用 SSL 主机名匹配来验证叶证书是否颁发给主机名 attest.android.com。使用证书来验证JWS 消息的签名。”

我确实有证书字符串和签名,我应该如何验证 SSL 证书(该证书是第二个证书上的字符串和主机名匹配)以及如何验证签名。

我需要这方面的指导,剪断代码会非常有帮助。

java validation android cryptography jwt

5
推荐指数
1
解决办法
5662
查看次数

标签 统计

android ×1

cryptography ×1

java ×1

jwt ×1

validation ×1