密钥库SHA1与APK的cert.rsa SHA1不同

gal*_*lex 5 air ssl android keystore android-keystore

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

我使用keytool为Google 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
]
Run Code Online (Sandbox Code Playgroud)

这个SHA1(由E6:69完成)从未在Google Places API中运行,因此我检查了apk包含的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
]
Run Code Online (Sandbox Code Playgroud)

这个SHA1(完成时间为72:74)运行良好,我终于设法在生产中使用Google 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>
]
]
Run Code Online (Sandbox Code Playgroud)

总结一下我的问题:

  1. SHA1怎么可能不匹配?
  2. 可能是扩展区别吗?
  3. 我怎样才能使用keytool(或其他工具)向我展示正确的SHA1呢?
  4. 我可以摆脱这个代码签名扩展回到"普通的android密钥库"吗?

Jin*_*cis 2

使用android studio您可以通过以下方式获取SHA1密钥

然后转到工作室右侧的 Gradle 选项卡

单击项目名称-> :app-> 任务-> android-> 签名报告(双击)

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