【发布时间】:2016-09-05 10:40:43
【问题描述】:
我有一个首先使用 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
]
这个 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
]
这个 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>
]
]
总结一下我的问题:
- SHA1 怎么可能不匹配?
- 可能是扩展的不同吗?
- 那么我如何使用 keytool(或其他工具)向我显示正确的 SHA1?
- 我可以摆脱这个代码签名扩展来回到“普通的 android 密钥库”吗?
【问题讨论】:
标签: android ssl air keystore android-keystore