Подтвердить что ты не робот

Поддерживает ли .NET FtpWebRequest как неявные (FTPS), так и явные (FTPES)?

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

Спасибо

4b9b3361

Ответ 1

Насколько я знаю, текущая версия (.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/

Ответ 2

Ранее я использовал Alex FTPS Client. Возможно, вам стоит взглянуть на http://ftps.codeplex.com/.

Ответ 3

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

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


В любом случае, если вам нужно использовать неявное шифрование 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 генерирует шаблон кода FTP С#, как и тот, который вы выше.

(Я автор WinSCP)

Ответ 4

Вы также можете попробовать 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();
}

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

Ответ 5

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 клиент).