SFTP с использованием JSch и GlobalSCAPE

#java #encryption #ssh #sftp #jsch

#java #шифрование #ssh #sftp #jsch

Вопрос:

Я пытаюсь установить SFTP-соединение, используя Java secure chanel (JSch). Мой программный стек — Red Hat Enterprise Server 5.0, JRE 6.0 и JSch версии 0.1.44. Основным стеком серверного программного обеспечения (к которому я пытаюсь подключиться) является Windows Server 2008 и последняя версия GlobalSCAPE. При попытке подключиться к нему я получаю

 com.jcraft.jsch.JSchException: Algorithm negotiation fail 
    at com.jcraft.jsch.Session.receive_kexinit(Session.java:529) 
    at com.jcraft.jsch.Session.connect(Session.java:291) 
  

Включив ведение журнала JSch, я получаю следующее для этого же соединения:

 0000001d SystemErr     R INFO: Connecting to xxx.xxx.xxx.157 port 22
0000001d SystemErr     R INFO: Connection established
0000001d SystemErr     R INFO: Remote version string: SSH-2.0-1.36_sshlib GlobalSCAPE
0000001d SystemErr     R INFO: Local version string: SSH-2.0-JSCH-0.1.44
0000001d SystemErr     R INFO: CheckCiphers: aes256-ctr,aes192-ctr,aes128-ctr,aes256-    cbc,aes192-cbc,aes128-cbc,3des-ctr,arcfour,arcfour128,arcfour256
0000001d SystemErr     R INFO: aes256-ctr is not available.
0000001d SystemErr     R INFO: aes192-ctr is not available.
0000001d SystemErr     R INFO: aes256-cbc is not available.
0000001d SystemErr     R INFO: aes192-cbc is not available.
0000001d SystemErr     R INFO: arcfour256 is not available.
0000001d SystemErr     R INFO: SSH_MSG_KEXINIT sent
0000001d SystemErr     R INFO: SSH_MSG_KEXINIT received
0000001d SystemErr     R INFO: Disconnecting from xxx.xxx.xxx.157 port 22
  

Итак, судя по всему, я подключаюсь к серверу и на самом деле могу отправлять и получать сообщения, но когда клиент пытается сопоставить предложения сервера и клиента, он выдает исключение.

Теперь сравниваем его с журналами JSch успешного подключения к серверу с предыдущим программным обеспечением GlobalSCAPE и Windows Server 2003:

 0000001e SystemErr     R INFO: Connecting to xxx.xxx.xxx.156 port 22
0000001e SystemErr     R INFO: Connection established
0000001e SystemErr     R INFO: Remote version string: SSH-2.0-1.36 sshlib: GlobalScape
0000001e SystemErr     R INFO: Local version string: SSH-2.0-JSCH-0.1.44
0000001e SystemErr     R INFO: CheckCiphers: aes256-ctr,aes192-ctr,aes128-ctr,aes256-cbc,aes192-cbc,aes128-cbc,3des-ctr,arcfour,arcfour128,arcfour256
0000001e SystemErr     R INFO: aes256-ctr is not available.
0000001e SystemErr     R INFO: aes192-ctr is not available.
0000001e SystemErr     R INFO: aes256-cbc is not available.
0000001e SystemErr     R INFO: aes192-cbc is not available.
0000001e SystemErr     R INFO: arcfour256 is not available.
0000001e SystemErr     R INFO: SSH_MSG_KEXINIT sent
0000001e SystemErr     R INFO: SSH_MSG_KEXINIT received
0000001e SystemErr     R INFO: kex: server->client aes128-cbc hmac-md5 none
0000001e SystemErr     R INFO: kex: client->server aes128-cbc hmac-md5 none
0000001e SystemErr     R INFO: SSH_MSG_KEXDH_INIT sent
0000001e SystemErr     R INFO: expecting SSH_MSG_KEXDH_REPLY
0000001e SystemErr     R INFO: ssh_dss_verify: signature true
0000001e SystemErr     R WARN: Permanently added 'xxx.xxx.xxx.156' (DSA) to the list of known hosts.
0000001e SystemErr     R INFO: SSH_MSG_NEWKEYS sent
0000001e SystemErr     R INFO: SSH_MSG_NEWKEYS received
0000001e SystemErr     R INFO: SSH_MSG_SERVICE_REQUEST sent
0000001e SystemErr     R INFO: SSH_MSG_SERVICE_ACCEPT received
0000001e SystemErr     R INFO: Authentications that can continue: publickey,keyboard-inteactive,password
0000001e SystemErr     R INFO: Next authentication method: publickey
0000001e SystemErr     R INFO: Authentications that can continue: password
0000001e SystemErr     R INFO: Next authentication method: password
0000001e SystemErr     R INFO: Authentication succeeded (password).
  

