Я создаю плагин SFTP/FTPS для своего приложения, которое может входить на серверы FTPS или SFTP. Какие свойства аутентификации различаются для FTPS и SFTP?

Моему приложению требуется доступ к файлам с удаленного сервера FTPS или SFTP в зависимости от того, к чему хочет подключиться пользователь моего приложения. Мне нужно иметь доступ к содержимому файла в папке или создать папку. 1) Какие свойства входа в систему различаются для серверов FTPS и SFTP, которые должен ввести пользователь? 2) Можно ли каким-либо образом определить, является ли это сервером SFTP или FTPS?


person eechpeech    schedule 22.10.2015    source источник
comment
Вы гуглили? Кажется, есть довольно много сообщений о SFTP и FTPS. Хорошо, вероятно, нет ни одного, в котором он отвечает на ваши вопросы в 1-м абзаце, но все же. В основном я предполагаю, что было бы неплохо, если бы вы сузили свой вопрос после некоторых исследований.   -  person lrnzcig    schedule 22.10.2015
comment
@Irnzcig, я пытался найти разницу в свойствах входа в систему. Я вижу различия в протоколах SSH и SSL и что они совершенно разные. Мое приложение должно иметь возможность подключаться к обоим, и я хочу знать, какие свойства я могу получить от своего пользователя, и принять решение о подключении к SFTP или FTPS.   -  person eechpeech    schedule 23.10.2015
comment
Что вы подразумеваете под свойствами аутентификации? Вы имеете в виду какую-то конкретную библиотеку/фреймворк? Ваш вопрос слишком расплывчатый.   -  person Martin Prikryl    schedule 23.10.2015
comment
Я предполагаю, что он имеет в виду учетные данные, такие как имя пользователя или пароль... Однако SFTP/SSH поддерживает keyboard-interactive метод аутентификации, который позволяет серверу запрашивать что угодно, хотя большинство серверов используют его только для запроса имени пользователя и пароля.   -  person Lukas Pokorny    schedule 23.10.2015
comment
А по второму вопросу - FTPS и SFTP - это разные протоколы, использующие разные TCP-порты. SFTP/SSH работает на порту 22, FTP и FTP через явный TLS/SSL через порт 21 и FTP через неявный TLS/SSL через порт 990. Чтобы определить, может ли сервер поддерживать каждый из этих протоколов, вы можете просто попробовать подключиться к этим портам. (и, возможно, попытаться установить связь, чтобы убедиться, что это правильный протокол). Однако вы не будете знать наверняка, поддерживает ли сервер SFTP, если вы фактически не установите сеанс SSH и не пройдете аутентификацию.   -  person Lukas Pokorny    schedule 23.10.2015
comment
@LukasPokorny, ты прав. Я имею в виду, какие поля пользователь должен заполнить для моего приложения, чтобы аутентифицировать и установить соединение со своим SFTP/FTPS-сервером и загрузить данные в мое приложение. Это хост, имя пользователя, пароль как для SFTP, так и для FTPS? Кто решает эти поля?   -  person eechpeech    schedule 23.10.2015
comment
Ну, с методом аутентификации keyboard-interactive сервер SFTP/SSH может запрашивать любые поля, которые он хочет (см. tools.ietf.org/html/rfc4256#page-5 для получения подробной информации). На практике почти все серверы просто запрашивают пароль (и большинство из них используют для этого метод аутентификации password), но на самом деле существуют серверы SFTP/SSH, которые запрашивают и другую информацию (это полезно для многофакторной аутентификации, Например).   -  person Lukas Pokorny    schedule 30.10.2015


Ответы (1)


  1. SFTP не имеет аутентификации. Предполагается, что протокол SFTP используется через соединение SSH, поэтому для аутентификации он использует SSH. Таким образом, применяются все механизмы аутентификации SSH. Список таких механизмов обширен — можно пройти аутентификацию по паролю, приватному ключу («аутентификация с открытым ключом»), сертификату X.509 (не популярный вариант), интерактивному диалогу с клавиатурой (запрос-ответ), а также через GSS. -API вы можете использовать Kerberos и, возможно, другие механизмы. FTPS как FTP-over-TLS также может использовать различные механизмы. FTP использует имя пользователя/пароль по умолчанию, но потенциально можно реализовать некоторые хитрые механизмы с помощью команды SITE. Протокол TLS включает аутентификацию на стороне клиента с использованием сертификатов X.509, предварительно общих симметричных ключей, простых ключей PKI, ключей OpenPGP.

  2. SFTP и FTP/FTPS — это совершенно разные протоколы. Сервера работают на разных портах. Если вы хотите реализовать автоопределение протокола, вы можете попробовать следующее: подключитесь к серверу, и если он отправит приветственное SSH-сообщение в течение 200-500 мс, вы знаете, что это SSH (и, возможно, SFTP) сервер. Если он отправляет приветственное FTP-сообщение, это FTP-сервер (включая явный режим TLS FTPS). Если он ничего не отправляет, то это может быть сервером TLS, и у вас может быть неявный FTPS через это соединение.

person Eugene Mayevski 'Callback    schedule 23.10.2015
comment
Спасибо. Про 1 вы говорите, что список механизмов обширен. Эти механизмы определяются теми, кто настраивает сервер? Каковы минимальные поля, которые владелец сервера должен предоставить моему приложению, чтобы я мог подключиться к серверу и получить содержимое? (Очевидно, я новичок в этом. Проще говоря, например, как я могу разрешить пользователю аутентифицироваться с помощью OAuth из Facebook, чтобы мое приложение извлекало информацию из его профиля, я хочу сделать то же самое с FTPS или SFTP моего приложения. плагин) - person eechpeech; 23.10.2015
comment
@eechpeech Механизмы настраиваются сервером (или его администраторами). Стандарты определяют ограниченный набор механизмов (тот, который я перечислил), но есть место для пользовательских расширений. Однако такие расширения должны одинаково поддерживаться как клиентским, так и серверным программным обеспечением. Чтобы удовлетворить вашу конкретную потребность, я сомневаюсь, что вы могли бы использовать OAuth для аутентификации FTPS или SFTP, потому что я еще не видел сервер (или, по крайней мере, стандарт), который предлагает эту функциональность. - person Eugene Mayevski 'Callback; 24.10.2015