Does.NET FtpWebRequest поддержку и неявные (FTPS) и явные (FTPES)?
меня просят поддерживать неявные и явные FTPS (также известные как FTPES). В настоящее время мы используем .NET FtpWebRequest
. Делает FtpWebRequest
поддержка обоих типов FTPES, и в чем разница?
спасибо
5 ответов
насколько я знаю, текущая (.NET 2.0 и 3.5) версия FtpWebRequest поддерживает только явный SSL.
на самом деле .NET 2.0 в настоящее время не поддержка неявного SSL, только явного. Мы рассмотрим возможность добавления этого будущий релиз.
JonCole-MSFTModerator at сообщение форума MSDN
Если вам нужно использовать как Implict, так и явный 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/
Я использовал клиента 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.
в любом случае, если вам нужно использовать неявное шифрование TLS/SSL, вы должны использовать стороннюю FTP-библиотеку.
С WinSCP .NET assembly, это просто:
// 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 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).