Поддерживает ли .NET FtpWebRequest как неявный (FTPS), так и явный (FTPES)? - PullRequest
26 голосов
/ 03 декабря 2009

Меня просят поддержать неявный и явный FTPS (также известный как FTPES). В настоящее время мы используем .NET FtpWebRequest. FtpWebRequest поддерживает оба типа FTPES, и в чем разница?

Спасибо

Ответы [ 5 ]

17 голосов
/ 08 декабря 2009

Насколько мне известно, текущая (.NET 2.0 и 3.5) версия FtpWebRequest поддерживает только явный SSL.

На самом деле .NET 2.0 в настоящее время не поддержка неявного SSL, только явный. Мы рассмотрим добавление этого для будущий выпуск.

JonCole - MSFTModerator на Сообщение на форуме MSDN

Если вам нужно использовать как Implict, так и Explicit TLS / SSL, вам нужно попробовать один из сторонних компонентов FTP / SSL. Следующий код использует наш Rebex FTP / SSL и взят со страницы учебника .

Явный TLS / SSL

Клиент подключается к FTP-серверу обычным незащищенным способом, обычно для порта 21 был назначен протокол FTP. Когда требуется защитить соединение с помощью SSL, инициализируется согласование SSL, защищается управляющее соединение и защищается вся последующая связь.

// Create an instance of the Ftp class. 
Ftp ftp = new Ftp();

// Connect securely using explicit SSL. 
// Use the third argument to specify additional SSL parameters. 
ftp.Connect(hostname, 21, null, FtpSecurity.Explicit);

// Connection is protected now, we can log in safely. 
ftp.Login(username, password);

Явная защита означает, что можно защитить соединение в любой момент. Если вы не знаете, нужна ли вам защита не во время соединения, возможно, вы захотите подключиться с использованием обычного незашифрованного протокола FTP и позже обезопасить соединение.

Ftp ftp = new Ftp();

// Connect to the server with no protection. 
ftp.Connect(hostname, 21);

// Upgrade connection to SSL. 
// This method also accepts an argument to specify SSL parameters. 
ftp.Secure();

// Connection is protected now, we can log in safely. 
ftp.Login(username, password);

Неявная защита SSL сеанса FTP

Протокол FTPS был первоначально назначен отдельным портом IANA. При подключении к этому порту согласование SSL начинается немедленно, и управляющее соединение защищено. Все подключения к данным также защищены неявно таким же образом. Это похоже на подход, используемый HTTPS.

Этот подход не одобрен IETF и не рекомендуется. Он поддерживается Rebex FTP / SSL для взаимодействия со старыми серверами, но настоятельно рекомендуется использовать явную защиту вместо этого, когда это возможно.

Ftp ftp = new Ftp();

// Connect securely using implicit SSL. 
// Use the third argument to specify additional SSL parameters. 
ftp.Connect(hostname, 990, null, FtpSecurity.Implicit);

// Connection is protected now, we can log in safely. 
ftp.Login(username, password);

Компонент можно загрузить по адресу rebex.net / ftp-ssl.net /

13 голосов
/ 20 февраля 2010

Я использовал Alex FTPS Client ранее. Может быть, вы должны смотреть на http://ftps.codeplex.com/.

4 голосов
/ 26 июня 2017

.NET Framework / FtpWebRequest поддерживает только явное шифрование TLS / SSL. Он не поддерживает неявное шифрование TLS / SSL.

Я полагаю, что это вряд ли когда-либо случится. FTP-реализация .NET-фреймворков использует только стандартизированные функции протокола. Неявное шифрование TLS / SSL никогда не было стандартизировано. Он был представлен только как временный механизм, позволяющий использовать бесшовное шифрование с FTP-клиентами, которые не поддерживают шифрование. В общем, нет причин использовать неявное шифрование TLS / SSL. Сервер FTP, который поддерживает только неявное шифрование TLS / SSL, не работает, imo. Обратите внимание, что RFC 2228 [расширения безопасности FTP] был представлен более 20 лет назад!


В любом случае, если вам нужно использовать неявное шифрование TLS / SSL, вы должны использовать стороннюю библиотеку FTP.

С сборкой WinSCP .NET это просто:

// Set up session options
SessionOptions sessionOptions = new SessionOptions
{
    Protocol = Protocol.Ftp,
    UserName = "username",
    Password = "password",
    FtpSecure = FtpSecure.Implicit,
};

using (Session session = new Session())
{
    // Connect
    session.Open(sessionOptions);

    // Your code
}

Вы можете иметь WinSCP GUI для генерации шаблона кода C # FTP , как и выше, для вас.

(я автор WinSCP)

1 голос
/ 27 ноября 2010

Вы также можете попробовать Ftp.dll FTP / FTPS клиент .

Поддерживаются неявные и явные SSL-соединения. Вот неявный пример:

using(Ftp ftp = new Ftp())
{
    ftp.ConnectSSL("ftp.server.com");

    ftp.Login("user", "password");

    ftp.ChangeFolder("uploads");
    ftp.UploadFile("report.txt", @"c:\report.txt");

    ftp.Close();
}

Обратите внимание, что это коммерческий продукт, и я являюсь автором этого компонента.

0 голосов
/ 26 февраля 2010

edtFTPnet / PRO - клиентская библиотека FTP, которая также поддерживает неявные и явные режимы FTPS. Это просто вопрос определения правильного протокола:

 SecureFTPConnection conn = new SecureFTPConnection();
 conn.Protocol = FileTransferProtocol.FTPSImplicit;

 // set remote host, user, pwd etc ...

 // now connect
 conn.Connect();

Этот же компонент также поддерживает SFTP.

И да, я один из разработчиков этого компонента (и edtFTPnet , бесплатного FTP-клиента с открытым исходным кодом .NET).

...