给keytool命令添加密码

38

我已经制作了一个.bat文件来获取我的Android应用的SHA1,这样我就不需要每次输入命令了。

keytool -list -v -keystore "路径/到/我的/Key.jks"

当我运行bat文件时,会要求输入密码。是否可能将密码放在命令中,例如像 --password MyPassword 这样的东西,或者在.bat文件中等待“Enter your password”一行,然后发送密码?我对.bat文件没有太多经验,所以我不知道是否可以这样做。

我查看了keytool的--help,但我只能看到更改密码的密码标志,而没有指定密码的标志。

4个回答

53

随Oracle JDK提供的keytool工具允许您在命令行中使用-storepass指定它,您之前执行的是keytool -help而不是keytool -list -help。(我想安卓版本应该也是一样的。)

C:\>keytool.exe -list -help
keytool -list [OPTION]...

Lists entries in a keystore

Options:

 -rfc                            output in RFC style
 -alias <alias>                  alias name of the entry to process
 -keystore <keystore>            keystore name
 -storepass <arg>                keystore password
 -storetype <storetype>          keystore type
 -providername <providername>    provider name
 -providerclass <providerclass>  provider class name
 -providerarg <arg>              provider argument
 -providerpath <pathlist>        provider classpath
 -v                              verbose output
 -protected                      password through protected mechanism

Use "keytool -help" for all available commands

2
我测试过了,在openjdk中找到的keytool中也存在-storepass选项。 - daparic

19

使用-storepass选项指定密钥库密码:

keytool <commands and options> -storepass changeit
< p > changeit 是默认的密钥库密码,但可以使用其他密码。

例如,要使用默认密码添加证书:

keytool -importcert -trustcacerts -alias mycert -file mycert.cer -keystore .../lib/security/cacerts -storepass changeit

4
如@sastorsl所说,如果您担心在命令或脚本中明文输入密码(您应该会这样想),那么您应该将密码放在一个安全文件中(在Linux中具有0400权限)或环境变量中。
现在,如果您的密码保存在一个文件中,keytool确实有一个类似于openssl的file:<filename>的构造。
keytool <commands and options> -storepass:file <pass_file>

如果您的密码存储在环境变量中:
keytool <commands and options> -storepass:env <pass_var>

免责声明:我已在Bash(而非Windows)中测试了-storepass:file选项,但文档似乎没有根据操作系统的不同进行任何区分。
来自Oracle keytool doc
- -storepass[: env | : file] argument :用于保护密钥库完整性的密码。 - 如果未指定修饰符envfile,则密码具有值参数,该参数必须包含至少六个字符。否则,将按以下方式检索密码: - env:从名为argument的环境变量中检索密码。 - file:从名为argument的文件中检索密码。 - 注意:所有其他需要密码的选项,例如-keypass-srckeypass-destkeypass-srcstorepass-deststorepass,都接受envfile修饰符。记得使用冒号(:)将密码选项和修饰符分开。

0

如果您担心在脚本中存储密码并出现在命令行历史记录中,那么您应该将密码存储在单独的文件中,加密它并进行引用。

注意!这是针对Linux / bash的,而OP似乎在使用Windows,但我希望这可以帮助其他人。

keytool -list -v -keystore "Path/To/My/Key.jks" -storepass $(cat < <(cat bin/.pw))

如果只有 keytool 也有像 openssl 客户端一样的 file:<filename> 结构就好了。


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