key-management - 是否有命令行工具可以在 Java keystore 中生成对称 key ?

标签 key-management java

我正在为我的应用程序编写一个关于 key 更新的程序。此过程将由系统管理员大约每年执行一次。

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

当应用程序必须以加密方式在数据库中存储一些数据时,要使用的 key 别名是从配置文件中读取的, key 是从具有此 key 别名的 Java keystore 中读取的,数据是用 key 加密的我将所有内容都存储在数据库中: key 别名、初始化 vector 和加密数据,所有这些都用分号分隔。

因此使用另一个 key 的过程很简单:

  1. 使用另一个别名在 Java Keystore 中生成一个新的对称 key
  2. 更改配置文件以使用这个新的 key 别名

但我不知道有什么命令行工具可以在 Java keystore 中创建对称 key 。 java keytool 实用程序只能创建 key 对。

是否有命令行工具可以在 Java keystore 中生成对称 key ,还是我应该开发自己的工具?

最佳答案

keytool 自 Java 6 以来能够使用 -genseckey command 生成 key .这是 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}

Generates a secret key and stores it in a new KeyStore.SecretKeyEntry identified by alias.

keyalg specifies the algorithm to be used to generate the secret key, and keysize specifies the size of the key to be generated. keypass is a password used to protect the secret key. If no password is provided, the user is prompted for it. If you press RETURN at the prompt, the key password is set to the same password as that used for the keystore. keypass must be at least 6 characters long.

因此下面的命令将生成一个新的 AES 128 位 key

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
 [...]

关于key-management - 是否有命令行工具可以在 Java keystore 中生成对称 key ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9034463/

相关文章:

java - 如何更改默认设置以在 Android Studio 的设备文件资源管理器中以文本形式打开数据库文件?

java - JDK更新时哪些文件被替换了?

java - RxJava : Reduce not working as expected

安卓安全存储

java - 在后端和其他服务之间保存用户登录的安全方法

java - 我在Spring框架中使用rabbitmq,如何在连接创建时调用basicRecover?

java - 有一种方法可以在 javafx 移动设备上更改文本选择句柄光标样式吗?

encryption - 加密患者数据

mysql - 加密 key 管理软件和透明数据加密MySQL