安装cert后接收sun.security.provider.certpath.SunCertPathBuilderException(Scala)

时间:2016-08-19 14:46:17

标签: java scala sbt

我尝试使用以下代码下载https://slashdot.org/的内容:

scala.io.Source.fromURL("https://slashdot.org/", "ISO-8859-1").mkString

抛出异常:

Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
        at sun.security.validator.PKIXValidator.doBuild(Unknown Source)
        at sun.security.validator.PKIXValidator.engineValidate(Unknown Source)
        at sun.security.validator.Validator.validate(Unknown Source)

要解决此问题,我需要通过Chrome从https://slashdot.org/导出证书。我指定别名' slashdot'并命名vert文件' cert'。我使用命令

安装

keytool -import -trustcacerts -keystore cacerts -storepass changeit -noprompt -alias slashdot -file cert.cer 证书已成功导入,但在尝试保存URL时抛出相同的异常:

scala.io.Source.fromURL("https://slashdot.org/", "ISO-8859-1").mkString

我是否错过了安装证书的步骤?

我是否需要指定"认证路径"作为下载https://slashdot.org/证书指定的内容的一部分:

enter image description here

更新:

我认为这可能与我的Scala设置有关,但下面的Java代码会引发同样的错误:

import java.io.InputStream;
import java.nio.file.Files;
import java.net.URL;
import java.nio.file.StandardCopyOption;
import java.nio.file.Path;

public class download {
public static void main(String args[]) throws Exception{
URL website = new URL("https://slashdot.org/");
 Path target = new java.io.File("c:\\download\\myfile.txt").toPath();

try (InputStream in = website.openStream()) {
    Files.copy(in, target, StandardCopyOption.REPLACE_EXISTING);
}
}
}

1 个答案:

答案 0 :(得分:0)

我不能100%确定为什么我需要明确设置证书文件的路径,但这有效:

System.setProperty("javax.net.ssl.trustStore", "C:\\java\\jdk1.8.0_65\\jre\\lib\\security\\cacerts");

这个问题的评论归功于我尝试这个解决方案。