2016-05-10 15 views
5

Ich habe eine Android-App (und seine Produktion Keystore), die zuerst mit Adobe Air erstellt wurde. Vor langer Zeit wechselte das Unternehmen zum regulären Android SDK, um die App zu entwickeln, aber da die App bereits in Produktion war, ist der von uns verwendete Keystore immer noch der gleiche (der dann von Adobe Air erstellt wurde).Keystore SHA1 unterscheidet sich von cert.rsa SHA1 von APK

ich keytool die SHA1 für Google Places API zu extrahieren, bekam ich etwas in diese Richtung:

Alias name: <alias_name> 
Creation date: Jan 11, 2015 
Entry type: PrivateKeyEntry 
Certificate chain length: 1 
Certificate[1]: 
Owner: CN=<company_name>, OU=, O=, C=US 
Issuer: CN=<company_name>, OU=, O=, C=US 
Serial number: <lotsofnumbers> 
Valid from: Mon Mar 28 14:08:17 IST 2011 until: Sat Mar 29 14:08:17 IDT 2036 
Certificate fingerprints: 
    MD5: ..:8D:F7 
    SHA1: ..:E6:69 
    SHA256: ..:38:9A 
    Signature algorithm name: SHA1withRSA 
    Version: 3 

Extensions: 

#1: ObjectId: 2.5.29.37 Criticality=false 
ExtendedKeyUsages [ 
    codeSigning 
] 

Diese SHA1 (Schlichten von E6: 69) nie in Google Places API gearbeitet, damit ich überprüft, was die CERT.RSA die apk enthielt und es sah fast die gleiche, außer den Zertifikats Fingerabdrücke:

Valid from: Mon Mar 28 14:08:17 IST 2011 until: Sat Mar 29 14:08:17 IDT 2036 
Certificate fingerprints: 
    MD5: ..:E1:30 
    SHA1: ..:72:74 
    SHA256: ..:9D:6D 
    Signature algorithm name: SHA1withRSA 
    Version: 3 

Extensions: 

#1: ObjectId: 2.5.29.37 Criticality=false 
ExtendedKeyUsages [ 
    codeSigning 
] 

Diese SHA1 (Schlichten von 72:74) funktionierte perfekt und ich es endlich geschafft, die Google Places API in der Produktion zu verwenden. Aber ich verstehe nicht, warum diese beiden Fingerabdrücke des Zertifikats unterschiedlich sind.

Ich bin 1000% sicher, es ist der gleiche Keystore, also wie ist das möglich?

Wenn ich auf dem Android Debug-Schlüssel aussehen wird die Info die gleiche Art und Weise strukturiert, aber die Erweiterungen sind unterschiedlich:

Alias name: androiddebugkey 
Creation date: Oct 26, 2014 
Entry type: PrivateKeyEntry 
Certificate chain length: 1 
Certificate[1]: 
Owner: CN=Android Debug, O=Android, C=US 
Issuer: CN=Android Debug, O=Android, C=US 
Serial number: 3bddeb55 
Valid from: Sun Oct 26 21:03:56 IST 2014 until: Tue Oct 18 22:03:56 IDT 2044 
Certificate fingerprints: 
    MD5: ..:01:17 
    SHA1: ..:00:77 
    SHA256: ..:32:93 
    Signature algorithm name: SHA256withRSA 
    Version: 3 

Extensions: 

#1: ObjectId: 2.5.29.14 Criticality=false 
SubjectKeyIdentifier [ 
KeyIdentifier [ 
0000: <weird hexa number and characters> 
0010: <weird hexa number and characters> 
] 
] 

meine Fragen Fassen wir zusammen:

  1. Wie dies möglich ist, die SHA1 tun nicht übereinstimmen?
  2. Könnte es der Unterschied der Erweiterungen sein?
  3. Wie kann ich keytool (oder ein anderes Tool) verwenden, um mir dann die richtige SHA1 zu zeigen?
  4. Kann ich diese Code Signing Extension loswerden, um zu einem "normalen Android Keystore" zurückzukehren?

Antwort

2

android Studio können Sie in den SHA1-Taste in der folgenden Art und Weise

auf der rechten Seite des Studios

Goto Gradle Registerkarte erhalten dann

Click projectname->: app-> Tasks-> Android-> signingReport (Doppelklick)

Dies wird SHA1 und MD5-Schlüssel auf RUN Konsole drucken

+0

soweit ich weiß, wird diese Methode nur zeigen Ihnen die SHA1 für Debug-Schlüsselspeicher – yogipriyo

2

Es wird 2 Schlüsselspeicher geben. debuggen und freigeben. Sie verwenden Debug-Schlüssel, denke ich.

Wenn Sie Release verwenden. Überprüfen Sie, ob die Apikey sowohl in den Debug- als auch in den Release-Xmls korrekt ist. weil normalerweise wird die Freigabe google xml nicht angezeigt.

Sie haben also den richtigen Api-Schlüssel erstellt, aber Sie wurden nicht in die XML-Release-Datei geschrieben.

4

Wie ist das möglich die SHA1 nicht übereinstimmen?

Der SHA-1-Zertifikat Fingerabdruck von Ihrem Schlüsselspeicher definiert ist, haben Sie wahrscheinlich Ihre Anwendung mit einem anderen Schlüsselspeicher oder Keystore- geändert wurde unterzeichnet oder erneut erstellt, ich habe dies selbst erlebt, mit meinem Debug-Schlüsselspeicher.

Wie kann ich keytool (oder ein anderes Tool) verwenden, um mir dann die richtige SHA1 zu zeigen?

Denken Sie daran, wenn Sie einen Schlüsselspeicher erstellen (enthält eine einzigartige SHA-1-Zertifikat) unterzeichnen Apps für Produktion, müssen Sie diese Schlüsselspeicher an einem sicheren Ort halten, und es muss verwendet werden, Sie Anwendungen für die zu unterschreiben Google Playstore

Wenn Ihr SHA-1 (Fertigstellung E6: 69) in Google Places API noch nie funktioniert hat, ist der SHA-1-Zertifikatfingerabdruck wahrscheinlich nicht in https://console.developers.google.com/ registriert.

Zum Beispiel für Google Places API muss ich meine App mit dem SHA-1-Zertifikat meines Debug Keystore (in der Regel in C:\Users\[USER]\.android\debug.keystore) und mit dem SHA-1-Zertifikat meiner Produktion Keystore registrieren.

Gehen Sie zu Ihrem Google Developer Console https://console.developers.google.com/apis Dort können Sie definieren mehrere SHA-1 im Zusammenhang mit Ihrer App Paketnamen, zum Beispiel eine solche für die Debug-Schlüsselspeicher und eine andere für Ihre Produktion Schlüsselspeicher definieren. enter image description here

Ich wette, dass Sie mit verschiedenen Schlüsselspeicher unterzeichnet, weil sie diferent Erstellungsdaten haben:

Creation date: Jan 11, 2015 
Creation date: Oct 26, 2014