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

StackOverflow https://stackoverflow.com/questions/1842186

Вопрос

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

Спасибо

Это было полезно?

Решение

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

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

Джонкол - модератор MSFTModerator в Сообщение на форуме MSDN

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

Явный TLS / SSL

Клиент подключается к FTP-серверу обычным незащищенным способом, обычно для протокола FTP был назначен порт 21.Когда требуется защитить соединение с помощью 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/

Другие советы

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

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

Я считаю, что вряд ли это когда-нибудь произойдет.Реализация FTP в .NET framework использует только стандартизированные функции протокола.Неявное шифрование 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 генерирует шаблон FTP-кода на C #, как тот, что выше, для вас.

(Я автор WinSCP)

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

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

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 с открытым исходным кодом).NET.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top