Ich habe erfolgreich einen Backend-Service und einen Android-Client für die SafetyNet-Attestierung erstellt. Wenn ich ein jws-Token an meinen Server sende und versuche, sein Zertifikat zu validieren, stellt sich heraus, dass es kein Zertifikat gibt, das es signiert hat.
Sollte ich meiner Android-App einen API-Schlüssel hinzufügen?
Mein Attestierungsergebnis:
%Vor%Sie müssen den API-Schlüssel mit der neuesten Version der Google Play-Dienste verwenden.
Weitere Informationen finden Sie in der Dokumentation zu SafetyNetClient::attest(byte[], String)
Methode.
Als Randnotiz empfehle ich dringend, das Verifikationskontingent für einen Schlüssel, den Sie für Ihre Android-App generieren, auf den minimalen Wert 1 zu setzen:
Dies (fast aus mit 1 Fehler;)) verhindert, dass ein Angreifer einen Schlüssel verwendet, der wie folgt aus Ihrem Client-Code abgerufen werden kann:
%Vor% Ersetze X-Android-Package
, X-Android-Cert
und key
Werte, um deinen API-Schlüssel mit Android-App-Beschränkungen zu testen.
Ich denke, Sie haben aufgrund der Dokumentation einige Details verpasst - Validierung der Antwort mit Google APIs :
Hinweis : Sie benötigen einen API-Schlüssel, um auf die Android-Geräteüberprüfungs-API zuzugreifen, und die API unterliegt einer Preisbeschränkung. Aus diesen Gründen sollten Sie die API nur zum Testen während der ersten Entwicklungsphase verwenden. Sie sollten diese Verifizierungs-API nicht in einem Produktionsszenario verwenden.
Fügen Sie den API-Schlüssel hinzu und prüfen Sie, ob sich das Verhalten ändert.
Hoffe, das hilft.
Sie können die Antwort selbst validieren. Hier ist ein Code, der Ihnen hilft, die JWT-Antwort zu interpretieren:
Sie möchten die Signierung in Ihrem Backend validieren. Google lässt Sie wissen, was Sie überprüfen müssen, wenn Sie nicht ihren einfachen Service nutzen:
Überprüfen Sie die Antwort zur Kompatibilitätsprüfung
Sie sollten Schritte unternehmen, um zu machen Sicher, dass die Antwort der Kompatibilitätsprüfung tatsächlich von der SafetyNet-Service und enthält Daten, die Ihren Anfragedaten entsprechen.
Achtung: Sie sollten die gesamte JWS-Antwort an Ihren eigenen Server senden, Verwenden einer sicheren Verbindung zur Überprüfung. Wir empfehlen das nicht Sie führen die Verifizierung direkt in Ihrer App durch, weil Fall, es gibt keine Garantie, dass die Verifikationslogik selbst nicht hat wurde geändert.
Befolgen Sie diese Schritte, um den Ursprung der JWS-Nachricht zu überprüfen:
- Extrahieren Sie die SSL-Zertifikatskette aus der JWS-Nachricht.
- Bestätigen Sie die SSL-Zertifikatkette und verwenden Sie SSL-Hostname, um sicherzustellen, dass die Das Blattzertifikat wurde an den Hostnamen attest.android.com ausgestellt.
- Verwenden das Zertifikat zur Überprüfung der Signatur der JWS-Nachricht.
- Überprüfen Sie die Daten der JWS-Nachricht, um sicherzustellen, dass sie mit den Daten in Ihrem übereinstimmt ursprüngliche Anfrage. Stellen Sie insbesondere sicher, dass die Nonce, Timestamp, Paketname und die SHA-256-Hashwerte stimmen überein.
Von: Ссылка
Tags und Links android google-play-services android-security api-key safetynet