2016-05-10 27 views
5

我有一个首次使用Adobe Air创建的android应用程序(及其生产密钥库)。很久以前,公司转而使用常规的Android SDK来开发应用程序,但由于该应用程序已经投入使用,我们使用的密钥库仍然是同一个(由Adobe Air创建)。Keystore SHA1不同于cert.rsa SHA1 APK

我使用密钥工具提取谷歌Places API的的SHA1,我得到了类似的规定:

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(由E6整理:69)在谷歌Places API所从来没有做过,所以我检查什么该CERT.RSA的APK包含,它看上去几乎除了证书的指纹相同:

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结束)非常完美,我终于成功地使用谷歌Places API的生产。但我不明白为什么这两个证书指纹是不同的。

我是1000%确定它是相同的密钥库,那么这怎么可能?

当我看到Android的调试密钥信息的结构相同的方式,但扩展是不同的:

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. 我可以摆脱此代码签名扩展回到“正常的android密钥库”?

回答

2

采用Android工作室你可以通过以下方式与SHA1关键

在工作室的右侧

转到摇篮选项卡,然后

点击projectname->:APP->任务 - > android-> signingReport(双击)

这将打印SHA1和MD5密钥RUN控制台上

+0

据我所知,这种方法只会显示你的调试密钥库的SHA1 – yogipriyo

2

将会有2个keystore。调试和发布。你正在使用调试键,我认为。

如果您使用的是发行版。在debug和xml版本中检查apikey是否正确。因为通常你不会看到谷歌xml的发布。

因此,您创建了正确的Api密钥,但未将其放入发行版xml文件中。

4

这怎么可能SHA1不匹配?

的SHA-1证书,指纹是由你的密钥库定义的,可能是你与另一个密钥库签署您的应用程序或您的密钥库中修改或再创造,我有我自己遇到过,我的调试密钥库。

如何使用keytool(或其他工具)向我显示正确的SHA1?

当你创建一个密钥库记住(包含一个独特的SHA-1证书)签署了生产应用程序,您必须保留此密钥存储在安全的地方,而且必须用于签署您的应用程序Google Play商店

如果您的SHA-1(由E6:69整理)从未在Google Places API中工作过,那么在https://console.developers.google.com/中可能没有注册SHA-1证书指纹。

例如对于Google Places API,我需要使用我的调试密钥库(通常位于C:\Users\[USER]\.android\debug.keystore)的SHA-1证书和我的生产密钥库的SHA-1证书注册我的应用。

转到您的谷歌开发者控制台 https://console.developers.google.com/apis 在那里,你可以定义多个关系到你的应用程序包的名称SHA-1,例如,你可以定义一个用于调试的密钥库,另一个用于生产密钥库。 enter image description here

我可以打赌,你用不同的密钥库签署,因为他们有diferent创建日期:

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