2017-12-15 4 views
0

FTPサーバーは、より良いセキュリティのために移行を行っています(詳しくはわかりません)。sftpに接続できません:com.jcraft.jsch.JSchException:アルゴリズムのネゴシエーションに失敗しました

アップグレード後、サーバーからファイルをダウンロード/アップロードすることはできません。アップグレード前にうまくいきました。エラーログは言う:

ns0:ClientCould not connect to FTP Server. http://schemas.cordys.com/ftpconnector/1.1Cordys.FTPConnector.Messages.ftpserverConnectionFailedcom.eibus.applicationconnector.ftp.FTPException : Algorithm negotiation fail

at com.eibus.applicationconnector.ftp.CordysSFTPClient.connect(CordysSFTPClient.java:78) at com.eibus.applicationconnector.ftp.FTPCommand.connect(FTPCommand.java:86) at com.eibus.applicationconnector.ftp.FTPTransaction.process(FTPTransaction.java:109) at com.eibus.soap.SOAPTransaction.handleBodyBlock(SOAPTransaction.java:1340) at com.eibus.soap.SOAPTransaction.(SOAPTransaction.java:546) at com.eibus.soap.SOAPTransaction.(SOAPTransaction.java:195) at com.eibus.soap.Processor.onReceive(Processor.java:1024) at com.eibus.soap.Processor.onReceive(Processor.java:997) at com.eibus.connector.nom.Connector.onReceive(Connector.java:483) at com.eibus.transport.NonTransactionalWorkerThreadBody.doWork(NonTransactionalWorkerThreadBody.java:61) at com.eibus.transport.NonTransactionalWorkerThreadBody.run(NonTransactionalWorkerThreadBody.java:26) at com.eibus.util.threadpool.WorkerThread.run(WorkerThread.java:67) Caused by: com.jcraft.jsch.JSchException: Algorithm negotiation fail at com.jcraft.jsch.Session.receive_kexinit(Session.java:520) at com.jcraft.jsch.Session.connect(Session.java:286) at com.jcraft.jsch.Session.connect(Session.java:150) at com.eibus.applicationconnector.ftp.CordysSFTPClient.connectOnce(CordysSFTPClient.java:124) at com.eibus.applicationconnector.ftp.CordysSFTPClient.connect(CordysSFTPClient.java:64) ... 11 more

使用JSCH jarファイルのバージョンは次のとおりです。使用JSCH-0.1.41.jar Javaのバージョンです:

  1. は我々にはないことを1.7.0_40

    注意FTPサーバーを所有しており、そこの設定を変更することはできません。

  2. Javaのバージョンをアップグレードすると、Googleでいくつかの時間を過ごした後オプション

試行1 ではないですが、私はJSCHジャーバージョンをアップグレードすることは役立つかもしれないことを理解。そこで私は最新のjsch jarを使いました。これはjsch-0.1.54.jarです。

com.eibus.applicationconnector.ftp.FTPException: Session.connect: java.security.InvalidAlgorithmParameterException: Prime size must be multiple of 64, and can only range from 512 to 1024 (inclusive) at com.eibus.applicationconnector.ftp.CordysSFTPClient.connect(CordysSFTPClient.java:78) at com.eibus.applicationconnector.ftp.FTPCommand.connect(FTPCommand.java:86) at com.eibus.applicationconnector.ftp.FTPTransaction.process(FTPTransaction.java:109) at com.eibus.soap.SOAPTransaction.handleBodyBlock(SOAPTransaction.java:1340) at com.eibus.soap.SOAPTransaction.(SOAPTransaction.java:546) at com.eibus.soap.SOAPTransaction.(SOAPTransaction.java:195) at com.eibus.soap.Processor.onReceive(Processor.java:1024) at com.eibus.soap.Processor.onReceive(Processor.java:997) at com.eibus.connector.nom.Connector.onReceive(Connector.java:483) at com.eibus.transport.NonTransactionalWorkerThreadBody.doWork(NonTransactionalWorkerThreadBody.java:61) at com.eibus.transport.NonTransactionalWorkerThreadBody.run(NonTransactionalWorkerThreadBody.java:26) at com.eibus.util.threadpool.WorkerThread.run(WorkerThread.java:67) Caused by: 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:565) at com.jcraft.jsch.Session.connect(Session.java:183) at com.eibus.applicationconnector.ftp.CordysSFTPClient.connectOnce(CordysSFTPClient.java:124) at com.eibus.applicationconnector.ftp.CordysSFTPClient.connect(CordysSFTPClient.java:64) ... 11 more

試験2:インストール済み無制限強度の管轄ポリシーファイル(www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.htmlこの後、私は次のエラーを取得し始めました)、これも役に立たなかった。同じエラーが発生しました

すべてのポインタが役に立ちます。ここで

は、私は、FTPに接続するために使用していたコードの一部です:

private void connectOnce(FTPConfiguration ftpConfiguration) throws JSchException { 
    JSch jsch = new JSch(); 
    this.session = jsch.getSession(ftpConfiguration.getUsername(), ftpConfiguration.getServer(), ftpConfiguration.getPort()); 
    this.session.setPassword(ftpConfiguration.getPassword()); 

    Properties config = new Properties(); 
    config.put("StrictHostKeyChecking", "no"); 
    this.session.setConfig(config); 

    if (logger.isDebugEnabled()) { 
     logger.debug("Opening SFTP connection to " + ftpConfiguration.getServer()); 
    } 
    this.session.connect(); 
} 
+0

あなたは 'session.setClientVersion( "SSH-2.0-OpenSSH_2.5.3")'へのクライアントバージョンを設定することができますか?前回、この問題を解決するのに役立ちました。 – Apolozeus

+0

「アルゴリズムのネゴシエーションが失敗しました」(実際には重複する質問)を解決したので、その部分を削除してください。ちょうどその質問が混乱します。それに応じて質問のタイトルを更新してください! +投稿[JSchログファイル](https://stackoverflow.com/q/47411185/850848)。 –

+0

私は古いjsch瓶でも解決策が見つかるかもしれないと思っています。それが理由です。 裁判で、私は私の調査に関するさらなる情報を提供したがっています。 –

答えて

1

私は解決策を見つけたと思います。

解決策は、jschソースコードを変更することです。 (最新バージョン1.0.54)。私はいくつかの調査を行い、最終的にjschに "Bouncy Castle"セキュリティプロバイダを使用させることができました。

  • com.jcraft.jsch.jce.KeyPairGenDSA
  • com.jcraft.jsch.jce.KeyPairGenECDSA
  • com.jcraft.jsch:これはJSCHライブラリ内のクラスを以下のソースコードを変更関与しました。 jce.KeyPairGenRSA
  • com.jcraft.jsch.jce.DH

私はそれをするKeyGeneratorのgeInstanceにしようとしていたときは、次の引数を追加しました。

KeyPairGenerator.getInstance("DSA","BC"); 

はこの記事からいくつかのアイデアを得た( I've put security.provider.1=org.bouncycastle.jce.provider.BouncyCastleProvider but it isn't being used during SSL handshake

関連する問題