Kerberos / SPNEGO serverseitige Authänderung in Java8

9

Ich versuche, eine Anwendung von java7u51 zu java8u40 zu ändern, aber die SSO-Authentifizierung schlägt fehl. Der Client hat sich nicht geändert, er verwendet JNA-Windows-Aufrufe ( Secur32.INSTANCE.InitializeSecurityContext ), aber der Server akzeptiert das Ticket nicht mehr. Der Servercode hat sich nicht geändert, aber er verwendet die Standard-Java-Bibliotheken, die sich anscheinend geändert haben. Der Server läuft unter Linux.

Der Servercode ist unten. Auf meiner Windows-Maschine schreibe ich eine Datei, die das Ticket enthält, damit ich den folgenden Code zum Testen ausführen kann. Ich habe ein sehr hohes Uhrenskigebot, damit ich gegen das Ticket testen kann. Ich habe das Client-Ticket mit java7u51 geschrieben, nur für den Fall, aber das hat nicht geholfen. Das gleiche Ticket funktioniert einwandfrei, wenn ich den folgenden Server-Code in java7 ausführe.

Das Bit, das fehlschlägt, ist, dass isEstablished false zurückgibt. Es gibt keine hilfreiche Debug-Informationen. isEstablished gibt false zurück, das bedeutet, dass mehr Runden benötigt werden, aber das war nicht der Fall, und ich denke nicht, dass es so sein sollte.

Weiß jemand einen Grund, dass dies jetzt in Java8 fehlschlagen würde? Es ist nicht nur ein Update 40 Problem, es schlägt mit früheren Versionen von Java 8 fehl.

Danke

%Vor%

Update: Falls das hilft. Ich denke, der Client sendet ein SPNEGO-Ticket, denn wenn ich versuche, den Kontext zu zwingen, nur Kerberos (1.2.840.113554.1.2.2) zu akzeptieren, erhalte ich den Fehler failed: No credential found for: 1.3.6.1.5.5.2 usage: Accept

Update 2: Dies ist nicht wirklich die Antwort, aber wenn ich die Art, wie der Windows-Client das Ticket erstellt, funktioniert es. Wenn Sie also anstelle eines SPNEGO-Wrapped-Tickets ein Kerberos-Only-Ticket erstellen, wird es von Java8 akzeptiert. Das Ändern von "Negotiate" zu "Kerberos" unten behebt das Problem.

%Vor%     
Dave 06.03.2015, 12:00
quelle

1 Antwort

1

Kerberos / SPNEGO ist eine Abfall-Domain ..

Was mir in den Sinn kommt, unten eine kurze Checkliste, die hoffentlich helfen wird.

  1. Haben Sie Ihre Keytab regeneriert? mit dem same JDK, das Sie auf der Serverseite verwenden?
  2. Wird Ihr Server unter dem richtigen Benutzer ausgeführt (wie in Ihrem Schlüsselregister definiert)?
  3. Haben Sie sie generiert und wählen Sie die Option "nie ablaufen"?
  4. Benötigen Sie 256-Bit-Verschlüsselung? Kann gesehen werden (Schlüsseltyp 18 = AES-256):

    % JAVA_HOME% \ bin \ klist -e -f -a -k XX.keytab

    Wenn ja, haben Sie die unbeschränkten Richtliniendateien local_policy.jar US_export_policy.jar unter% JAVA_HOME% \ jre \ lib \ security? Stellen Sie sicher, dass der KVNO-Wert in der Liste, die Sie erhalten, derselbe ist. Im Idealfall sollten Sie nur eine Ausgabe sehen.

  5. Ist Ihr SPN pingfähig?

  6. Ist Ihre KDC-Serverliste korrekt?
  7. Achten Sie auf die krb5.conf. Habe ein Problem mit. Es scheint sogar in der Windows-Umgebung die Groß- und Kleinschreibung zu beachten.

Kerberos kann schwierig einzurichten sein. Also viel Glück.

    
Hey StackExchange 06.10.2015 12:58
quelle

Tags und Links