是否有命令行工具在Java密钥库中生成对称密钥?

时间:2012-01-27 08:59:44

标签: key-management java

我正在编写一个关于我的应用程序密钥更新的程序。这个程序每年都会由系统管理员执行。

在我的应用程序中,有一个对称密钥用于在将某些数据存储到数据库之前对其进行加密。此密钥存储在Java密钥库中。

当应用程序必须以加密方式在数据库中存储某些数据时,将从配置文件中读取要使用的密钥别名,使用此密钥别名从Java密钥库读取密钥,使用密钥对数据进行加密我将所有内容存储在数据库中:密钥别名,初始化向量和加密数据,全部用分号分隔。

因此,使用其他密钥的过程非常简单:

  1. 使用另一个别名
  2. 在Java Keystore中生成一个新的对称密钥
  3. 更改配置文件以使用此新密钥别名
  4. 但我不知道任何可以在Java密钥库中创建对称密钥的命令行工具。 java keytool实用程序只能创建密钥对。

    是否有命令行工具在Java密钥库中生成对称密钥,还是应该开发自己的工具?

1 个答案:

答案 0 :(得分:9)

keytool 能够从Java 6生成-genseckey command生成密钥。以下是Java 6 keytool documentation的摘录:

-genseckey {-alias alias} {-keyalg keyalg}
       {-keysize keysize} [-keypass keypass]
       {-storetype storetype} {-keystore keystore}
       [-storepass storepass]
       {-providerClass provider_class_name {-providerArg provider_arg}}
       {-v} {-protected} {-Jjavaoption}
     

生成密钥并将其存储在由别名标识的新KeyStore.SecretKeyEntry中。

     

keyalg 指定用于生成密钥的算法, keysize 指定要生成的密钥的大小。 keypass 是用于保护密钥的密码。如果未提供密码,则会提示用户输入密码。如果在提示符下按RETURN,则密钥密码将设置为与密钥库使用的密码相同的密码。 keypass 的长度必须至少为6个字符。

因此,以下命令将生成新的AES 128位密钥

keytool -genseckey -alias mykey -keyalg AES -keysize 128 \
    -storetype jceks -keystore mykeystore.jks

keytool命令有一个拼写错误,隐藏了有关-genseckey的帮助信息:

% keytool -help
[...]
-genkeypair  [-v] [-protected]
         [-alias <alias>]
         [-keyalg <keyalg>] [-keysize <taille_clé>]
         [-sigalg <sigalg>] [-dname <nomd>]
         [-validity <joursVal>] [-keypass <mot_passe_clé>]
         [-keystore <keystore>] [-storepass <mot_passe_store>]
         [-storetype <storetype>] [-providername <name>]
         [-providerclass <provider_class_name> [-providerarg <arg>]] ...
         [-providerpath <pathlist>]

-genkeypair  [-v] [-protected]
         [-alias <alias>] [-keypass <keypass>]
         [-keyalg <keyalg>] [-keysize <taille_clé>]
         [-keystore <keystore>] [-storepass <mot_passe_store>]
         [-storetype <storetype>] [-providername <name>]
         [-providerclass <provider_class_name> [-providerarg <arg>]] ...
         [-providerpath <pathlist>] 

-genkeypair命令出现两次。实际上,第二个-genkeypair应该是-genseckey。这就是我没注意到命令的原因。

我在Java 1.6.0_26中遇到过这个错字错误。我已经检查了最新的Java 6(1.6.0_31)并且它有同样的问题。我还检查了最新的Java 7并修复了文档问题:

% java -version
java version "1.7.0_03"
Java(TM) SE Runtime Environment (build 1.7.0_03-b04)
Java HotSpot(TM) Server VM (build 22.1-b02, mixed mode)
% keytool -help
 [...]
 -genkeypair         Generates a key pair
 -genseckey          Generates a secret key
 [...]