Таким образом, он снова может подключаться и обмениваться SSH_MSG_KEXINIT, но здесь предложения клиента и сервера совпадают, и исключение не выдается

Безопасность sftp заключается в использовании открытого / закрытого ключа и имени пользователя / пароля.

Я могу подключиться к нему с помощью WinSCP, Filezilla и командной строки Linux (с того же сервера, с которого запускается java-приложение).

Я поговорил с одним системным администратором SFTP-сервера, и мы попытались использовать имя пользователя / пароль, и я получаю то же исключение и журналы.

Системный администратор сказал мне, что разница между обоими серверами заключается в версии GlobalSCAPE и в том, что теперь это сервер Microsoft 2008.

Итак, у кого-нибудь есть идеи о том, как справиться с этим?

Заранее большое спасибо!

Комментарии:

1. Правильно ли я понимаю, что основное отличие в настройках заключается в вашей версии GlobalSCAPE? Взгляните на конфигурацию, поддерживает ли новейшая версия aes128-cbc с hmac-md5?

2. Если вы можете запустить свою программу в отладчике, вы могли бы попробовать поставить точку останова в середине Session.send_keyinit() , чтобы увидеть значение ciphersc2s и cipherss2c . Или поставьте там .log(...) .

3. Да, основным отличием на данный момент в журналах JSch является версия GlobalSCAPE. Я поговорил с системным администратором этого сервера, и он проверяет его. Спасибо за пост.

Ответ №1:

Проблема, с которой вы столкнулись, не имеет ничего общего с globalscape, это сервер SFTP с поддержкой всех алгоритмов шифрования. У каждого sftp-сервера есть некоторые алгоритмы шифрования, с которыми они согласны, поэтому, если у вас нет этих кодировок и алгоритмов для шифрования, это не работает алгоритмы шифрования Все другие программы SFTP имеют встроенные алгоритмы шифрования, которые они используют в соответствии с конфигурацией sftp-сервера, в соответствии с последним 256-битным алгоритмом шифрования, и все готово

https://enterprisedt.com/products/edtftpjssl/doc/manual/html/howtousesftpchoosingalgorithms.html

Алгоритмы с открытым ключом

Для предпочтительных алгоритмов аутентификации с открытым ключом для сервера можно установить либо DSA, либо RSA, либо оба варианта. Если, например, установлен RSA, сервер предоставит клиенту открытый ключ RSA (если сервер, конечно, поддерживает ключи RSA — некоторые серверы этого не делают). Приведенный ниже код иллюстрирует, как установить только RSA. Сначала он отключает все алгоритмы пары ключей, затем включает RSA:

ftp.disableAllAlgorithms (Алгоритм SSHFTPAlgorithm.KEY_PAIR); ftp.setAlgorithmEnabled (Алгоритм SSHFTPAlgorithm.KEY_RSA, true);

По умолчанию включены как DSA, так и RSA.

Алгоритмы шифрования

Алгоритмы шифрования — это симметричные алгоритмы, используемые для выполнения шифрования данных и команд SFTP. Приведенный ниже код иллюстрирует, как установить triple DES в качестве алгоритма шифрования (отключив все остальные):

ftp.disableAllAlgorithms (Алгоритм SSHFTPAlgorithm.ШИФР); ftp.setAlgorithmEnabled (Алгоритм SSHFTPAlgorithm.CIPHER_3DES_CBC, true);

По умолчанию все алгоритмы шифрования включены.