【问题标题】:How do I use proxy authentication with an SSL connection using HttpsUrlConnection?如何通过使用 HttpsUrlConnection 的 SSL 连接使用代理身份验证?
【发布时间】:2013-02-20 16:31:48
【问题描述】:

我正在尝试连接到使用 SSL 的网站。此连接是通过代理 (squid) 进行的,该代理也需要代理身份验证。

我目前在我的应用程序中使用 HttpsUrlConnection 进行连接,如果可能的话,我更愿意继续使用它。

当您使用 connection.open("https://domain.com") 建立连接时会出现问题,在您有机会在普通 http 中设置任何标头(包括“代理身份验证”)之前立即发送 HTTP CONNECT connection 在调用 getOutputStream 之前不会发送任何内容,因此只需设置此标头即可。

可以为此设置一个 defaultAuthenticator 来返回正确的名称和密码。这样做有两个问题:

  1. 该应用程序是一个在 Web 服务器内运行的 Web 应用程序,其他应用程序未知。如果我设置默认身份验证器,这会影响其他应用程序吗? (出于同样的原因,设置系统属性已失效)

  2. 我还需要能够在不同的连接中使用不同的代理。例如我可能有一个连接到 proxy1.domain.com 和另一个连接到 proxy2.domain.com,每个都有不同的凭据。

实现这一目标的正确方法是什么?鉴于 HttpUrlConnection 的广泛使用,如果这不可能,我会感到非常惊讶。

【问题讨论】:

    标签: java http ssl proxy


    【解决方案1】:

    如果我没记错的话,这不能使用 JVM URLConnection 和朋友来实现。此外,鉴于其在严重错误和内存泄漏方面的记录,它已经在我们的公司黑名单上存在了很长一段时间。

    使用Apache HttpClient。

    至于您的问题 1,一般每个ClassLoader 都有自己的类副本和类静态成员。因为,Authenticator 是一个 JVM 类,我假设它是由您的应用程序 ClassLoader 的父级 ClassLoaders (其中一个)加载的,这确保了 Authenticator 只有一个副本 class在 JVM 内部。

    【讨论】:

    • 这是我们最终使用的方法。
    【解决方案2】:

    你设置了java.net.Authenticator。

    【讨论】:

      猜你喜欢
      • 2012-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-27
      • 2013-01-01
      • 2020-09-03
      • 2013-04-02
      • 1970-01-01
      相关资源
      最近更新 更多