如何从命令行显示Java密钥库SecretKeyEntry

我有一个使用storetype JCEKS的Java密钥库文件.它包含SecretKeyEntry条目.我希望能够从命令行转储存储在此文件中的实际密钥.我试过这个:

keytool -list -keystore secretkeys.jks -storetype JCEKS

哪个回来了

Keystore type: JCEKS
Keystore provider: SunJCE

Your keystore contains 1 entry

secret1, May 27, 2016, SecretKeyEntry

但这并没有向我展示关键.如何从命令行中提取和查看密钥?

解决方法:

使用keytool是不可能的.

将密钥库转换为PKCS#12然后使用OpenSSL查看密钥也不起作用,因为这是一个对称密钥(SecretKeyEntry).

如果您遇到命令行,您可以编写一个小型Java程序来执行此操作.像这样的东西:

String fileName = "secretkey.ks";
char[] password = "mypassword".toCharArray();
String alias = "secret1";

KeyStore ks = KeyStore.getInstance("JCEKS");
try (FileInputStream fis = new FileInputStream(fileName)) {
    ks.load(fis, password);
    SecretKey secretKey = (SecretKey) ks.getKey(alias, password);
    System.out.println(new BigInteger(1, secretKey.getEncoded()).toString(16));
}

这会将密钥打印为十六进制字符串(带有基数16的toString()).

或者您可以使用GUI程序KeyStore Explorer.

上一篇:java – 在Undertow中启用HTTPS


下一篇:忽略/关闭Jmeter / Java中的证书验证