Loading

Fehler bei der Algorithmusverhandlung, wenn der SFTP-Konnektor versucht, eine Verbindung zum SFTP-Server herzustellen

Veröffentlichungsdatum: Oct 16, 2024
Lösung

SYMPTOM

Eine Mule-Anwendung, die einen SFTP-Konnektor enthält, schlägt mit einer Ausnahme fehl, die eine Stapelverfolgung ähnlich der folgenden anzeigt:

org.mule.runtime.api.connection.ConnectionException: Could not establish SFTP connection with host: 'yourHost' at port: 'yourPort' - Algorithm negotiation fail (Es konnte keine SFTP-Verbindung mit dem Host 'yourHost' an Port 'yourPort' hergestellt werden – Algorithmusverhandlung fehlgeschlagen)Caused by: com.jcraft.jsch.JSchException: Algorithm negotiation fail (Ausgelöst durch: com.jcraft.jsch.JSchException: Fehler bei der Algorithmusverhandlung)at com.jcraft.jsch.Session.receive_kexinit(Session.java:590)at com.jcraft.jsch.Session.connect(Session.java:320)at com.jcraft.jsch.Session.connect(Session.java:183)at org.mule.extension.sftp.internal.connection.SftpClient.connect(SftpClient.java:179)at org.mule.extension.sftp.internal.connection.SftpClient.login(SftpClient.java:161)at org.mule.extension.sftp.internal.connection.SftpConnectionProvider.connect(SftpConnectionProvider.java:139)at org.mule.extension.sftp.internal.connection.SftpConnectionProvider.connect(SftpConnectionProvider.java:59)

URSACHE

