【发布时间】:2021-09-12 00:43:28
【问题描述】:
我想连接到内部 LAN 上的 https 受信任站点。
我试过了:
public static void main(String args[]) throws IOException {
OkHttpClient client = new OkHttpClient();
RequestBody formBody = new FormBody.Builder()
.add("user", "password")
.build();
Request request = new Request.Builder()
.url("https://contoso.com")
.post(formBody)
.build();
Response response = client.newCall(request).execute();
System.out.println(response.code());
但这导致PKIX Path Building Error, ValidatorException: 无法找到请求目标的有效证书路径。
上面的链接建议添加:
System.setProperty("javax.net.ssl.trustStore", "cacerts");
System.setProperty("javax.net.ssl.trustStorePassword", "password");
但这会产生一个新的错误:
javax.net.ssl.SSLException: javalang.RunTimeException: UnexpectedError: java.security.InvalidAlgoritmParameterException: the trustedAnchors parameter must be non empty
我还尝试通过执行 fatjar 来强制使用 cacerts:
java -jar TestClient.jar -Djava.net.ssl.trustStore="\path\to\cscerts\in\java\lib\security\cacerts"
但我最终还是得到了`trustAnchors 参数必须是非空的'
如果我尝试使用https://www.google.com - 它可以正常工作。 Java 也被设置为使用网络代理。
如何解决此错误以连接到此站点?
【问题讨论】:
-
不 - 这只是告诉我它没有找到 - 我试图在 jar 和命令行中传递 cacerts。
-
否 - 那种告诉错误是什么但不知道如何修复它。我在上面列出了一些我尝试修复它的方法。