2017-07-25 6 views
1

Ich versuche, mit SFTP eine Verbindung zu einem Kennwort weniger konfigurierten Server herzustellen. Sftp Verbindung ist erfolgreich mit Terminal. Aber wenn ich in JAVA (mit Jsch-Bibliothek) über Benutzername und Passwort verbinden, kann ich keine Verbindung herstellen. Mein Java-Code: -SFTP-Verbindung fehlgeschlagen aufgrund von java.security.InvalidAlgorithmParameterException

try { 
     try { 
      jsch.addIdentity(ftp_Info.getSftpCertFile()); 
     } catch (Exception e) { 
      // TODO: Add a log message 
     } 
     session = jsch.getSession(ftp_Info.getUserName(), ftp_Info.getHost(), ftp_Info.getPort()); 
     String pswd = (password_encypted) // password encryption 
     session.setPassword(pswd); 
     session.setConfig("StrictHostKeyChecking", "no"); 
     session.setConfig("PreferredAuthentications", "password,hostbased,publickey"); 
     session.connect(); // exception occurred here 
     session.setTimeout(connectionTimeOut); 
     Channel channel = session.openChannel(SFTP); 
     channel.connect(); 
     sftpChannel = (ChannelSftp) channel; 

    } catch (Exception e) { 
     log.error(e.getMessage(), e);//error logged here 
    } 

ich folgende Ausnahme erhalten: -

com.jcraft.jsch.JSchException: Session.connect: java.security.InvalidAlgorithmParameterException: Prime size must be multiple of 64, and can only range from 512 to 1024 (inclusive) at com.jcraft.jsch.Session.connect(Session.java:485) at com.jcraft.jsch.Session.connect(Session.java:149)

helfen Bitte bei der Fehlersuche oder es zu lösen. Gibt es irgendeine Möglichkeit außer einem Drittanbieter-Dienstanbieter, meinen 2048-Bit-Schlüssel diese Ausnahme passieren zu lassen?

+0

Ich vermute, dass dies ein Problem mit Ihrer Crypto Suite ist. Sie werden wahrscheinlich den BouncyCastle-Provider verwenden wollen. Was JDK verwendest du? –

+0

Ich benutze jdk 1.7 –

Antwort

0

Unter 1.7 nehme ich an, dass Sie Maven für Ihr Projekt verwenden. Ich würde die Bouncycastle-Abhängigkeit zu deinem Pom hinzufügen.

<dependency> 
    <groupId>org.bouncycastle</groupId> 
    <artifactId>bcprov-jdk16</artifactId> 
    <version>1.45</version> 
</dependency> 

mit jdk funktionieren 7.

Dann eine einzige Zeile Code hinzufügen, um die BouncyCastle Provider als erster Anbieter hinzufügen Dies sollte.

Security.insertProviderAt(new BouncyCastleProvider(),1); 

würde ich das vor Ihrem getSftpCertFile() -Aufruf und vor jedem SSL-bezogenen Code platzieren. Wenn Sie Maven nicht benutzen oder eine andere Infrastruktur haben, lassen Sie es mich bitte wissen. Sie könnten den Sicherheitsprovider auf JRE-Ebene konfigurieren, aber ich würde es immer vorziehen, auf Projektebene zu konfigurieren, wenn möglich, um andere Projekte nicht zu beeinträchtigen.

+0

Meine Schlüsselgröße ist 2048 Bit, und ich denke das ist der Grund, warum ich die Ausnahme bekomme. Will jdk1.8 wird es funktionieren oder bountyCastleProvider. Wenn jdk1.8 funktioniert, wird das machbarer. –

+0

Das Problem mit der JCE, die eine künstliche Beschränkung auf die Diffie-Hellman-Primzahlen (JDK-651495) auferlegt, hätte in JDK8u56 angesprochen werden müssen. Solange Sie ein JDK8u56 oder höher verwenden, sollte dies das Problem beheben. –

+0

Danke für Ihre Hilfe @ M.Rizzo –

Verwandte Themen