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

我试图通过 HTTPS 连接 JavaWebAPI; 但是,抛出了一个异常:

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

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

  1. 我把 HTTPS 的网址复制到浏览器中,下载了 SSL 证书并用 Internet Explorer 安装在浏览器中。

  2. 将证书导出到我计算机上的一个路径,证书保存为 .cer

  3. 使用了 keytool 的导入选项。下面的命令执行时没有任何错误。

    keytool -import -alias downloadedCertAlias -keystore C:\path\to\my\keystore\cacerts.file -file C:\path\of\exportedCert.cer
    
  4. I was prompted for a password at the command prompt, which I entered then I was authenticated.

  5. The cmd window printed some certificate data & signatures and I was prompted with the question:

    Trust this certificate?

    I answered yes.

  6. The cmd prompt displayed

    Certificate was added to keystore

    However after that message, another exception was displayed:

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

Finally when I checked the keystore , the SSL certificate was not added and my application gives the same exception I was getting earlier when trying to connect:

(javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException)
357507 次浏览

我在 Windows 下也遇到过同样的问题,可以通过 以管理员身份运行 cmd.exe解决(右键单击开始菜单,然后“以管理员身份运行”)。

检查密钥存储库的写权限。

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

如果你正在使用 windows 8:

  1. 点击开始按钮
  2. 在搜索框中,键入 command prompt
  3. 从结果中,右键单击 command prompt并单击 Run as administrator,然后执行 keytool 命令。

您可以授予自己修复此问题的权限。

右键单击 ccerts > select properties > select Securit tab > Let all rights to all the Group and user name。

这招对我很管用。

您可以存储其他磁盘或路径(不是 C)

C:\Program Files\Java\jre1.8.0_101\bin>keytool -genkey -alias server -keyalg RSA -keysize 2048 -keystore D:\myserver.jks -dname "CN=myserver,OU=IT-WebDev, O=TIACHOP, L=HCM, ST=0753, C=VN" && keytool -certreq -alias server -file D:\myserver.csr -keystore D:\myserver.jks

enter image description here

我甚至以管理员的身份运行命令提示符,但是下面的错误并不适合我。

'keytool' is not recognized as an internal or external command,
operable program or batch file.

如果 keytool 的路径不在系统路径中,则需要使用完整路径来使用 keytool,即

C:\Program Files\Java\jre<version>\bin

命令应该是这样的

"C:\Program Files\Java\jre<version>\bin\keytool.exe" -importcert -alias certificateFileAlias -file CertificateFileName.cer -keystore cacerts

对我很有效。

对于 Mac 用户,确保 sudo,当提示第一次给你的管理员密码和密钥存储密码,通常应该是“更改”,除非你实际上改变了它。

解决了

  1. 以管理员身份运行 CMD。
  2. 确保您使用了正确的信任存储库密码

我在导入本地密钥存储库中的证书时遇到了同样的问题。无论何时我发出 keytool 命令,都会得到以下错误。

向密钥存储库添加了证书 Keytool error: Java.io. FileNotFoundException: C: Program Files Java jdk1.8.0 _ 151 jre lib security (Access is 拒绝)

下面的解决方案为我工作。

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

2)更改你的工作目录为% JAVA _ HOME% jre lib security

3)然后发出以下命令

Keytool-import-alias“ my證 icatedemo”-file“ C: Users name Downloads abc.crt”-keystore ccerts

3)更改密码

4)输入 y

5)你会看到以下信息 “证书已添加到密钥存储库”

确保只给出“ 恶性肿瘤”的密钥存储参数值,因为我给出的是完整路径,比如“ C * * : Program Files Java jdk1.8.0 _ 151 jre lib security * *”。

希望能成功

我也得到了这个错误,甚至我运行 cmd 作为一个管理员。

根本原因是: 这个文件来自 VCS (subversion、 perforce 等) ,当我检查这个文件的属性时,它的属性是 只读

所以解决办法是:

  • (1)取消「只读」属性;
  • (2)从 VCS 签出,让文件处于读写状态。

确保以管理员身份运行。 在 Mac 终端:-

  1. 运行 sudo-i
  2. 然后执行命令

要解决此问题,您必须以管理员身份访问或为用户权限提供完全控制。它解决了我的问题。