2017-07-25 325 views
1

我想連接到使用SFTP的密碼較少配置的服務器。 使用終端,Sftp連接成功。 但是,當我通過用戶名和密碼連接到JAVA(使用Jsch庫)時,我無法連接。 我的Java代碼: -SFTP連接失敗,由於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 
    } 

我得到以下異常: -

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)

請在故障排除或解決它幫助。 除了任何第三方服務提供商使我的2048位密鑰傳遞此異常之外,有什麼方法嗎?

+0

我懷疑這是你的加密套件的問題。您可能要切換到使用BouncyCastle提供程序。你在用什麼JDK? –

+0

我正在使用jdk 1.7 –

回答

0

1.7以下,我會假設你正在爲你的項目使用maven。我會添加bouncycastle依賴到你的pom。

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

這應該很好地工作JDK 7

然後添加一行代碼到BouncyCastle的供應商添加爲第一供應商。

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

我會在你的getSftpCertFile()調用之前和任何與SSL相關的代碼之前放置它。如果您沒有使用Maven或有不同的基礎架構,請告訴我。您可以在JRE級別配置安全提供程序,但如果可能的話,我總是希望在項目級別進行配置,以不影響其他項目。

+0

我的密鑰大小是2048位,我認爲這就是我得到異常的原因。請問jdk1.8會使它工作還是bountyCastleProvider。如果jdk1.8會比這更可行。 –

+0

JCE對Diffie-Hellman素數(JDK-651495)施加了人爲限制的問題本應在JDK8u56中解決。所以只要你使用JDK8u56或更高版本,這應該解決這個問題。 –

+0

感謝您的幫助@ M.Rizzo –