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?
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. –
Versuchen Sie, Ihre krb5.conf- und login.conf-Dateien im lib-Ordner Ihres Tomcat zu speichern und versuchen Sie es erneut. – vel