SFTP с использованием JSch и GlobalScape - PullRequest
1 голос
/ 06 апреля 2011

Я пытаюсь установить соединение SFTP, используя безопасный канал Java (JSCh).Мой программный стек - это Red Hat Enterprise Server 5.0, JRE 6.0 и JSch v0.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 Ответ

0 голосов
/ 06 сентября 2016

Проблема, с которой вы столкнулись, не имеет ничего общего с 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. Приведенный ниже код иллюстрирует, как установить тройной DES в качестве алгоритма шифрования (отключив все остальные):

ftp.disableAllAlgorithms (SSHFTPAlgorithm.CIPHER); ftp.setAlgorithmEnabled (SSHFTPAlgorithm.CIPHER_3DES_CBC, true);

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

...