具有NTLM的Java HTTPClient 4.5,无法获得NTLMv2身份验证

时间:2018-08-21 15:04:15

标签: java apache-httpclient-4.x ntlmv2

我正在尝试使用NTLMv2向代理进行身份验证。但是反过来,我得到的是使用NTLMv1进行身份验证。代理支持两种类型,并且客户端在域之外(但具有必需的凭据)。

客户端正在CentOS 6上运行。 代理是Squid,它也在CentOS 6上运行。 Windows 2019作为AD。

如果我使用HTTP客户端4.5尝试PoC,我会在Wireshark中看到在协商期间(消息类型1)未设置FLAG_REQUEST_TARGET。看着NTLMEngineImpl内的HTTP客户端,我看到:

static String getType1Message(final String host, final String domain) throws NTLMEngineException {
        // For compatibility reason do not include domain and host in type 1 message
        //return new Type1Message(domain, host).getResponse();
        return TYPE_1_MESSAGE.getResponse();
    }

String getResponse()内部,我看不到任何地方设置了该标志。

从装有IE的Windows计算机中,如果我执行请求,则在Wireshark中看到具有相同代理集的FLAG_REQUEST_TARGET集,并且在协商之后最终使用NTLMv2。

那么,有没有办法让我使用HTTPClient 4.5设置此标志?

1 个答案:

答案 0 :(得分:0)

我参加了JCIFS。

尽管我也有NTLEngineImpl的包装器,所以实现NTLEngine我只需要覆盖TYPE1消息(并从真实的Imp中获取代码,但在其中添加了新的标志)。

无论如何,如上所述,我最终去了另一个图书馆。