Kerberos를 사용하기 위해 협상 경영법을 얻는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/1499267

  •  19-09-2019
  •  | 
  •  

문제

물어 본 후 이 질문, 나는 Java 서버에 대해 Windows 클라이언트를 인증하기 위해 협상장을 사용하려고 노력했습니다. Java는 훌륭한 NTLM 라이브러리 지원을 가지고 있지 않은 것 같습니다. 그래서 저는 Kerberos를 사용해야한다고 가정했습니다.

문제는 협상 심장이 매번 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>

내가 뭔가 잘못하고 있거나이 물건을 완전히 오해하고 있습니까? :)

도움이 되었습니까?

해결책

SPN 이름의 전체 구문은입니다 <service>/<user>@DOMAIN; 분명히 도메인 이름을 생략 할 수 있습니다. 그러나 사용자 이름이있는 경우 my-pc-name.domain-name, 당신은 그것을 더 짧게하지 말아야합니다 - SPN을 정확하게 제공하십시오. spn -L 당신에게 나열합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top