Keytool 未被识别为内部或外部命令

Posted

技术标签:

【中文标题】Keytool 未被识别为内部或外部命令【英文标题】:Keytool is not recognized as an internal or external command 【发布时间】:2013-10-26 05:48:47 【问题描述】:

我正在尝试使用the instructions in this article 在我的 Java 运行时中发现受信任的权威列表。当我输入以下命令时:

C:\ColdFusion8\runtime\jre\lib>keytool -list -storepass changeit -noprompt -keystore

我收到以下错误:

'keytool' 不是内部或外部命令、可运行程序或批处理文件。

我检查了包含我的 keytool 可执行文件的目录是否在路径中。 (在我的 Windows 7 机器上,它位于 C:\Program Files (x86)\Java\jre6\bin) 尽管如此,命令行将无法识别keytool 命令。

我假设文档中提到了两个单独的命令:

    C:\CFusionMX\runtime\jre\lib>keytool -list -storepass changeit -noprompt -keystore

    C:\CFusionMX\runtime\jre\lib\security\cacerts

编辑:

顺便说一句,我可以使用以下过程而不是答案中提到的复杂步骤吗?

    当我在浏览器中打开 WSDL 时,我看到了 Lock 图标,当我单击它时会打开一个“证书”窗口

    然后我点击“安装证书”选项

    一个证书导入向导窗口打开,我点击下一步我看到两个选项

    a) 根据证书类型自动选择证书存储(此选项已自动选择) b) 将所有证书放在以下存储中

我决定选择选项(b),但我很困惑我应该在这里选择哪个证书存储。

【问题讨论】:

仅供参考,当您在可执行文件中遇到该错误时,请始终运行 dir 来验证路径,即 c:/current/path > dir C:\ColdFusion8\runtime\jre\lib\keytool.exe 。 (这会告诉你 keytool.exe 的路径是错误的,正如 Miguel-F 指出的那样) 嗨,Leigh,您认为我上面提到的替代方法可行吗? AFAIK,IE 默认使用自己独立的密钥库,所以我的直觉是说“不”。但老实说,我不确定。我不怎么用IE。这可能取决于 IE 是否列出/可以访问您尝试使用的 java 商店。也就是说,我不确定通过命令行添加证书有什么复杂之处:) 只需为 .exe 使用正确的路径,您就可以开展业务了。 【参考方案1】:

    将 JDK 的 /bin 文件夹添加到 PATH 环境变量。您可以在系统设置 > 环境变量下或通过 CLI 执行此操作:

    set PATH=%PATH%;C:\Program Files\Java\jdk1.7.0_80\bin
    

    关闭并重新打开您的 CLI 窗口

【讨论】:

嗯,关闭/打开cmd窗口后我的不留 我记得这救了我的命 :D 我又遇到了问题,这又有帮助,我没有找到任何其他可以帮助我的解决方案。非常感谢你分享这个。 @pete 确保添加正确的 jdk 版本,对我来说它是 C:\Program Files\Java\jdk1.8.0_73\bin keytool 会为 JRE 和 JDK 导入证书,还是需要为两者分别运行 keytool? 谢谢。下一步是openssl' is not recognized as an internal ... 它不工作。我正在使用最新的 jdk .android studio 已经预装了 jre,这就是为什么我没有单独使用任何 JRE。我只有用于 AS 的 jdk。【参考方案2】:

您收到该错误是因为keytool 可执行文件位于bin 目录下,而不是您示例中的lib 目录下。您还需要在命令行中添加keystore 的位置。这里有一个很好的参考 - Jrun Help / Import certificates | Certificate stores | ColdFusion

默认信任库是 JRE 的 cacerts 文件。该文件通常位于以下位置:

服务器配置:

cf_root/runtime/jre/lib/security/cacerts

JRun 4 配置上的多服务器/J2EE:

jrun_root/jre/lib/security/cacerts

Sun JDK 安装:

jdk_root/jre/lib/security/cacerts

查阅其他 J2EE 应用服务器和 JVM 的文档


keytool 是 Java SDK 的一部分,可以在以下位置找到:

服务器配置:

cf_root/runtime/bin/keytool

JRun 4 配置上的多服务器/J2EE:

jrun_root/jre/bin/keytool

Sun JDK 安装:

jdk_root/bin/keytool

查阅其他 J2EE 应用服务器和 JVM 的文档

因此,如果您导航到 keytool 可执行文件所在的目录,您的命令行将如下所示:

keytool -list -v -keystore JAVA_HOME\jre\lib\security\cacert -storepass changeit

