导入证书后出现 Java Keytool 错误,“keytool error: java.io.FileNotFoundException & Access Denied”

2022-08-31 07:01:14

我正在尝试通过HTTPS连接Java Web API;但是,会引发异常:

javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException

我遵循了我从在线keytool和SSL证书教程中学到的以下步骤:

  1. 我将HTTPS URL复制到浏览器中,下载SSL证书并使用Internet Explorer将它们安装在浏览器中。

  2. 已将证书导出到计算机上的路径,证书已另存为.cer

  3. 已使用键工具的导入选项。以下命令执行且未出现任何错误。

    keytool -import -alias downloadedCertAlias -keystore C:\path\to\my\keystore\cacerts.file -file C:\path\of\exportedCert.cer
    
  4. 在命令提示符下提示我输入密码,然后我输入密码,然后进行身份验证。

  5. 窗口打印了一些证书数据和签名,并提示我提出以下问题:cmd

    是否信任此证书?

    我的回答是肯定的。

  6. 显示 cmd 提示符

    证书已添加到密钥库

    但是,在该消息之后,将显示另一个异常:

    keytool error: java.io.FileNotFoundException: C:\Program files\...\cacerts <Access Denied>
    

最后,当我检查密钥库时,没有添加SSL证书,我的应用程序给出了我之前尝试连接时遇到的相同异常:

(javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException)

答案 1

如果您未在管理员模式下运行命令提示符,则可能会发生这种情况。如果您使用的是Windows 7,则可以转到运行,键入cmd并按Ctrl + Shift + Enter。这将在管理员模式下打开命令提示符。如果没有,您也可以转到启动 - >所有程序 - >附件 - >右键单击命令提示符,然后单击“以管理员身份运行”。


答案 2

我在本地密钥库中导入证书时遇到了同样的问题。每当我发出keytool命令时,我都会收到以下错误。

证书已添加到密钥库密钥工具错误:java.io.FileNotFoundException: C:\Program Files\Java\jdk1.8.0_151\jre\lib\security(访问被拒绝)

以下解决方案对我有用。

1)确保您在Rus中以管理员模式运行命令提示符

2) 将当前目录更改为 %JAVA_HOME%\jre\lib\security

3)然后发出以下命令

keytool -import -alias “mycertificatedemo” -file “C:\Users\name\Downloads\abc.crt” -keystore cacerts

3)给密码更改

4) 输入 y

5) 您将在成功“证书已添加到密钥库”上看到以下消息

确保你只在-keystore参数值中给出“cacerts”,因为我给出了完整的路径,如“C**:\Program Files\Java\jdk1.8.0_151\jre\lib\security**”。

希望这将起作用