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