【问题标题】:Connecting to https on internal LAN在内部 LAN 上连接到 https
【发布时间】: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 也被设置为使用网络代理。

如何解决此错误以连接到此站点?

【问题讨论】:

  • 这能回答你的问题吗? Error - trustAnchors parameter must be non-empty
  • 不 - 这只是告诉我它没有找到 - 我试图在 jar 和命令行中传递 cacerts。
  • 否 - 那种告诉错误是什么但不知道如何修复它。我在上面列出了一些我尝试修复它的方法。

标签: java okhttp


【解决方案1】:

当您说“内部 LAN 上的受信任站点”时,您似乎是在谈论合作环境?!这些环境很可能是受管理的。例如,一家公司颁发根证书或 ca 并将其分发到您的系统信任库。

Java 有自己的信任库,而且很可能不受管理。因此,为了信任您的内部网站,您有多种选择。

  1. 使用您的系统信任存储。当您在 Windows 上时,您可以设置系统属性 -Djavax.net.ssl.trustStoreType=WINDOWS-ROOT
  2. 将您的内部服务的根证书添加到您的 java 信任库中。
  3. 仅使用该证书创建一个新的信任库。
  4. 不要验证证书并信任一切。

这在一定程度上取决于您的应用程序的用途以及它应该在哪里运行以选择哪个选项。

【讨论】:

  • 这听起来很对 - 这是一个企业环境。我可以信任 *.contoso.com 中的所有内容吗?怎么样?
  • 你可以实现自己的TrustManager(例如stackoverflow.com/questions/25509296/…)。但是您验证的是证书而不是主机。您可以检查证书提供的主机,但您将一无所获,因为任何人都可以发布不可信的证书来提供该主机。所以基本问题是:您是否要确保 https 连接有效。如果是(我鼓励你)做 1. 2. 或 3. 如果没有做 4.
  • 对于 2. 我是否遵循这种技术:medium.com/expedia-group-tech/… ?
  • 与 Windows-ROOT 完美配合
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-07-09
  • 1970-01-01
  • 1970-01-01
  • 2018-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多