使用keytool获取证书的MD5签名

5

我需要为我的应用程序获取谷歌地图密钥,为此我需要证书的MD5签名。从互联网上看,我使用“keytool”来获取它:

keytool -list -alias mykey -keystore mykeystore

问题在于答案是SHA1签名而不是MD5签名。

我使用的是JDK 1.7。

我到底做错了什么?

感谢您花费时间帮助我。

5个回答

7

你好,这里是2021年。

JDK 8及更新版本的keytool不再打印MD5,即使您尝试将“keygen -list”命令的标准建议添加“-v”选项也无效。

我猜MD5已不再被认为足够安全,并且已被删除

同时,像亚马逊“LWA等的安全配置管理”之类的地方仍然要求您提交证书的MD5签名。

以下是一个命令,它将提供它(对于Android Studio密钥库,请使用密码“android”):

keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | \
openssl dgst -md5 

如果您想在其中添加冒号字符,那么请添加以下“sed”命令:

keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | \
openssl dgst -md5 | \
sed 's/[a-fA-F0-9][a-fA-F0-9]/&:/g; s/:$//'

以上命令适用于Linux、macOS甚至Windows(在git bash中):

MinGW截图


谢谢你!我真的需要这个。救了我的一整天。你对JDK 8绝对正确。 - Deeksha
亚马逊真的需要摆脱MD5。这对每个人都是安全风险!亚马逊声称拥有尖端软件,但实际上已经过时了... - doctorram

3

关于这个问题还有另一篇帖子:如何从Java的keytool获取MD5指纹,而不仅仅是SHA-1?

我猜JDK 1.7默认使用SHA1。为了解决这个问题,以下方法有效:

C:\Program Files\Java\jdk1.7.0\bin>keytool -v -list -alias
androiddebugkey -keystore debug.keystore -storepass android -keypass android

我尝试了这个方法,对我有效。它会按照顺序提供MD%、SHA1、SHA256和签名算法名称。


1
keytool -exportcert -alias alias -keypass keypass -keystore ./test.keystore -storepass 123456 | md5sum

0

你尝试过使用keytool命令吗:

$ keytool -list -keystore ~/.android/debug.keystore

有关获取地图 API 密钥的更多信息,请参见此处:http://code.google.com/android/maps-api-signup.html

更新:

由于您正在使用 JDK 1.7,因此其 keytool 工具有一个新的命令行参数,即 -keyalg。

我知道您可以指定 -keyalg RSA,因此也许 -keyalg MD5 可以给您正确的密钥。


1
还是不行。keytool 的答案仍然是 SHA1 签名。 - Zelig
使用-keyalg MD5参数不会改变结果。我迫切需要一个SHA1签名。 - Zelig

0

通过返回到Java 1.6解决。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接