SFTP-соединение с сервером с использованием phpseclib и sha256 - PullRequest
0 голосов
/ 23 мая 2018

Я должен подключиться к серверу SFTP.Сначала я использовал этот код:

$Key = new RSA();
$Key->setPassword("password");
$Key->loadKey(file_get_contents('path_to_RSA_private_key'));
$sftp = new SFTP($IP_addr, $port_number);
if (!$sftp->login('username', $Key))
  echo date('Y/m/d H:i:s').' SFTP login failed to $IP_addr';

Он работал хорошо.Я знаю, что phpseclib использует по умолчанию sha1, и я хотел бы использовать sha256.Поэтому я попытался с этим кодом:

$Key = new RSA();
$Key->setHash('sha256');
$Key->setMGFHash('sha256');
$Key->setPassword("password");
$Key->loadKey(file_get_contents('path_to_RSA_private_key'));
$sftp = new SFTP($IP_addr, $port_number);
if (!$sftp->login('username', $Key))
  echo date('Y/m/d H:i:s').' SFTP login failed to $IP_addr';

Но это не работает.Я получил это сообщение на сервере:

error: key_verify: invalid format

При необходимости я могу отправить отладочные сообщения на стороне сервера.Этот сервер использует значения по умолчанию для параметров Ciphers, KexAlgorithms и MAC.

Спасибо за помощь.

Ответы [ 2 ]

0 голосов
/ 31 мая 2018

Я провел несколько тестов, кодируя разные значения для kexalgorithms и MAcs на sshd_config сервера, к которому я хочу подключиться.И он работал так, как я хотел, чтобы он работал.

Большое спасибо Нойберт за вашу помощь и за то время, которое вам пришлось потратить на решение этой проблемы.

0 голосов
/ 23 мая 2018

Цитирование RFC4253 :

Формат ключа "ssh-rsa" имеет следующую специальную кодировку:

  string    "ssh-rsa"
  mpint     e
  mpint     n

Здесь 'e' и'n' параметры формируют бланк ключа подписи.

Подписывание и проверка с использованием этого формата ключа выполняются в соответствии со схемой RSASSA-PKCS1-v1_5 в [RFC3447] с использованием хэша SHA-1.

То есть, вы устанавливаете хеш для sha256, вероятно, что-то не так.А хэш MGF даже не используется, поскольку SSH не поддерживает сигнатуры PSS (именно так по умолчанию работает phpseclib).

Тем не менее, я думаю, что вы нажали наобласть, где phpseclib может использовать улучшения - устанавливает схему подписи для SSH равной PKCS1 , но не устанавливает хэш sha1.Это должно.

Также, FWIW, RFC8332 описывает подписывание с SHA-256.Но эта подпись все еще использует RSASSA-PKCS1-v1_5.И то, что RFC существует, не означает, что ваш сервер его поддерживает.Вы можете проверить, если это так, выполнив print_r($ssh->getServerHostKeyAlgorithms()), а затем посмотреть, есть ли rsa-sha2-256 в возвращаемом списке.

phpseclib в настоящее время не поддерживает RFC8332, но я могу посмотреть, как добавить поддержку для этого вследующие несколько дней и отправка запроса на получение ... ... 1028 *

...