6

我们在客户中部署了一个 Java 客户端应用程序(Java 应用程序,而不是小程序)。此应用程序使用 url.openConnection() 检查连接并通过 Internet 调用 Web 服务(使用 CXF/JAX-WS)。

我们的一些客户网络使用代理访问外部世界。客户端应用程序在 java 系统属性中设置代理参数:

System.setProperty("proxySet", "true");   //Obsolete ?
System.setProperty("http.keepAlive", "false");
System.setProperty("java.net.useSystemProxies", "false");
System.setProperty("https.proxyHost", httpsProxyHost);
System.setProperty("https.proxyPort", httpsProxyPort);
System.setProperty("https.proxyUser", httpsProxyUser);
System.setProperty("https.proxyPassword", httpsProxyPassword);
System.setProperty("http.proxyHost", httpProxyHost);
System.setProperty("http.proxyPort", httpProxyPort);
System.setProperty("http.proxyUser", httpProxyUser);
System.setProperty("http.proxyPassword", httpProxyPassword);

Authenticator.setDefault(new NtlmAuthenticator(httpsProxyUser, httpsProxyPassword));

NtlmAuthenticator 类:

public class NtlmAuthenticator extends Authenticator {

private final String username;
private final char[] password;

public NtlmAuthenticator(final String username, final String password) {
    super();
    this.username = username;
    this.password = password.toCharArray(); 
}

public PasswordAuthentication getPasswordAuthentication() {
    return (new PasswordAuthentication (username, password));
}

}

我们使用 Java 6(客户端应用程序嵌入了 JRE 1.6.0_39),应用程序部署在 Windows(XP / 7)上。我读到 NTLM 协议自 1.4.2 起在 Windows 平台上受支持。因此,我们使用 Trend 代理进行测试并成功执行 NTLM 代理身份验证(我们看到 Wireshark NTLMSSP_NEGOCIATE(来自应用程序)/NTLMSSP_CHALLENGE(来自代理)/NTLMSSP_AUTH(来自应用程序)的 3 个数据包)

但是对于我们的一位使用 Bluecoat 代理的客户,NTLM 身份验证在 NTLMSSP_CHALLENGE 之后失败。使用 Wireshark,我们只能看到前 2 个数据包 NTLMSSP_NEGOCIATE(来自应用程序)和 NTLMSSP_CHALLENGE(来自代理),我们的应用程序永远不会发送 NTLMSSP_AUTH。在应用程序中,我们捕获了一个 SocketException :套接字已关闭

我们也尝试使用 jCIFS HttpUrlNltmHandler,但身份验证也失败了(相同的诊断)。

我发现这个线程有类似的问题,但它没有提供任何线索。我还发现了这个关于 NTLM 会话安全的线程

有任何想法吗 ?

谢谢。

只需将 http.keepalive 设置为 true 即可找到解决方案: System.setProperty("http.keepAlive", " true ");

但我不知道为什么,错误值,它适用于我们的趋势代理,不适用于我们客户的 bluecoat 代理

4

1 回答 1

1

这是由于底层实现的错误。它在Java 6 NTLM 代理身份验证和 HTTPS 上有所描述——有人让它工作吗?

于 2013-07-25T12:20:04.920 回答