运行程序发现一个很奇怪的异常:Cause: unable to find valid certification path to requested target。之前运行一直都没有问题,而且在我的电脑上报错之后,同样的程序在同事的电脑上也是可以正常运行的。试了很多种办法,最终安装证书之后解决了。
分以下几步:一、下载证书;二、导入证书;三、把证书拷贝到指定目录。
下面是具体方法。
一、下载证书
下载地址:https://download.csdn.net/download/wanghaifeng068/11805144
有五个证书,下载之后保存到本地。
二、导入证书
1、在开始菜单cmd,找到命令提示符
2、在命令提示符上右键——>以管理员身份运行
3、进入到Java安装目录
我的目录是:D:\Program Files\Java\jdk1.8.0_191\jre\lib\security
4、执行如下命令
keytool -import -alias goo -keystore cacerts -file D://goo.cer
其中:
goo 是证书名,一共五个证书,需要分别执行
D://goo.cer 是证书路径,根据自己存放的路径修改
-alias 指定别名(推荐和证书同名)
-keystore 指定存储文件(此处固定)
-file 指定证书文件全路径(证书文件所在的目录)
注意:当切换到 cacerts 文件所在的目录时,才可指定 -keystore cacerts, 否则应该指定全路径;
此时命令行会提示你输入cacerts证书库的密码,敲入changeit即可,这是java中cacerts证书库的默认密码,当然也可自行修改。
5、库密钥口令输入:changeit
6、是否信任此证书?:Y
此证书导入成功。
7、五个证书全部导入
重复步骤4、5、6,把五个证书分别导入,可能会有部分证书提示已存在,提示已存在的就当也是导入成功了。
8、注意事项,可能遇到的问题
keytool 错误: java.io.FileNotFoundException: cacerts (拒绝访问)
出现这个问题的原因是:
Windows所有写、修改操作都是只有管理员权限才可以,所以会出现写、修改操作都会遭遇”拒绝访问”,解决方案:
使用管理员权限打开命令行
如何使用管理员权限打开命令行?参照第二步中的1、2两小步。
三、把证书拷贝到指定目录
五个证书都导入成功之后,把五个证书都拷贝到Android Studio的安装目录下的security文件夹下,
我的路径:D:\Program Files\Android\Android Studio\jre\jre\lib\security,各位根据自己的安装路径,拷贝到指定位置。
重新运行Android Studio,基本上可以成功搞定。
附:如果上述操作还是不行
可以将gradle中的jcenter()修改为:
jcenter{
url 'http://jcenter.bintray.com'
}