2014-01-08 31 views
8

ich einige Probleme mit Kerberos-Authentifizierung mit Dateiverwaltung mit jCIFS (Kerberos-Erweiterung Version 1.3.17)KrbException "Message Stream-Modified (41)", wenn zu SMB-Freigabe Verbinden mit Kerberos

Dies ist mein aktueller auszuführen Konfiguration von krb5.conf:

und das ist der Code den Benutzer authentifiziert und dann eine Datei auf einem Datei-Server im Netzwerk zu finden versuchen:

public static void main (String[] args) throws Exception { 
    Subject subject = new Subject(); 
    System.setProperty("java.security.krb5.conf", "C:/krb5.conf"); 
    System.setProperty("sun.security.krb5.debug", "true"); 

    Map<String, Object> state = new HashMap<String, Object>(); 
    state.put("javax.security.auth.login.name", "USERNAME"); 
    state.put("javax.security.auth.login.password", "PASSWORD".toCharArray()); 

    Map<String, Object> options = new HashMap<String, Object>(); 
    options.put("debug", "true"); 
    options.put("useFirstPass", "true"); 

    Krb5LoginModule login = new Krb5LoginModule(); 
    login.initialize(subject, null, state, options); 

    if (login.login()) { 
     login.commit(); 
    } 

    String path = "file://HOST/242269/"; // existing file server folder 
    Kerb5Authenticator kerberosAuthenticator = new Kerb5Authenticator(subject); 

    SmbFile smbFile = new SmbFile(path, kerberosAuthenticator); 
    SmbFile[] files = smbFile.listFiles(); 

    for (SmbFile file : files) { 
     System.out.println(file); 
    } 
} 

Wenn ich nun diesen Code ausführe, wird der Benutzer mit diesen Zugangsdaten authentifiziert (wenn ich die Zugangsdaten ändere, die Authentifizierung schlägt fehl) und er erstellt ein Ticket für diesen Benutzer. Als ich später versuchen, den Inhalt eines Dateiverzeichnis über CIFS abzurufen, es gibt mir die folgende Fehlermeldung:

GSSException: No valid credentials provided (Mechanism level: Message stream modified (41)) 
at sun.security.jgss.krb5.Krb5Context.initSecContext(Unknown Source) 
at sun.security.jgss.GSSContextImpl.initSecContext(Unknown Source) 
at sun.security.jgss.GSSContextImpl.initSecContext(Unknown Source) 
at jcifs.smb.SpnegoContext.initSecContext(SpnegoContext.java:80) 
at jcifs.smb.Kerb5Authenticator.setup(Kerb5Authenticator.java:196) 
at jcifs.smb.Kerb5Authenticator.access$000(Kerb5Authenticator.java:30) 
at jcifs.smb.Kerb5Authenticator$1.run(Kerb5Authenticator.java:168) 
at java.security.AccessController.doPrivileged(Native Method) 
at javax.security.auth.Subject.doAs(Unknown Source) 
at jcifs.smb.Kerb5Authenticator.sessionSetup(Kerb5Authenticator.java:166) 
at jcifs.smb.SmbSession.sessionSetup(SmbSession.java:320) 
at jcifs.smb.SmbSession.send(SmbSession.java:239) 
at jcifs.smb.SmbTree.treeConnect(SmbTree.java:176) 
at jcifs.smb.SmbFile.doConnect(SmbFile.java:925) 
at jcifs.smb.SmbFile.connect(SmbFile.java:974) 
at jcifs.smb.SmbFile.connect0(SmbFile.java:890) 
at jcifs.smb.SmbFile.resolveDfs(SmbFile.java:669) 
at jcifs.smb.SmbFile.send(SmbFile.java:783) 
at jcifs.smb.SmbFile.doFindFirstNext(SmbFile.java:2009) 
at jcifs.smb.SmbFile.doEnum(SmbFile.java:1758) 
at jcifs.smb.SmbFile.listFiles(SmbFile.java:1735) 
at jcifs.smb.SmbFile.listFiles(SmbFile.java:1668) 

Sie können die komplette Fehlerprotokoll here finden (einige Details verschleiert)

Could jemand bitte bring mich in die richtige Richtung, was ich hier falsch mache?

+0

Weitere (nützlich?) Kommentar: Dieses Benutzerkonto haben keinen Zugriff auf die Wurzel des File-Server, nur für diesen spezifischen Unterordner. Ich weiß nicht, ob das relevant ist. –

+0

Versuchen Sie, Ihre krb5.conf- und login.conf-Dateien im lib-Ordner Ihres Tomcat zu speichern und versuchen Sie es erneut. – vel

Antwort

7

Großbuchstaben des Realms ist sehr wichtig, um "Exception: krb_error 41 Message stream modified (41)" zu vermeiden.

Siehehttp://sourceforge.net/p/spnego/discussion/1003769/thread/99b3ff67/

+3

Könnten Sie in Ihrer Antwort bitte genauer sein und (vorzugsweise mit Code) adressieren, wie Ihr Vorschlag dem Fragesteller helfen könnte? Erklär es bitte ein bisschen mehr. Ich (als Leser) finde es schwierig zu verstehen, wie deine Antwort eine Lösung ist. Das Posten eines Links ist meiner Meinung nach eher als Kommentar geeignet. – kkuilla

+0

@Yahya danke es hat mir sehr geholfen –