Wenn eine sichere Verbindung zwischen einem Client und einem Server über SFTP hergestellt werden soll, legen beide Seiten eine Liste mit Schlüsselaustauschalgorithmen, kryptografischen Algorithmen, Message Authentication Code (MAC) und Kompressionsalgorithmen offen. Jeder dieser Algorithmen ist in der Reihenfolge vom sichersten bis zum unsichersten angeordnet. Die Algorithmen sollen verwendet werden, um die beste Option für die SSH-Verbindung zu ermitteln. Wenn während dieser Verhandlung keine Einigung über die zu verwendenden Algorithmus-Implementierungen erzielt wird, wird die Meldung "Algorithm negotiation fail" (Algorithmus-Verhandlung gescheitert" angezeigt. 
Eine genaue Beschreibung zu dieser SSH-Algorithmusverhandlung finden Sie im Abschnitt SSH RFC4253 section 7.1.

Die Verhandlungsinformationen können in einer Mule-Anwendung angezeigt werden, indem Sie die SFTP-Debug-Protokolle aktivieren.

Im Fall von Mule 4.x genügt es, die DEBUG-Protokolle durch Setzen der Pakete zu aktivieren. Aktivieren der ausführlichen Protokollierung für das FTP-, SFTP- und FTPS-Modul. In Mule 3.x sind einige zusätzliche Änderungen erforderlich, um die DEBUG-Protokolle von JSCH abzurufen. Wenden Sie sich hierzu an den MuleSoft-Support.

Ein Beispiel für ein SFTP-DEBUG-Protokoll, das diese Verhandlung zeigt, finden Sie nachfolgend:

DEBUG 2021-03-17 19:57:23,944 [[MuleRuntime].uber.08: [my-mule-application].my-mule-applicationFlow.CPU_LITE @2a316d37] [processor: my-mule-applicationFlow/processors/0; event: ] org.mule.extension.sftp.internal.connection.SftpConnectionProvider: Connecting to host: 'myHost' at port: 'myPort'DEBUG 2021-03-17 19:57:23,945 [[MuleRuntime].uber.08: [my-mule-application].my-mule-applicationFlow.CPU_LITE @2a316d37] [processor: my-mule-applicationFlow/processors/0; event: ] com.jcraft.jsch: Connecting to myHost port myPortDEBUG 2021-03-17 19:57:23,971 [[MuleRuntime].uber.08: [my-mule-application].my-mule-applicationFlow.CPU_LITE @2a316d37] [processor: my-mule-applicationFlow/processors/0; event: ] com.jcraft.jsch: Connection establishedDEBUG 2021-03-17 19:57:24,002 [[MuleRuntime].uber.08: [my-mule-application].my-mule-applicationFlow.CPU_LITE @2a316d37] [processor: my-mule-applicationFlow/processors/0; event: ] com.jcraft.jsch: Remote version string: SSH-2.0-CerberusFTPServer_11.0DEBUG 2021-03-17 19:57:24,002 [[MuleRuntime].uber.08: [my-mule-application].my-mule-applicationFlow.CPU_LITE @2a316d37] [processor: my-mule-applicationFlow/processors/0; event: ] com.jcraft.jsch: Local version string: SSH-2.0-JSCH-0.1.54DEBUG 2021-03-17 19:57:24,002 [[MuleRuntime].uber.08: [my-mule-application].my-mule-applicationFlow.CPU_LITE @2a316d37] [processor: my-mule-applicationFlow/processors/0; event: ] com.jcraft.jsch: CheckCiphers: aes256-ctr,aes192-ctr,aes128-ctr,aes256-cbc,aes192-cbc,aes128-cbc,3des-ctr,arcfour,arcfour128,arcfour256DEBUG 2021-03-17 19:57:24,006 [[MuleRuntime].uber.08: [my-mule-application].my-mule-applicationFlow.CPU_LITE @2a316d37] [processor: my-mule-applicationFlow/processors/0; event: ] com.jcraft.jsch: aes256-ctr is not available.DEBUG 2021-03-17 19:57:24,006 [[MuleRuntime].uber.08: [my-mule-application].my-mule-applicationFlow.CPU_LITE @2a316d37] [processor: my-mule-applicationFlow/processors/0; event: ] com.jcraft.jsch: aes192-ctr is not available.DEBUG 2021-03-17 19:57:24,006 [[MuleRuntime].uber.08: [my-mule-application].my-mule-applicationFlow.CPU_LITE @2a316d37] [processor: my-mule-applicationFlow/processors/0; event: ] com.jcraft.jsch: aes256-cbc is not available.DEBUG 2021-03-17 19:57:24,006 [[MuleRuntime].uber.08: [my-mule-application].my-mule-applicationFlow.CPU_LITE @2a316d37] [processor: my-mule-applicationFlow/processors/0; event: ] com.jcraft.jsch: aes192-cbc is not available.DEBUG 2021-03-17 19:57:24,006 [[MuleRuntime].uber.08: [my-mule-application].my-mule-applicationFlow.CPU_LITE @2a316d37] [processor: my-mule-applicationFlow/processors/0; event: ] com.jcraft.jsch: CheckKexes: diffie-hellman-group14-sha1,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521DEBUG 2021-03-17 19:57:24,075 [[MuleRuntime].uber.08: [my-mule-application].my-mule-applicationFlow.CPU_LITE @2a316d37] [processor: my-mule-applicationFlow/processors/0; event: ] com.jcraft.jsch: CheckSignatures: ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521DEBUG 2021-03-17 19:57:24,075 [[MuleRuntime].uber.08: [my-mule-application].my-mule-applicationFlow.CPU_LITE @2a316d37] [processor: my-mule-applicationFlow/processors/0; event: ] com.jcraft.jsch: SSH_MSG_KEXINIT sentDEBUG 2021-03-17 19:57:24,075 [[MuleRuntime].uber.08: [my-mule-application].my-mule-applicationFlow.CPU_LITE @2a316d37] [processor: my-mule-applicationFlow/processors/0; event: ] com.jcraft.jsch: SSH_MSG_KEXINIT receivedDEBUG 2021-03-17 19:57:24,075 [[MuleRuntime].uber.08: [my-mule-application].my-mule-applicationFlow.CPU_LITE @2a316d37] [processor: my-mule-applicationFlow/processors/0; event: ] com.jcraft.jsch: kex: server: ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1DEBUG 2021-03-17 19:57:24,076 [[MuleRuntime].uber.08: [my-mule-application].my-mule-applicationFlow.CPU_LITE @2a316d37] [processor: my-mule-applicationFlow/processors/0; event: ] com.jcraft.jsch: kex: server: ssh-rsa,ssh-ed25519,rsa-sha2-512,rsa-sha2-256DEBUG 2021-03-17 19:57:24,076 [[MuleRuntime].uber.08: [my-mule-application].my-mule-applicationFlow.CPU_LITE @2a316d37] [processor: my-mule-applicationFlow/processors/0; event: ] com.jcraft.jsch: kex: server: aes256-ctr,aes256-cbcDEBUG 2021-03-17 19:57:24,076 [[MuleRuntime].uber.08: [my-mule-application].my-mule-applicationFlow.CPU_LITE @2a316d37] [processor: my-mule-applicationFlow/processors/0; event: ] com.jcraft.jsch: kex: server: aes256-ctr,aes256-cbcDEBUG 2021-03-17 19:57:24,076 [[MuleRuntime].uber.08: [my-mule-application].my-mule-applicationFlow.CPU_LITE @2a316d37] [processor: my-mule-applicationFlow/processors/0; event: ] com.jcraft.jsch: kex: server: hmac-sha1,hmac-sha2-256,hmac-sha2-512,hmac-ripemd160,hmac-ripemd160@openssh.com,hmac-md5DEBUG 2021-03-17 19:57:24,076 [[MuleRuntime].uber.08: [my-mule-application].my-mule-applicationFlow.CPU_LITE @2a316d37] [processor: my-mule-applicationFlow/processors/0; event: ] com.jcraft.jsch: kex: server: hmac-sha1,hmac-sha2-256,hmac-sha2-512,hmac-ripemd160,hmac-ripemd160@openssh.com,hmac-md5DEBUG 2021-03-17 19:57:24,076 [[MuleRuntime].uber.08: [my-mule-application].my-mule-applicationFlow.CPU_LITE @2a316d37] [processor: my-mule-applicationFlow/processors/0; event: ] com.jcraft.jsch: kex: server: noneDEBUG 2021-03-17 19:57:24,076 [[MuleRuntime].uber.08: [my-mule-application].my-mule-applicationFlow.CPU_LITE @2a316d37] [processor: my-mule-applicationFlow/processors/0; event: ] com.jcraft.jsch: kex: server: noneDEBUG 2021-03-17 19:57:24,076 [[MuleRuntime].uber.08: [my-mule-application].my-mule-applicationFlow.CPU_LITE @2a316d37] [processor: my-mule-applicationFlow/processors/0; event: ] com.jcraft.jsch: kex: server: en-USDEBUG 2021-03-17 19:57:24,076 [[MuleRuntime].uber.08: [my-mule-application].my-mule-applicationFlow.CPU_LITE @2a316d37] [processor: my-mule-applicationFlow/processors/0; event: ] com.jcraft.jsch: kex: server: en-USDEBUG 2021-03-17 19:57:24,076 [[MuleRuntime].uber.08: [my-mule-application].my-mule-applicationFlow.CPU_LITE @2a316d37] [processor: my-mule-applicationFlow/processors/0; event: ] com.jcraft.jsch: kex: client: ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group1-sha1DEBUG 2021-03-17 19:57:24,076 [[MuleRuntime].uber.08: [my-mule-application].my-mule-applicationFlow.CPU_LITE @2a316d37] [processor: my-mule-applicationFlow/processors/0; event: ] com.jcraft.jsch: kex: client: ssh-rsa,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521DEBUG 2021-03-17 19:57:24,076 [[MuleRuntime].uber.08: [my-mule-application].my-mule-applicationFlow.CPU_LITE @2a316d37] [processor: my-mule-applicationFlow/processors/0; event: ] com.jcraft.jsch: kex: client: aes128-ctr,aes128-cbc,3des-ctr,3des-cbc,blowfish-cbcDEBUG 2021-03-17 19:57:24,076 [[MuleRuntime].uber.08: [my-mule-application].my-mule-applicationFlow.CPU_LITE @2a316d37] [processor: my-mule-applicationFlow/processors/0; event: ] com.jcraft.jsch: kex: client: aes128-ctr,aes128-cbc,3des-ctr,3des-cbc,blowfish-cbcDEBUG 2021-03-17 19:57:24,076 [[MuleRuntime].uber.08: [my-mule-application].my-mule-applicationFlow.CPU_LITE @2a316d37] [processor: my-mule-applicationFlow/processors/0; event: ] com.jcraft.jsch: kex: client: hmac-md5,hmac-sha1,hmac-sha2-256,hmac-sha1-96,hmac-md5-96DEBUG 2021-03-17 19:57:24,076 [[MuleRuntime].uber.08: [my-mule-application].my-mule-applicationFlow.CPU_LITE @2a316d37] [processor: my-mule-applicationFlow/processors/0; event: ] com.jcraft.jsch: kex: client: hmac-md5,hmac-sha1,hmac-sha2-256,hmac-sha1-96,hmac-md5-96DEBUG 2021-03-17 19:57:24,076 [[MuleRuntime].uber.08: [my-mule-application].my-mule-applicationFlow.CPU_LITE @2a316d37] [processor: my-mule-applicationFlow/processors/0; event: ] com.jcraft.jsch: kex: client: noneDEBUG 2021-03-17 19:57:24,076 [[MuleRuntime].uber.08: [my-mule-application].my-mule-applicationFlow.CPU_LITE @2a316d37] [processor: my-mule-applicationFlow/processors/0; event: ] com.jcraft.jsch: kex: client: noneDEBUG 2021-03-17 19:57:24,076 [[MuleRuntime].uber.08: [my-mule-application].my-mule-applicationFlow.CPU_LITE @2a316d37] [processor: my-mule-applicationFlow/processors/0; event: ] com.jcraft.jsch: kex: client: DEBUG 2021-03-17 19:57:24,076 [[MuleRuntime].uber.08: [my-mule-application].my-mule-applicationFlow.CPU_LITE @2a316d37] [processor: my-mule-applicationFlow/processors/0; event: ] com.jcraft.jsch: kex: client: DEBUG 2021-03-17 19:57:24,077 [[MuleRuntime].uber.08: [my-mule-application].my-mule-applicationFlow.CPU_LITE @2a316d37] [processor: my-mule-applicationFlow/processors/0; event: ] com.jcraft.jsch: Disconnecting from myHost port myPort

In diesem Artikel werden zwei Szenarien behandelt:

Szenario 1: Fehler im Komprimierungsalgorithmus

Ein Fehler infolge des Komprimierungsalgorithmus sieht in etwa wie im folgenden Snippet aus.

com.jcraft.jsch: kex: server: zlibcom.jcraft.jsch: kex: client: none
Szenario 2: Konflikt in den verwendeten Verschlüsselungen

Ein "Cipher Mismatch" (Verschlüsselungskonflikt) sieht in etwa wie das folgende Snippet aus.

com.jcraft.jsch: kex: server: aes256-ctr,aes256-cbccom.jcraft.jsch: kex: client: aes128-ctr,aes128-cbc,3des-ctr,3des-cbc,blowfish-cbc

LÖSUNG 

Die vom Server und Client (SFTP-Konnektor) unterstützten SSH-Versionen werden am Anfang der DEBUG-Protokolle aufgeführt.

Remote version string: SSH-2.0-OpenSSH_8.8Local version string: SSH-2.0-JSCH-0.1.54

Als Faustregel gilt, dass jede der ausgehandelten Algorithmuskategorien (im RFC erwähnt) mindestens eine gemeinsame Implementierung zwischen Client und Server haben sollte (und ihre Einschränkungen erfüllen sollte), um fortfahren zu können.

RFC 4253: Algorithmus Verhandlung      name-list    kex_algorithms      name-list    server_host_key_algorithms      name-list    encryption_algorithms_client_to_server      name-list    encryption_algorithms_server_to_client      name-list    mac_algorithms_client_to_server      name-list    mac_algorithms_server_to_client      name-list    compression_algorithms_client_to_server      name-list    compression_algorithms_server_to_client      name-list    languages_client_to_server      name-list    languages_server_to_client
In diesem Fall wird in jeder Zeile eine Liste der Algorithmen dargestellt, die vom Server und Client angeboten werden. Das heißt, wenn ein Algorithmus vom Server keinen passenden Algorithmus vom Client hat, schlägt die Verhandlung fehl. Im folgenden Beispiel stimmen die für "server_host_key_algorithms" angebotenen Algorithmen nicht mit dem vom Client angebotenen überein und die Verhandlung schlägt fehl.
  SFTP-Algorithmus fehlgeschlagen

Szenario 1 (Komprimierungsalgorithmus)

Der SFTP-Konnektor unterstützt derzeit keine "zlib"-Komprimierung. Daher ist der einzige Algorithmus, der mit der Serverseite kompatibel ist, "NONE". Über unser Ideenportal wurde eine Verbesserungsanforderung eingereicht.  

Derzeit verfügbare Alternativen:

  1. Konfigurieren Sie den SFTP-Server so, dass Verbindungen ohne Komprimierung zugelassen werden (Algorithmus "NONE"-Algorithmus wird als aktiviert angeboten). 
  2. Entwickeln Sie einen benutzerdefinierten Konnektor über Java SKD/DeviKit(Mule 3.x) oder ein Java-Programm, das das Java-Modul verwendet, um eine Verbindung zum betreffenden SFTP-Server herzustellen, und zwar unter Verwendung einer Bibliothek, die diese Funktion ermöglicht.

Szenario 2 (Verschlüsselungskonflikt)

a. Stellen Sie sicher, dass die verwendete JSCH-Bibliothek die Verschlüsselungen unterstützt, die Sie verwenden möchten.

Der SFTP-Konnektor verwendet die JSCH-Bibliothek, um eine Verbindung mit einem SFTP-Server herzustellen. Je nach verwendeter Version verfügt JSCH über einen Satz von unterstützten Verschlüsselungen, die in der Dokumentation beschrieben sind. In JSCH ChangeLog können Sie die Funktionen einsehen. 

  • Bei Mule Runtime 4.x ist die Bibliothek mit jeder SFTP-Konnektorversion gebündelt und Sie können in Anypoint Studio einfach über den Paket-Explorer auf die Version zugreifen.

Beispiel:


Paket-Explorer für Anypoint Studio

  • In Mule Runtime 3.x ist die Bibliothek in der Runtime selbst enthalten und Sie können sie überprüfen, indem Sie im Verzeichnis /lib/opt nach einer .jar-Datei suchen, die mit dem Präfix "jsch-" beginnt.

Wenn die Bibliothek die betreffenden Verschlüsselungen nicht unterstützt, müssen Sie eine oder mehrere Verschlüsselungen aktivieren, die unter den von dieser JSCH-Version unterstützten Verschlüsselungen auf Ihrem SFTP-Server enthalten sind.

WICHTIG: Es wird nicht empfohlen, die verwendete Bibliothek zu ändern, da das Verhalten des SFTP-Konnektors mit der gebündelten Version getestet und validiert wurde. Falls Sie dies versuchen möchten, tun Sie dies in einer einfacheren Umgebung und lassen Sie sich, wenn möglich, von MuleSoft-Support bestätigen, dass die JSCH-Version kompatibel ist.

b. Überprüfen Sie, ob die Verschlüsselungen auf JVM-Ebene verwendet werden können. 

Der SFTP-Konnektor verwendet die JSCH-Bibliothek, um eine Verbindung mit einem SFTP-Server herzustellen. Diese Bibliothek stützt sich letztlich auf die JCE Java(TM)-Verschlüsselungserweiterung. Bei einigen JVM-Instanzen können bestimmte Verschlüsselungen aufgrund von Kontrollbeschränkungen nicht zur Verwendung enthalten sein. Sie sollten überprüfen, ob diese Einschränkungen für den JVM-Code gelten, den Sie gemäß der Anbieterdokumentation verwenden.

Bei Oracle JVMs müssen Sie beispielsweise die JCE Unlimited Strength hinzufügen, damit bestimmte Verschlüsselungen zugelassen werden. Jede Java-Version hat ihr eigenes JCE-Matching-Paket und Installationsdetails.

Für JDK8 können Sie sich beispielsweise auf Folgendes beziehen:

Unlimited Strength-Richtlinie und Installationsdetails und Unlimited Strength-JCE-Richtliniendateien.

Haftungsausschluss: Diese Lösung enthält einen Vorschlag, der zusammen mit Ihren spezifischen Anwendungsfällen und Anforderungen berücksichtigt werden sollte, und stellt nicht eine vollständige Lösung für alle Situationen dar.

Nummer des Knowledge-Artikels

001121369

 
Laden
Salesforce Help | Article