问题标签 [safetynet]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - Safetynet API 帮助程序错误
我想实现安全网 API 来验证设备状态我发现的最简单的方法之一是安全网帮助器类,它使实现变得如此简单 github.com/scottyab/safetynethelper。我从 securitynetlib 复制了所有类并将它们添加到我的代码中。我按照植入的方法,但我得到一个错误代码
final SafetyNetHelper safetyNetHelper = new SafetyNetHelper(BuildConfig.API1);
04-20 22:32:50.950 28741-28741/com.aashish.smart D/SafetyNetHelper:apkDigest:IQUb5ULuwdbqOwpQn3jZev2EGXcjtk/yGYUvk1c64F8= 04-20 22:32:51.028 28741-28741/tyNetSafety.com连接的服务 04-20 22:32:51.028 28741-28741/com.aashish.smart V/SafetyNetHelper:运行 SafetyNet.API 测试 04-20 22:32:54.499 28741-28741/com.aashish.smart D/SafetyNetResponse: decodedJWTPayload json:{"nonce":"tnd1YpjORIX4teJEd7LuigDWNhWkF6s4T7Ay811BxsM=","timestampMs":1461171774655,"apkPackageName":"com.aashish.smart","apkDigestSha256":"IQUb5ULuwdbqOwpQn3jZev2EGXcjtk/yGYUvk1c64F8=","ctsProfileMatch":true,"extension" :"CQ6MIM+qMkMv","apkCertificateDigestSha256":["PHKalK4AF5EmDbPL5eBQS9EZJVPkgp06cr64rVQ7B7w="]} 04-20 22:32:54.500 28741-28741/com.aashish.smart E/SafetyNetHelper:无效的 apkCertificateDigest,本地/预期 =[MIIDizCCAnOgAwIBAgIEPIOxdDANBgkqhkiG9w0BAQsFADB2MQswCQYDVQQGEwJJTjETMBEGA1UECBMKVGFtaWwgTmFkdTEQMA4GA1UEBxMHQ2hlbm5haTEOMAwGA1UEChMFU21hcnQxEzARBgNVBAsTClRlY2hpbmljYWwxGzAZBgNVBAMTEkFhc2hpc2ggVml2ZWthbmFuZDAeFw0xNjA0MTkxMzM2MzdaFw00MTA0MTMxMzM2MzdaMHYxCzAJBgNVBAYTAklOMRMwEQYDVQQIEwpUYW1pbCBOYWR1MRAwDgYDVQQHEwdDaGVubmFpMQ4wDAYDVQQKEwVTbWFydDETMBEGA1UECxMKVGVjaGluaWNhbDEbMBkGA1UEAxMSQWFzaGlzaCBWaXZla2FuYW5kMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnbvJLdKZi8Nf96wNSVdJR/bh7Y0s6jv7AFQGcrR73rMTB/7EJyH9hbl4L5+U1mrfVodM+J3s/A7LD1gXnMwhsV46tV9ZijkVwT9guxXnUaWPSv2khh5tvpJ9Sj9kyUcOyelDz5iIhK5vP2ipx6ktETIeXv97iKKmHp3vJ7/gFAVsVtkIRQ+6hLo25AN+OPZE9qH8TsnCqIK+OSd+bF56/dMlhhE63Sy4ixEKZIC5b3RkUjJbuC67GS7hgq0EwoVwJ1lX99WgoLAYJq7hQm1FB3Ns+x1rkZ5+XYxt9ZCdUJbJQAFa15t9SumHDp3/yB2uaMtvju6xFTpkoaQo6cbaZwIDAQABoyEwHzAdBgNVHQ4EFgQUZnYr1WkTZPKm5/g783K/vDwrr8EwDQYJKoZIhvcNAQELBQADggEBAAx5ToAMW6nlkXwQ5S3oIeQ66TCzBJtLjHQ>IG6eWNkmNZYXuEj14nqWrSM+AniDcW3U/NwROXOERZfvtBiiwuy0Oc8GG31VmYAd6jgdkfsXfd+96wZxqH8PRtq3m1tjXYGb9Kg1CM1oDdN5H6xtqjU24nSpQEWWs6THuWHA1LEsAnnO0JM3lm0ltBOuIGJtWBd5S6tHMgi4U+m1z/oJAW0HAyWwbuwy7/YP1uEKlEEM669bUYG6iQ4dE3cIB5guZF2qMjwPKscW9bRjoviTgJUGmmVRdpd1Dk/OOZFUEK4A+ii5c7SLW2e//QoN3WV30zNHJArCvFfTGRbeZpwOl4Z4=] 04-20 22:32:54.500 28741-28741/com.aashish.smart E/SafetyNetHelper: invalid apkCertificateDigest, response = [PHKalK4AF5EmDbPL5eBQS9EZJVPkgp06cr64rVQ7B7w=] 04-20 22:32:54.657 28741-4205/com.aashish.smart E/AndroidDeviceVerifier:验证 JWS 消息时出现问题:IG6eWNkmNZYXuEj14nqWrSM+AniDcW3U/NwROXOERZfvtBiiwuy0Oc8GG31VmYAd6jgdkfsXfd+96wZxqH8PRtq3m1tjXYGb9Kg1CM1oDdN5H6xtqjU24nSpQEWWs6THuWHA1LEsAnnO0JM3lm0ltBOuIGJtWBd5S6tHMgi4U+m1z/oJAW0HAyWwbuwy7/YP1uEKlEEM669bUYG6iQ4dE3cIB5guZF2qMjwPKscW9bRjoviTgJUGmmVRdpd1Dk/OOZFUEK4A+ii5c7SLW2e//QoN3WV30zNHJArCvFfTGRbeZpwOl4Z4=] 04-20 22:32:54.500 28741-28741/com.aashish.smart E/SafetyNetHelper: invalid apkCertificateDigest, response = [PHKalK4AF5EmDbPL5eBQS9EZJVPkgp06cr64rVQ7B7w =] 04-20 22:32:54.657 28741-4205/com.aashish.smart E/AndroidDeviceVerifier:验证 JWS 消息时出现问题:IG6eWNkmNZYXuEj14nqWrSM+AniDcW3U/NwROXOERZfvtBiiwuy0Oc8GG31VmYAd6jgdkfsXfd+96wZxqH8PRtq3m1tjXYGb9Kg1CM1oDdN5H6xtqjU24nSpQEWWs6THuWHA1LEsAnnO0JM3lm0ltBOuIGJtWBd5S6tHMgi4U+m1z/oJAW0HAyWwbuwy7/YP1uEKlEEM669bUYG6iQ4dE3cIB5guZF2qMjwPKscW9bRjoviTgJUGmmVRdpd1Dk/OOZFUEK4A+ii5c7SLW2e//QoN3WV30zNHJArCvFfTGRbeZpwOl4Z4=] 04-20 22:32:54.500 28741-28741/com.aashish.smart E/SafetyNetHelper: invalid apkCertificateDigest, response = [PHKalK4AF5EmDbPL5eBQS9EZJVPkgp06cr64rVQ7B7w =] 04-20 22:32:54.657 28741-4205/com.aashish.smart E/AndroidDeviceVerifier:验证 JWS 消息时出现问题:响应 = [PHKalK4AF5EmDbPL5eBQS9EZJVPkgp06cr64rVQ7B7w=] 04-20 22:32:54.657 28741-4205/com.aashish.smart E/AndroidDeviceVerifier:验证 JWS 消息时出现问题:响应 = [PHKalK4AF5EmDbPL5eBQS9EZJVPkgp06cr64rVQ7B7w=] 04-20 22:32:54.657 28741-4205/com.aashish.smart E/AndroidDeviceVerifier:验证 JWS 消息时出现问题:https://www.googleapis.com/androidcheck/v1/attestations/verify?key=A.......................... .......0 java.io.FileNotFoundException: https://www.googleapis.com/androidcheck/v1/attestations/verify?key=A...... ......................0 在 com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:238) 在 com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.getInputStream(DelegatingHttpsURLConnection.java:210) 在 com.android.okhttp.internal .huc.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java) 在 com.aashish.smart.AndroidDeviceVerifier$AndroidDeviceVerifierTask.doInBackground(AndroidDeviceVerifier.java:113) 在 com.aashish.smart。AndroidDeviceVerifier$AndroidDeviceVerifierTask.doInBackground(AndroidDeviceVerifier.java:82) 在 android.os.AsyncTask$2.call(AsyncTask.java:295) 在 java.util.concurrent.FutureTask.run(FutureTask.java:237) 在 android.os。 AsyncTask$SerialExecutor$1.run(AsyncTask.java:234) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:第588章)
完整日志:pastebin(dot)com/YXkS7NgW
有人可以帮我找出我无法找到的错误。或者是否有任何其他教程可供我使用安全网 API
android - SafetyNet api,从服务器而不是客户端获取随机数
我正在使用这个库:
https
://github.com/scottyab/safetynethelper
我已经阅读了 Android 开发者网站和存储库中的文档。一切正常,但我不清楚。表明从服务器获取 nonce 比在它自己的应用程序上创建它更安全。为什么将来自 SafetyNet API 的响应传递给服务器更好
android - Android 和 SafetyNet 确保对 API 的调用仅来自我的应用
我的 Android 应用程序对我的后端进行了一些 REST 调用。我希望只有并且只有我的应用程序被授权调用端点。
我打算使用 Google 的 SafetyNet 来存档它。
我的问题是: .attest() 是否有速率限制?我的应用将每 2 或 3 秒发出几个 POST 请求
上面的逻辑在这个规模上会起作用吗?有没有其他方法可以确保发布到我的端点的数据来自我的应用程序并且仅来自我的应用程序?
android - SafetyNet:包名总是返回 null
我正在实现基于Google SafetyNet 示例和SafetyNet Helper的 SafetyNet API
这是我的工作代码。第一部分是处理我在SafetyNetSampleFragment使用的代码:
这是我从SafetyNetResponseSafetyNetResponse
复制的模型:
我们可以通过在活动中调用这行代码来轻松调用上面的可行代码:
结果是:
由于时间戳正确解析。我想我已经成功地获得了安全网响应。但我不知道为什么apkPackageName
总是 null 而我显示的其他字段为空。请帮我。
android - SafetyNet 认证中是否需要 api 密钥?
我已经成功地为 SafetyNet 认证创建了后端服务和 Android 客户端。当我将 jws 令牌发送到我的服务器并尝试验证它的证书时,结果发现没有证书对其进行签名。
我应该将 api 密钥添加到我的 Android 应用程序吗?
我的证明结果:
android - 为什么 Google SafetyNet 认证需要 5 多秒?
只是想知道这是否是其他人经历过的事情。当我请求进行兼容性检查时,在我的应用程序中似乎需要不到一秒(约 750 毫秒)。不幸的是,我还维护了一个已被其他应用程序集成的库,他们抱怨说 SafetyNet 调用可能需要 5-10 秒。我不确定为什么会有所不同。会不会是他们的应用程序有什么独特之处,导致同一个库中的相同调用需要这么长时间?调试时要考虑的任何提示或事项?
android - SafetyNet API 的最低支持操作系统版本
我正在使用 Google SafetyNet API 来检测我的应用程序中的设备篡改。参考::https ://developers.google.com/android/reference/com/google/android/gms/safetynet/package-summary
但我找不到对最低支持操作系统版本的任何参考。我以为我在某处读到它是 7.0,但现在找不到。
它曾经在 API 文档中说“自从”,这对于说明需求很有用,但似乎已经消失了。
在 Android 支持的情况下,SafetyNet 将使用的最早的 Android 版本是什么?谢谢。
android - SSL 主机名匹配如何在 JWS 上工作?
使用适用于 Android 的 Google SafetyNet 时,文档建议您
验证 SSL 证书链并使用 SSL 主机名匹配来确保叶证书是问题
attest.android.com
现在这是如何工作的?我会假设我收到 JWS 消息检查证书和签名等,但会针对从 attest.android.com 获取的证书进行验证,但 attest.android.com 不是实时主机。
SSL 签名是否可以在事先不知道域的公钥的情况下进行验证?即我可以验证来自传入 JWS 消息的所有内容吗?我不明白这怎么可能,是吗?
android - 如果使用 SafetyNet,如何真正保护 android 应用程序的 google api 密钥?
我目前正在使用我生成的谷歌 API 密钥,并将其放入 android 应用程序中以访问SafetyNet
和Google Maps
. 我计划将所有对 Google Maps API 的调用转移到我自己的服务器上,我将我的 Google API 密钥存储在服务器上而不是客户端中。但是,我也在SafetyNet
我的应用程序中使用了 API,并且谷歌 API 密钥需要在应用程序中,以便 android 应用程序进行调用以获取JWS
响应。所以我陷入了一个难题。我不希望应用程序中的任何地方都有 google API 密钥,如果我不使用它会很好,SafetyNet
但我需要使用它。
android - SafetyNet 证明因内部错误而失败
我想使用SafetyNet Attestation API(请注意,该文档似乎已过时,因为它使用的方法已被弃用)。使用最新版本的 Play Services (11.0.1) 我想出了以下代码:
API_KEY
Google Developer Console 中的 API 密钥在哪里。Activity
此代码在's中调用onCreate(...)
。无论我尝试什么,它都会导致失败,并且e
是 的一个实例ApiException
,但它没有提供任何有用的信息来说明发生了什么问题,因为状态消息是null
并且状态代码是 8,根据文档,它是“内部错误”。我试图以 5 秒的延迟调用它,但没有成功。测试设备具有 API 24 和 Google Play 服务 11.0.55。
任何人都知道出了什么问题以及解决方案是什么?
编辑:旧SafetyNet.SafetyNetApi.attest(googleApiClient, nonce)
方法似乎工作正常,但它已被弃用,所以我不想使用它。