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

我试图通过HTTPS连接一个Java Web API; 然而,抛出一个exception:

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

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

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

  2. 将证书导出到我的计算机上的path,证书保存为.cer

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

     keytool -import -alias downloadedCertAlias -keystore C:\path\to\my\keystore\cacerts.file -file C:\path\of\exportedCert.cer 
  4. 系统提示input密码,然后input密码,然后进行身份validation。

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

    相信这个证书?

    我回答是的。

  6. 显示cmd提示符

    证书已添加到密钥库

    但是在那个消息之后,显示了另一个exception:

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

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

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

如果您没有以pipe理员模式运行命令提示符,可能会发生这种情况。 如果您使用的是Windows7,则可以运行,inputcmd,然后按Ctrl + Shift + Enter。 这将以pipe理员模式打开命令提示符。 如果没有,你也可以去开始 – >所有程序 – >附件 – >右键单击命令提示符,并说以pipe理员身份运行。

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

检查密钥库上的写入权限。

如果你使用的是Windows8:

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

你可以给自己解决这个问题的权限。

右键单击cacerts>select属性>selectSecurit选项卡>允许所有组和用户名的所有权限。

这对我有效。

我甚至以pipe理员的身份运行命令提示符,但是对于下面的错误我没有用。

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

如果keytool的path不在你的系统path中,那么你将需要使用完整的path来使用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,并在出现提示时首先给予您的pipe理员密码,然后密钥库密码,通常应该是“changeit”,除非你真的改变它。

解决了

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

您可以存储其他磁盘或path(不是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 

在这里输入图像说明