我正在用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代碼。
1 回答

狐的傳說
TA貢獻1804條經驗 獲得超3個贊
更改提供者似乎是解決此問題的方法。不幸的是,使用Mule連接器無法做到這一點,因此我們不得不用純Java重新編寫sftp連接器。下載bouncycastle .jars之后,將它們放在src / main / app / lib中,然后將它們添加到構建路徑中。您應該能夠導入它們(由于某些原因,我不得不導入org.python.bouncycastle.jce.provider而不是org.bouncycastle.jce.provider)。我在代碼的頂部放了:
Security.insertProviderAt(new BouncyCastleProvider(), 1);
并且在流運行時,正確協商了dh鍵,并且不會引發任何錯誤。
添加回答
舉報
0/150
提交
取消