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

180

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

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

我按照从在线keytool和SSL证书教程中学到的步骤进行操作:

  1. 将HTTPS URL复制到浏览器中,下载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. 命令提示符显示:

    已将证书添加到密钥库

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

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

最后当我检查密钥库时,发现SSL证书未被添加,因此我的应用程序在尝试连接时仍然会出现之前遇到的异常:

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

你能否发布你执行的确切“keytool”命令及其输出?这里一些明显的问题是“-keystore”参数的拼写错误,以及keytool无法找到要导入密钥的密钥库。 - Alex
我本意是要写的是:keytool -import -alias downloadedCertAlias -keystore C:\path\to\my\keystore\cacerts.file -file C:\path\of\exportedCert.cer。我还提到了命令执行没有错误,所以显然这只是我问题中的拼写错误!无论如何,还是谢谢。 - cyber101
14个回答

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

这对我有用。


0
我们的密钥库存储在软件配置管理(SCM)中,由于某种原因,直接从SCM服务再次下载文件后,可以修改密钥库。可能之前下载的文件没有以二进制格式导入。

-2

你可以存储其他磁盘或路径(不是C盘)例如: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


-2

已解决

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接