SMBJ 验证器支持哪个 NTLM 版本(1 或 2)?

Which NTLM version (1 or 2) does SMBJ authenticator support?

我正在开发需要使用 SMB 访问网络共享的应用程序。有人告诉我,如果安全检测到使用 NTLM v.1 的身份验证尝试,那么相应的防火墙规则将被撤销。

因此我需要确保 SMBJ(我可能会为此使用它)支持 NTLM v.2 并默认使用它。

SMBJ 是否支持 NTLM v.2?它默认使用它吗?

我自己的尝试

在 SMBJ 的 source code 中,我发现了以下片段:

byte[] serverChallenge = challenge.getServerChallenge();
byte[] responseKeyNT = ntlmFunctions.NTOWFv2(String.valueOf(context.getPassword()), context.getUsername(), context.getDomain());
byte[] ntlmv2ClientChallenge = ntlmFunctions.(challenge.getTargetInfo());
byte[] ntlmv2Response = ntlmFunctions.getNTLMv2Response(responseKeyNT, serverChallenge, ntlmv2ClientChallenge);

名称 getNTLMv2ClientChallengegetNTLMv2Response 表明可以使用 NTLM v.2。

此外,JCIFS 主页 claims SMBJ 是一个后续项目:

Fortunately there are multiple new open source SMB Java projects to try including the following:

jcifs-codelibs jcifs-ng smbj

根据其FAQ,JCIFS 自 1.3.0 版本以来一直使用 NTLM v.2。

如果

  1. JCIFS 支持 NTLM v.2 并默认使用它,
  2. SMBJ 基于 JCIFS,

那么 SMBJ 应该支持 NTLM v.2 并默认使用它。

是的,SMBJ 使用 NTLMv2 或 SPNEGO 进行身份验证。您可以配置要使用的一个。它不使用 NTLMv1。