2016-05-10 3 views
5

У меня есть приложение для Android (и его производственное хранилище), которое было впервые создано с помощью Adobe Air. Давным-давно компания переключилась на обычный Android SDK для разработки приложения, но поскольку приложение уже было в производстве, хранилище ключей, которое мы используем, по-прежнему остается тем же (созданным тогда Adobe Air).Keystore SHA1 отличается от cert.rsa SHA1 от APK

Я использовал Keytool для извлечения SHA1 для Google Places API, я получил что-то вдоль этих линий:

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 
] 

Эта SHA1 (отделка Е6: 69) никогда не работали в Google Places API, так что я проверил, что было CERT.RSA АПК содержал, и это выглядело почти так же, за исключением отпечатков пальцев сертификата:

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 
] 

Это SHA1 (заканчивая 72:74) работал отлично, и я наконец-то удалось использовать API Google Адресов производства. Но я не понимаю, почему эти два отпечатка сертификата различны.

Я на 1000% уверен, что это одно и то же хранилище ключей, так как это возможно?

Когда я смотрю на андроид ключа отладки инфо структурирован таким же образом, но Extensions разные:

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> 
] 
] 

Суммируя мои вопросы:

  1. Как это возможно SHA1 сделать не соответствует?
  2. Не может быть разница в расширениях?
  3. Как я могу использовать keytool (или другой инструмент), чтобы показать мне правильный SHA1?
  4. Могу ли я избавиться от этого расширения подписи кода, чтобы вернуться в «обычное хранилище андроидов»?

ответ

2

Использование Android Studio вы можете получить ключ SHA1 следующим образом

Вкладка

Goto Gradle на правой стороне студии затем

Нажмите projectname->: app-> Задачи-> android-> signingReport (двойной щелчок)

Это будет печатать SHA1 и MD5 ключ на RUN консоли

+0

, насколько я знаю, этот метод только покажет вам SHA1 для отладки хранилища ключей – yogipriyo

2

Будет 2 keystore. отладки и выпуска. вы используете отладочный ключ, я думаю.

Если вы используете выпуск. Проверьте, что apikey верен как в отладке, так и в выпуске xmls. потому что обычно вы не увидите выпуск google xml.

Итак, вы создали правильный ключ Api, но вы не поместили его в файл-релиз.

4

Как это возможно, SHA1 не соответствует?

Сертификат отпечатки пальцы SHA-1 определяется хранилищем ключей, вероятно, вы подписали приложение с другим хранилищем ключей или ваш Keystore был изменен или были созданы еще раз, я испытал это на себе, с моей отладкой хранилищем ключей.

Как я могу использовать keytool (или другой инструмент), чтобы показать мне правильный SHA1?

Помните, когда вы создаете хранилище ключей (который содержит уникальный SHA-1 сертификат) подписывать приложения для производства, вы должны держать это хранилище ключей в надежном месте, и он должен быть использован, чтобы подписать вас приложением для Google Playstore

Если ваш SHA-1 (заканчивающийся E6: 69) никогда не работал в API Google Адресов, возможно, отпечаток сертификата SHA-1 не зарегистрирован в https://console.developers.google.com/.

Например, для API Google Адресов мне необходимо зарегистрировать мое приложение с сертификатом SHA-1 моего хранилища отладки (обычно находится в C:\Users\[USER]\.android\debug.keystore) и с сертификатом SHA-1 моего хранилища ключей.

Перейти к вашему Google Developer Console https://console.developers.google.com/apis Там вы можете определить несколько SHA-1, связанные с вашим приложением имя пакета, например, вы можете определить один для вашей отладки хранилища ключей и другой для вашего производства хранилища ключей. enter image description here

Я могу поспорить, что вы подписали с различными хранилищами ключей, потому что они имеют Diferent даты создания:

Creation date: Jan 11, 2015 
Creation date: Oct 26, 2014 
Смежные вопросы