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

时间:2012-04-25 18:02:44

标签: java ssl ssl-certificate keytool

我正在尝试通过HTTPS连接Java Web API;然而,抛出异常:

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

我遵循了从在线keytool& amp; 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. 我在命令提示符下提示输入密码,然后我输入了密码。

  5. cmd窗口打印了一些证书数据&签名和我被提示问题:

      

    相信这个证书吗?

    我回答是。

  6. 显示cmd提示

      

    证书已添加到密钥库

    然而,在该消息之后,显示了另一个异常:

    keytool error: java.io.FileNotFoundException: C:\Program files\...\cacerts <Access Denied>
    
  7. 最后,当我检查密钥库时,没有添加SSL证书,我的应用程序提供了我在尝试连接时得到的相同异常:

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

12 个答案:

答案 0 :(得分:228)

如果未在管理员模式下运行命令提示符,则可能会发生这种情况。 如果您使用的是Windows 7,则可以继续运行,键入cmd并按Ctrl + Shift + Enter。这将以管理员模式打开命令提示符。如果没有,你也可以去开始 - &gt;所有节目 - &gt;配件 - &gt;右键单击命令提示符并单击“以管理员身份运行”。

答案 1 :(得分:19)

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

答案 2 :(得分:10)

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

证书已添加到密钥库 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&#34; mycertificatedemo&#34; -file&#34; C:\ Users \ name \ Downloads \ abc.crt&#34; -keystore cacerts

3)给密码更改

4)输入y

5)成功后您将看到以下消息 &#34;证书已添加到密钥库&#34;

确保您提供&#34; cacerts &#34;只有-keystore param值,因为我给出的完整路径如&#34; C **:\ Program Files \ Java \ jdk1.8.0_151 \ jre \ lib \ security **&#34;。

希望这会起作用

答案 3 :(得分:9)

检查密钥库的写入权限。

答案 4 :(得分:2)

对于Mac用户,请确保sudo,并在提示时首先提供管理员密码,然后是密钥库密码,通常应该是&#34; changeit&#34;除非你真的改变它。

答案 5 :(得分:1)

如果您使用的是Windows8:

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

答案 6 :(得分:1)

即使我以管理员身份运行cmd,我也遇到此错误。

根本原因是:该文件来自VCS(subversion,perforce等),当我检查该文件的属性时,其属性为 只读 < / strong>。

解决方案是:

  • (1)禁用“只读”属性;
  • (2)从VCS中检出,让文件处于读写状态。

答案 7 :(得分:0)

我甚至以管理员身份运行命令提示符,但由于以下错误,它对我不起作用。

'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

对我有用。

答案 8 :(得分:0)

使用PowerShell时,在Windows 10上存在相同的问题,但如果使用cmd,则可以使用。

答案 9 :(得分:-1)

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

右键点击cacerts&gt;选择属性&gt;选择Securit选项卡&gt;允许所有组和用户名的所有权限。

这对我有用。

答案 10 :(得分:-1)

<强>解决

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

答案 11 :(得分:-2)

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

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