SFTP连接器DH密钥错误

劳切

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

java.io.IOException:登录到username @ host时出错:Session.connect:java.security.InvalidAlgorithmParameterException:DH密钥大小必须是64的倍数,并且只能在512到8192(含)范围内。不支持特定的密钥大小2047

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

我可以通过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 .jars之后,将它们放在src / main / app / lib中,然后将它们添加到构建路径中。您应该能够导入它们(由于某些原因,我不得不导入org.python.bouncycastle.jce.provider而不是org.bouncycastle.jce.provider)。我在代码的顶部放了:

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章