java - SFTP 连接器 DH key 错误

标签 java mule sftp jsch

我正在 Anypoint Studio 中创建一个简单的 Mule 流程 - 它定期轮询目录,当文件放置在目录中时,它会将其发送到 SFTP 服务器。但是,当应用程序开始与服务器协商安全连接时,它会失败并出现以下错误:

java.io.IOException: Error during login to username@host: Session.connect: java.security.InvalidAlgorithmParameterException: DH key size must be multiple of 64, and can only range from 512 to 8192 (inclusive). The specific key size 2047 is not supported

堆栈跟踪引用了 jsch 库中的多个文件。前面问题中的解决方案建议升级到 Java 8、使用不同版本的 jsch 或自行编辑 jsch jar。我的 Mule 服务器(版本 3.9.0 EE)已经在 J​​ava 8 上,我尝试了几个不同版本的 jsch,编辑 jar 是不切实际的,因为这个应用程序将部署到几个不同的环境。

我能够使用与应用程序相同的凭据通过 WinSCP 登录到 sftp 服务器。一位同事尝试修改工作流程以使用相同的凭据来移动相同的文件,但他们遇到了相同的错误。这是我的流程的 XML:

<flow name="ClCoFlow">
        <file:inbound-endpoint path="${file.from}"
            moveToDirectory="${file.backup}" responseTimeout="10000"
            doc:name="Get File to Transfer" />
        <logger
            message="#[flowVars.originalFilename] being moved to #[flowVars.moveToDirectory]"
            level="INFO" doc:name="File In" />
        <sftp:outbound-endpoint exchange-pattern="one-way"
            host="${sftp.host}" port="${sftp.port}" path="${sftp.path}" user="${sftp.user}"
            password="${sftp.password}" responseTimeout="10000" doc:name="SFTP" />
        <logger message="#[flowVars.originalFilename] sent to sftp service"
            level="INFO" doc:name="File sent" />
    </flow>

预先感谢您提供的任何帮助

编辑

虽然 Mule 是基于 Java 构建的,并且 Mule 应用程序是使用 Java 和 Spring 在幕后构建的,但创建 Mule 流程时不需要编写实际的 Java 代码。

最佳答案

更改提供商似乎是解决问题的方法。不幸的是,Mule 连接器无法做到这一点,因此我们必须用纯 Java 重新编写 sftp 连接器。下载 bouncycaSTLe .jar 后,将它们放入 src/main/app/lib 中,然后将它们添加到构建路径中。您应该能够导入它们(由于某种原因我必须导入 org.python.bouncycaSTLe.jce.provider 而不是 org.bouncycaSTLe.jce.provider)。在我的代码顶部我放置了:

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

当流程运行时,dh key 已正确协商并且不会引发任何错误。

关于java - SFTP 连接器 DH key 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50935279/

相关文章:

Java - 从 .dat 文件中获取某些信息并将其放入 .idx 文件中

java - 用java管理文件读、保存、写

java - 读取包含键值对的文件内容,无需正常解析

java - 使用 JSch 时重命名命令不起作用

java - 如何在数组列表中打印字符串值而不打印空值?

JavaFX 使用 FXML 文件构建 borderPane

java - Mule中如何动态插入json数据到数据库中

java - 禁止 Mule ESB 阻止某些请求

python - 使用私钥连接到服务器时出现pysftp AuthenticationException

perl - 为什么 Net::SSH2::File 只允许写入 32500 字节?