如何验证Play Integrity verdict中的证书SHA-256摘要有效性?
Play Integrity API证书SHA-256摘要不匹配问题解决
你遇到的核心问题是:Play Integrity返回的SHA-256摘要对应Google Play端的应用签名证书,而非你本地构建用的签名证书,这也是为什么./gradlew signingReport的结果和verdict不匹配的原因。以下是具体的排查和解决方法:
1. 明确证书类型差异
- 如果你启用了「Google Play应用签名」(App Signing by Google Play),Google会托管最终的应用签名证书,用户下载的APK是用这个证书签名的。Play Integrity返回的
certificateSha256Digest就是这个托管证书的SHA-256。 ./gradlew signingReport输出的是你本地构建APK/AAB时使用的签名密钥(可能是上传密钥或调试密钥)的摘要,和Play端的签名证书不是同一个,自然不匹配。
2. 获取正确的SHA-256摘要
方法一:从Google Play控制台直接获取
- 登录Google Play控制台,进入你的应用页面
- 左侧菜单选择「应用签名」
- 在「应用签名证书」区域,找到SHA-256指纹,去掉所有冒号并转为小写,这就是Play Integrity会返回的值。
方法二:通过证书文件计算(若已下载)
如果你下载了Google Play提供的应用签名证书文件(.der格式),可以用以下命令计算SHA-256:
# 将DER格式证书转为PEM公钥,再计算SHA-256并转为十六进制 openssl x509 -in app-signing-cert.der -inform DER -pubkey -noout | openssl pkey -pubin -outform DER | openssl dgst -sha256 -binary | xxd -p -c 256
输出结果即为无冒号的小写SHA-256字符串,和Play Integrity返回值一致。
3. 验证匹配
将你获取到的正确SHA-256字符串,和Play Integrity返回的certificateSha256Digest数组中的值对比,完全一致即为有效。
如果没有启用Google Play应用签名,那么返回的摘要应该和你上传APK/AAB时使用的签名证书一致,此时再核对./gradlew signingReport中对应构建变体的SHA-256。
内容的提问来源于stack exchange,提问作者Vince
相关产品推荐
相关产品推荐

