вопрос имеет три подвопроса:
1) выбор протокола защищенной передачи
Существует защищенная версия старого FTP - она называется FTP / SSL (обычный старый FTP через зашифрованный канал SSL). Возможно, вы все еще можете использовать свою старую инфраструктуру развертывания - просто проверьте, поддерживает ли она FTPS или FTP / SSL.
Подробные сведения о различиях между FTP, FTP / SSL и SFTP можно найти на странице http://www.rebex.net/secure-ftp.net/.
2) SFTP или FTP / SSL сервер для Windows
Когда вы выбираете, использовать ли SFTP или FTPS, вы должны развернуть соответствующий сервер. Для FTP / SSL мы используем Gene6 (http://www.g6ftpserver.com/) на нескольких серверах без проблем. Существует множество серверов FTP / SSL для Windows, поэтому используйте все, что вы хотите. С SFTP-сервером для Windows ситуация немного сложнее - там это всего лишь несколько рабочих реализаций. WinHTTPD Bitvise выглядит довольно многообещающе (http://www.bitvise.com/winsshd).
3) Компонент передачи файлов через Интернет для ASP.NET
Последняя часть решения - безопасная передача файлов с asp.net. На рынке есть несколько компонентов. Я бы порекомендовал Rebex File Transfer Pack - он поддерживает как FTP (и FTP / SSL), так и SFTP (SSH File Transfer).
Следующий код показывает, как загрузить файл на сервер через SFTP. Код взят со страницы Rebex SFTP .
// create client, connect and log in
Sftp client = new Sftp();
client.Connect(hostname);
client.Login(username, password);
// upload the 'test.zip' file to the current directory at the server
client.PutFile(@"c:\data\test.zip", "test.zip");
// upload the 'index.html' file to the specified directory at the server
client.PutFile(@"c:\data\index.html", "/wwwroot/index.html");
// download the 'test.zip' file from the current directory at the server
client.GetFile("test.zip", @"c:\data\test.zip");
// download the 'index.html' file from the specified directory at the server
client.GetFile("/wwwroot/index.html", @"c:\data\index.html");
// upload a text using a MemoryStream
string message = "Hello from Rebex SFTP for .NET!";
byte[] data = System.Text.Encoding.Default.GetBytes(message);
System.IO.MemoryStream ms = new System.IO.MemoryStream(data);
client.PutFile(ms, "message.txt");
Martin