2 Stimmen

Unterschiede in der Java HTTP NTLM-Implementierung

Diese Link Details zu den verschiedenen http-Client-Java-Implementierungen. Ich bin auf der Suche nach Links, die Informationen über ihre NTLM-Protokoll-Implementierung Unterschiede bieten könnte.

Auf einem der Windows-Rechner habe ich festgestellt, dass die commons-http client 3.1-Implementierung mit einem Autorisierungsfehler (http-Statuscode 401) fehlschlägt, während die Java 1.5-Implementierung erfolgreich ist. Da die Java 1.5-Implementierung des NTLM-Authentifizierungsprotokolls nicht quelloffen ist, kann ich die beiden Implementierungen nicht vergleichen, um herauszufinden, was falsch laufen könnte.

Aktualisierung 1

Ich bin mir der Tatsache bewusst, dass der commons http-Client kein NTLM v2 unterstützt. Link bietet einen Vergleich zwischen verschiedenen Java-Http-Client-Implementierungen und erwähnt, dass der Apache-Http-Client eine teilweise Implementierung des NTLM-Protokolls. Sie enthält keine weiteren Einzelheiten.

Bei der weiteren Problembehandlung stellte ich außerdem fest, dass die NTLM-Implementierung von dieser Link in Verbindung mit HTTPClient funktioniert auf dem Windows-Rechner (die commons http-Client-Implementierung funktioniert nicht, wie ich oben erwähnt habe).

Aktualisierung 2

Durch das Schnüffeln von Paketen (mit Wireshack) habe ich festgestellt, dass die commons http client 3.1 ntlm-Protokoll-Implementierung nicht die NTLM-Antwort in der Typ-3-Nachricht erzeugt. Diese wird von der JDK-Implementierung erzeugt. Kennen Sie eine Server-/Client-Einstellung, die darauf hinweist, dass die Authentifizierung fehlschlägt, wenn die NTLM-Antwortdaten leer sind? (da der Authentifizierungsfehler, mit dem wir konfrontiert sind, nur auf einem Rechner reproduzierbar ist. Die Authentifizierung gelingt sonst überall).

1voto

Edward Thomson Punkte 69902

Commons httpclient 3.1 implementiert nicht NTLMv2, sondern nur die ältere NTLM-Spezifikation (auch bekannt als NTLMv1).

1voto

Andy Dufresne Punkte 5710

Wir haben die Hauptursache für dieses Problem gefunden. Die Konfigurationseinstellung, die zu dem Authentifizierungsfehler führte, wurde von einer Sicherheitsrichtlinie namens NoLMHashPolicy gesteuert. Die Aktivierung dieser Richtlinie bedeutet, dass der Windows-Server den LM-Hash-Wert nicht mehr für jedes Kennwort speichert, sondern den NT-Response-Hash für die Authentifizierung verwendet. Da die NTLM-Protokollimplementierung der commons http client 3.1-Bibliothek die NT-Antwort überhaupt nicht berechnet, kann es zu diesem Fehler kommen, wenn diese Einstellung aktiviert ist. Weitere Einzelheiten zu dieser Einstellung finden Sie unter aquí .

Als Lösung könnte man einfach eine Implementierung der AuthScheme-Schnittstelle hinzufügen und den Code aus höheren Versionen der Commons http-Client-Bibliothek (z.B. 4.1.2) extrahieren, der die NT-Antwort in der Typ-3-Nachricht berechnet. Vergessen Sie nicht, die Länge und die Offset-Werte für die NT Response Felder zu aktualisieren. Sobald die Implementierung der AuthScheme Schnittstelle fertig ist, kann sie mit der AuthPolicy.registeryScheme() Methode injiziert werden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X