我正在自动化一些涉及 android keytool 和 jarsigner 的事情。该工具需要一个密钥库、密钥库的密码、别名和别名/密钥的密码,我正在尝试找到一种方法来显式检查所提供的别名/密钥的密码是否正确.
有什么想法吗?另外,我需要在没有要签名的 jar 文件的情况下检查它 - 在我的上下文中获取该文件很长,所以我想尽快中止而不是稍后。
您还可以检查密码是否正确,而无需尝试更改密码。我通过使用以下命令列出密钥库的属性来完成此操作:
keytool -list -keystore <keystorefile> -storepass <passwordtocheck>
您可以通过几种方式做到这一点:
A.与
keytool
如果运行命令
keytool -keypasswd -keystore <keystore> -alias <alias> -storepass <storepass> -keypass <keypass> -new <keypass>
,如果密钥库密码错误,您将收到错误 Keystore was tampered with, or password was incorrect
;如果别名密码错误,您将收到错误 Cannot recover key
。不幸的是,这两种情况的返回码都是 1,因此如果您想了解错误类型,则需要对程序的输出进行解析。
B.用一个小的Java程序
大致如下:
KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
try (FileInputStream fis = new FileInputStream(keystore)) {
ks.load(fis, ksPw.toCharArray());
}
ks.getEntry(alias, new KeyStore.PasswordProtection(aliasPw.toCharArray()));
如果密钥库密码错误,将在第 4 行失败,并显示
java.io.IOException
;如果别名密码错误,则在第 7 行失败,并显示 java.security.UnrecoverableKeyException
。
我检查了密钥别名和密码,如下所示:
keytool -list -keystore keystore.jks -alias <myalias> -storepass <mypassword>
// If success : mypassword, Feb 29, 2024, PrivateKeyEntry,
// Certificate fingerprint (SHA-256): 42:10:F3:00:.....:CF:AA