java - keytool 在 Ubuntu : incorrect magic 中不工作

标签 java linux ubuntu certificate keytool

我使用的是 Ubuntu 16.04 LTS。当我在

$JAVA_HOME/jre/lib/security

并希望使用以下命令列出 cacerts 中的证书:

keytool -list -keystore cacerts

它提示我输入密码,所以我输入默认密码:

changeit

并发生异常:

keytool error: gnu.javax.crypto.keyring.MalformedKeyringException: incorrect magic

为什么会这样?

最佳答案

如果发生这种情况,您可以试试这个以了解更多关于 keytool 的信息真正代表。

keytool -version

如果它给你这样的输出:

Unrecognized command: -version
Usage:  keytool [COMMAND] [-- COMMAND]...
Manage private keys and public certificates.

Available commands:
....

试试这个:

update-alternatives --display keytool

如果你看过这个:

keytool - AUTO
link best version is /usr/bin/gkeytool-5
link points to /usr/bin/gkeytool-5
link keytool is /usr/bin/keytool
slave keytool.1.gz is /usr/share/man/man1/keytool.1.gz
/usr/bin/gkeytool-5 - priority 1050
secondary keytool.1.gz:/usr/share/man/man1/gkeytool-5.1.gz

现在你知道 keytool实际上没有指向 $JAVA_HOME/bin/keytool ,但类似但不同的东西,它是 Ubuntu 的 native ,名为 gkeytool ,它提供相同的功能,但在这种特定情况下会失败。

所以,你可以:

  1. 不消除 gkeytool , 使用 update-alternatives更改关键字 keytool , 使其指向 $JAVA_HOME/bin/keytool ,它应该处于优先级 0。使用 update-alternatives -help查看完整语法。

  2. 或者,您可以访问真实的 keytool由 JDK 提供,作者:

    cd $JAVA_HOME/bin/ 和, ./keytool -list -keystore <full/path/to/cacerts>

注意 ./部分至关重要。

当然是在使用系统变量$JAVA_HOME之前,你必须设置它。首先,通过

在存在的变量中寻找它
env | grep -i java_home

-i表示“不区分大小写”。

如果没有返回,则

export JAVA_HOME=<path/to/your/jdk/installation/directory/>

( export 仅设置 session 范围的环境变量。一旦关闭此终端,此处设置的值将不再起作用。用于设置

  • 仅限此用户,
  • 用户范围,除了su ,
  • 用户范围,包括su ,
  • 系统范围和仅限 shell,
  • 系统范围内的所有应用程序,以及
  • 系统范围的语言环境变量,

请务必阅读此链接:https://help.ubuntu.com/community/EnvironmentVariables )

关于java - keytool 在 Ubuntu : incorrect magic 中不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39596452/

相关文章:

mysql - ruby on Rails Mysql在ubuntu上安装问题

java - 仅更改 ImageButton 背景的一种状态(默认状态)

java - MappedSuperclass 和 Embeddable 之间有什么区别,我们应该如何使用

python - 中断当前正在执行的所有 asyncio.sleep

linux - 在 Mac OS X 上使用 AWK 拆分文件

java - 调用 DestroyJavaVM 后重新调用 JNI_CreateJavaVM 返回 -1

java - 如何为 Spring 的 SimpleMappingExceptionResolver 记录异常堆栈跟踪

Java 可见性和同步 - Thinking in Java 示例

c - ubuntu 中 C 的段错误(核心转储)

ubuntu - 如何将ssh指向配置文件