Ответ 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/