我正在尝试通过HTTPS连接Java Web API;然而,抛出异常:
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException
我遵循了从在线keytool& amp; SSL证书教程:
我将HTTPS网址复制到浏览器中,下载了SSL证书&使用Internet Explorer在浏览器中安装它们。
将证书导出到计算机上的路径,证书保存为.cer
使用了keytool的导入选项。执行以下命令时没有任何错误。
keytool -import -alias downloadedCertAlias -keystore C:\path\to\my\keystore\cacerts.file -file C:\path\of\exportedCert.cer
我在命令提示符下提示输入密码,然后我输入了密码。
cmd
窗口打印了一些证书数据&签名和我被提示问题:
相信这个证书吗?
我回答是。
显示cmd提示
证书已添加到密钥库
然而,在该消息之后,显示了另一个异常:
keytool error: java.io.FileNotFoundException: C:\Program files\...\cacerts <Access Denied>
最后,当我检查密钥库时,没有添加SSL证书,我的应用程序提供了我在尝试连接时得到的相同异常:
(javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException)
答案 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:
command prompt
command prompt
,然后点击Run as administrator
。然后执行keytool命令。答案 6 :(得分:1)
即使我以管理员身份运行cmd,我也遇到此错误。
根本原因是:该文件来自VCS(subversion,perforce等),当我检查该文件的属性时,其属性为 只读 < / strong>。
解决方案是:
答案 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)
<强>解决强>
答案 11 :(得分:-2)