Search code examples
javasshjschjaas

JSch exception: No Configuration was registered named com.sun.security.jgss.krb5.initiate


I'm running this code, but get an exception.

Session session = null;  
Channel channel = null;  

JSch jsch = new JSch();  
session = jsch.getSession(ftpUserName, ftpHost, ftpPort);  
if (session == null) {  
    throw new Exception("session is null");  
}  
session.setPassword(ftpPassword);  
session.setTimeout(100000);  
session.setConfig("StrictHostKeyChecking", "no");  
session.connect();  

This code is working properly in the local development environment. However, when deployed in the test environment reported abnormal. Test environment for the linux environment, the deployment of middleware for the weblogic11, the use of jdk are oracle 1.6.45.

Exception:
java.lang.IllegalArgumentException: No Configuration was registered that can handle the configuration named com.sun.security.jgss.krb5.initiate
at com.bea.common.security.jdkutils.JAASConfiguration.getAppConfigurationEntry(JAASConfiguration.java:130)
at sun.security.jgss.LoginConfigImpl.getAppConfigurationEntry(LoginConfigImpl.java:139)
at javax.security.auth.login.LoginContext.init(LoginContext.java:243)
at javax.security.auth.login.LoginContext.<init>(LoginContext.java:499)
at sun.security.jgss.GSSUtil.login(GSSUtil.java:244)
at sun.security.jgss.krb5.Krb5Util.getTicket(Krb5Util.java:136)
at sun.security.jgss.krb5.Krb5InitCredential$1.run(Krb5InitCredential.java:328)
at java.security.AccessController.doPrivileged(Native Method)
at sun.security.jgss.krb5.Krb5InitCredential.getTgt(Krb5InitCredential.java:325)
at sun.security.jgss.krb5.Krb5InitCredential.getInstance(Krb5InitCredential.java:128)
at sun.security.jgss.krb5.Krb5MechFactory.getCredentialElement(Krb5MechFactory.java:106)
at sun.security.jgss.krb5.Krb5MechFactory.getMechanismContext(Krb5MechFactory.java:172)
at sun.security.jgss.GSSManagerImpl.getMechanismContext(GSSManagerImpl.java:209)
at sun.security.jgss.GSSContextImpl.initSecContext(GSSContextImpl.java:195)
at sun.security.jgss.GSSContextImpl.initSecContext(GSSContextImpl.java:162)
at com.jcraft.jsch.jgss.GSSContextKrb5.init(GSSContextKrb5.java:129)
at com.jcraft.jsch.UserAuthGSSAPIWithMIC.start(UserAuthGSSAPIWithMIC.java:135)
at com.jcraft.jsch.Session.connect(Session.java:470)
at com.jcraft.jsch.Session.connect(Session.java:183)
at com.sinosoft.FXQ.util.SftpUtils.downloadSftpFile(SftpUtils.java:57)
at com.sinosoft.FXQ.blackList.action.BLBlackListAction.extractBlackList(BLBlackListAction.java:47)
at com.sinosoft.FXQ.task.DownBlackListDataTask.run(DownBlackListDataTask.java:93)
at java.util.TimerThread.mainLoop(Timer.java:512)
at java.util.TimerThread.run(Timer.java:462)

Solution

  • As @Chris already answered, JSch tries by default Kerberos/GSSAPI authentication.

    As you do not seem to want that, remove Kerberos/GSSAPI (gssapi-with-mic) from the the default JSch list of authentication methods (gssapi-with-mic,publickey,keyboard-interactive,password):

    session.setConfig("PreferredAuthentications", "publickey,keyboard-interactive,password");