2016-07-14 29 views
2

Ich benutze Apache HTTP-Client für Kerberos-Authentifizierung. Ich habe folgendes Problem: zwischen den 401 ad 200 Antworten vom Server dauert es zwischen 90 und 300 Sekunden, je nach Anforderung.Apache Http Client 4.5.2 Kerberos-Authentifizierung dauert zu lange

Ich habe versucht, die Verbindung Timeout, Socket-Timeout und Verbindungs-Manager-Timeout ohne Ergebnis zu setzen.

Wireshark sagt mir folgende:

nach 401 Antwort vom Server:

client -> ACK 
server -> FIN, ACK 
client -> ACK 

-- break between 90 to 300 seconds -- 

client -> GET url 
server -> RST 

von hier aus startet die 200-Antwort, alles ok. Ich verstehe nicht, warum Apache http Client die Verbindung nicht schließt und eine neue öffnet, warum es so lange dauert?

Jede Hilfe wäre zu schätzen.

Update: Es gibt mehr KDC-Server und nicht jeder ist verfügbar, der Grund für die Verzögerung ist die max_retries 3 und 30 Sekunden pro Anfrage Timeout. versucht ich krb5.conf Datei zu konfigurieren, aber es scheint, dass Kerberos dies nicht berücksichtigen:

[libdefaults] 
... 
kdc_timeout = 2000 
max_retries = 1 
+0

Ein Muss-lesen: https://stevelogran.gitbooks.io/kerberos_and_hadoop/content/sections/errors.html >> wilde Vermutung: Ihr Problem könnte mit UDP-Verbindungen im Zusammenhang mit dem KDC nicht in Verbindung stehen, versuchen Sie stattdessen TCP. .. –

Antwort

1

I aktiviert die Kerberos-Logging (Umleitung System.out und System.err in eine Datei) haben - und stelle fest, dass nicht alle KDCs auf meinen Client reagieren, daher verzögerten die nicht antwortenden die Antwort mit 30 Sekunden. x 3 Versuche = 90 Sekunden pro nicht reagierendes KDC.

, indem in der Konfigurationsdatei gelöst:

max_retries = 1 kdc_timeout = 1500 (milliseconds)

Update: der Pfad zur Datei Kerberos config in URI-Format war, was nicht funktioniert hat, so dass ich den absoluten Pfad.