【问题标题】:Add password to keytool command将密码添加到 keytool 命令
【发布时间】:2014-02-28 11:11:18
【问题描述】:

我已经制作了一个 .bat 文件来获取我的 Android 应用程序的 SHA1,所以我不需要每次都输入命令

keytool -list -v -keystore "Path/To/My/Key.jks"

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

我查看了 keytool 的 --help,我能看到的唯一密码标志是用于更改密码,而不是指定密码。

【问题讨论】:

    标签: batch-file keytool


    【解决方案1】:

    Oracle JDK 附带的keytool 允许您在命令行中使用-storepass 指定它,您使用的是keytool -help 而不是keytool -list -help。 (我想Android版本是一样的。)

    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
    

    【讨论】:

    • 我测试了,-storepass 选项也存在于openjdk 中的keytool 中
    【解决方案2】:

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

    keytool <commands and options> -storepass changeit
    

    changeit 是默认的密钥库密码,但随便用吧。

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

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

    【讨论】:

      【解决方案3】:

      正如@sastorsl 所说,如果您担心将密码以明文形式放入命令或脚本中(并且应该),您应该将密码放入安全文件(在 Linux 中具有 0400 权限)或环境变量。

      现在keytool 确实具有与openssl 的file:&lt;filename&gt; 类似的构造,如果您的密码在文件中:

      keytool <commands and options> -storepass:file <pass_file>
      

      如果您的密码在环境变量中:

      keytool <commands and options> -storepass:env <pass_var>
      

      免责声明:我已经在 Bash 中测试了 -storepass:file 选项(不是在 Windows 中),但根据操作系统,文档似乎没有任何区别。

      来自Oracle keytool doc:

      -storepass [:env | :file ] argument

      用于保护密钥库完整性的密码。

      如果未指定修饰符 env 或 file,则密码具有 value 参数,该参数必须至少包含六个字符。否则,密码检索如下:

      env:从名为argument的环境变量中检索密码。

      file:从名为参数的文件中检索密码。

      注意:所有其他需要密码的选项,例如 -keypass、-srckeypass、-destkeypass、-srcstorepass 和 -deststorepass,都接受 env 和 file 修饰符。请记住用冒号 (:) 分隔密码选项和修饰符。

      【讨论】:

        【解决方案4】:

        如果您担心将密码存储在脚本中,并担心它会出现在您的命令行历史记录中 - 您应该这样做,请将密码存储在单独的文件中,保护它并引用它。

        注意!这是 Linux / bash 特有的,并且 OP 似乎在 Windows 上,但我希望这可以帮助其他人。

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

        如果只有keytool 将具有openssl 客户端具有的file:&lt;filename&gt; 构造。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-02-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-04-26
          • 2012-04-17
          • 2012-11-14
          • 2021-01-12
          相关资源
          最近更新 更多