您需要提供路径信息,具体取决于您运行 keytool 命令的位置以及证书文件所在的位置。

另外,请确保您正在更新 ColdFusion 正在使用的正确 cacerts 文件。如果您在该服务器上安装了多个 JRE。您可以在“系统信息”下从管理员那里验证 JRE ColdFusion 是否正在使用。查找 Java Home 行。

【讨论】:

感谢您的回答。您认为我在问题中添加的替代选项会起作用吗?如果是的话,你能回答我在那边问的问题吗?只是试图避免上面提到的所有复杂步骤。 旁注,以防不明显“changeit”只是默认密码。出于安全原因,应该将其更改为 .. 以更安全。 @nitantkumar - 不,IE 使用它自己的密钥库,与 java 密钥库不同。您可以从 IE 中导出证书,并将其保存为 DER 格式。然后获取该文件并将其(使用 keytool)导入 Java 密钥库。其实没那么复杂。 @Miguel-F 你知道在哪里可以找到 IE 保存的自动保存的证书吗? @ramanraman 自版本 11 以来发生了变化(我相信)。 See this answer for details.【参考方案3】:

以管理员身份运行运行 CMD,这对我有用

【讨论】:

尝试了上面关于将 env 路径设置为可以找到 keytool 的不同位置的答案,但这些都不起作用。奇怪的是,它只是在以管理员身份运行后才起作用。运行 Win10 x64【参考方案4】:

执行以下命令:

set PATH="C:\Program Files (x86)\Java\jre7"

(在64位的情况下,以JRE存在为准)。

因为您的 Java 路径没有设置,所以您可以在命令行执行此操作,然后执行 keytool 导入命令。

【讨论】:

【参考方案5】:

我终于解决了这个问题!!!您应该首先通过导航到::

来设置系统变量的 jre 路径
control panel > System and Security > System > Advanced system settings 

系统变量下点击新建

Variable name: KEY_PATH
Variable value: C:\Program Files (x86)\Java\jre1.8.0_171\bin

变量值应该是 JDK 的 bin 文件夹的路径。

然后打开命令提示符并像这样将目录更改为相同的JDK的bin文件夹

C:\Program Files (x86)\Java\jre1.8.0_171\bin 

然后粘贴,

keytool -list -v -keystore "C:\Users\user\.android\debug.keystore" -alias androiddebugkey -storepass android -keypass android   

注意:人们混淆了 jre 和 jdk。我所做的一切都严格适用于 jre

【讨论】:

很高兴您解决了问题。仅供参考,最初的问题是关于在 ColdFusion 的自定义 java 安装 中使用 keytool - 而不是 Android。对于使用 CF 的任何人,上述方法都不起作用(不同的路径、默认密码等)。查看接受的答案***.com/a/19432015/8895292【参考方案6】:

一个简单的错误解决方法是您首先需要在命令提示符下更改文件夹目录。默认情况下在命令提示符或终端中(在底部的 Android Studio 中)选项卡 路径设置为 C:\Users#您选择的 PC 的名称\AndroidStudioProjects#app 名称\flutter_app> 相应更改:- C:\Users#您选择的 PC 的名称\AndroidStudioProjects#app 名称\flutter_app>cd\

输入 **cd** (#after flutter_app>),只输入 cd\ 而不是逗号

然后输入 cd Program Files\Java\jre1.8.0_251\bin(#记得正确检查jre的文件名)

现在输入 keytool -list -v -keystore "%USERPROFILE%.android\debug.keystore" -alias androiddebugkey -storepass android -keypass android(不带空格输入命令)。

screenshot of the codes to run

【讨论】:

请正确格式化您的答案并内联添加图片。【参考方案7】:

确保设置了 JAVA_HOME 和环境变量中的路径。 PATH应该能找到keytools.exe

打开“Windows 搜索”并搜索“环境变量”

在“系统变量”下单击“新建...”按钮并输入 JAVA_HOME 作为“变量名称”,“变量值”下的 Java JDK 目录的路径应类似于此 C:\Program Files\Java\ jre1.8.0_231

【讨论】:

以上是关于Keytool 未被识别为内部或外部命令的主要内容,如果未能解决你的问题,请参考以下文章

CMD: '■m' 未被识别为内部或外部命令

npm 命令返回消息 -g' 未被识别为内部或外部命令

VS2012:'nmake' 未被识别为内部或外部命令

PHP:'java' 未被识别为内部或外部命令

tsc 未被识别为内部或外部命令

我收到此错误“'npx' 未被识别为内部或外部命令,” [重复]