如何获得NegotiateStream使用Kerberos?(How to get Negotiat

2019-08-17 01:52发布

经过询问这个问题 ,我一直在尝试使用NegotiateStream反对Java服务器进行身份验证Windows客户端。 看来,Java没有很大的NTLM库的支持,所以我一直在努力,我不得不使用Kerberos,其中的Java似乎支持更好的(通过GSS-API)的假设。

问题是,NegotiateStream似乎在尝试使用NTLM每次。 该文件表明,它既可以使用,但不指定如何选择。 我看不到的API来控制它选择哪种机制在任何选项。 有没有办法?

我有自己的服务主体名称和我的客户端代码如下所示:

string spn = "<service-name>/<my-pc-name>"
TcpClient client = new TcpClient(server, port);
NetworkStream stream = client.GetStream();
NegotiateStream neg = new NegotiateStream(stream, true);
neg.AuthenticateAsClient(CredentialCache.DefaultNetworkCredentials, spn);

在服务器端,收到的第一个字节集是22,1,0,0,59,然后“NTLMSSP” - 这是我没想到。

我已经尝试了几种不同格式的字符串SPN,不知道正确的格式是那里。 我最初创建SPN与

setspn -A <service-name>/<my-pc-name>.<domain-name> <my-user-name>

SETSPN -L成功将其列为:

TEST/<my-pc-name>.<domain-name>

我是不是做错了什么,或者完全误解这个东西? :)

Answer 1:

对于一个SPN名称完整的语法<service>/<user>@DOMAIN ; 显然,这是可以省略域名。 但是,如果用户名是my-pc-name.domain-name ,那么你不应该进一步缩短它-这正是提供SPN的spn -L它列出了你。



文章来源: How to get NegotiateStream to use Kerberos?