Does .NET Suporte FtpWebRequest ambas as implícitas (FTPS) e explícitas (FTPES)?
-
12-09-2019 - |
Pergunta
Estou sendo solicitado para apoiar FTPS implícitas e explícitas (também conhecido como FTPES). No momento, estamos usando o FtpWebRequest
.NET. Será que o apoio FtpWebRequest
ambos os tipos de FTPES, e qual é a diferença?
Graças
Solução
, tanto quanto eu sei que o atual (.NET 2.0 e 3.5) versão do FtpWebRequest suporta apenas SSL explícito.
Na verdade, .NET 2.0 atualmente não apoiar SSL implícita, única explícita. Vamos considerar adicionando este para um futuro lançamento.
JonCole - MSFTModerator em MSDN post no fórum
Se você precisa usar tanto Implict e TLS Explícito / SSL você tem que tentar um dos componentes FTP / SSL de terceiros. Código a seguir usa o nosso Rebex FTP / SSL e é retirado do página de tutorial .
TLS Explícito / SSL
Ligações cliente para o servidor FTP de forma habitual não-protegido, normalmente a porta 21 foi atribuído ao protocolo FTP. Quando se deseja para proteger a conexão usando SSL, uma negociação SSL é inicializado, conexão de controle é garantido e tudo após a comunicação está protegido.
// 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);
Meios de protecção explícita que é possível para proteger a conexão a qualquer momento. Se você não sabe se você vai precisar a proteção em não no tempo de conexão, você pode querer se conectar usando o protocolo FTP sem criptografia comum e assegurar a ligação mais tarde.
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);
proteção SSL implícita da sessão FTP
protocolo FTPS foi originalmente atribuído uma porta separada pela IANA. Após a ligação a esta porta, uma negociação SSL começa imediatamente e a conexão de controle é garantido. Todas as conexões de dados também são protegidos de forma implícita da mesma forma. Isto é semelhante à abordagem usada por HTTPS.
Esta abordagem não é favorecida pela IETF e está obsoleta. É apoiado por Rebex FTP / SSL para interoperabilidade com servidores mais antigos, mas recomenda-se vivamente que utilize a proteção explícita em vez sempre que possível.
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);
Você pode baixar o componente em rebex.net/ftp-ssl.net/
Outras dicas
Eu tenho usado Alex FTPS cliente anteriormente. Pode ser que você deve olhar para http://ftps.codeplex.com/ .
.NET Framework / suportes FtpWebRequest
única TLS explícitas / SSL criptografia . Ele não suporta criptografia implícita TLS / SSL.
Eu acredito que é improvável que nunca. A implementação de FTP do .NET estruturas utiliza apenas recursos do protocolo padronizado. A criptografia implícita TLS / SSL não foi padronizado. Foi introduzido apenas como um mecanismo temporário para permitir o uso de criptografia perfeita com clientes FTP que não suporta criptografia. Em geral, não há nenhuma razão para usar criptografia implícita TLS / SSL. Um servidor FTP que suporta implícita criptografia TLS / SSL somente, está quebrado, imo. Note-se que RFC 2228 [Segurança FTP Extensions] foi introduzido há 20 anos!
De qualquer forma, se você precisa usar a criptografia implícita TLS / SSL, você tem que usar uma biblioteca parte 3 FTP.
Com WinSCP .NET assembly , é fácil:
// 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
}
Você pode ter WinSCP GUI gerar um modelo de código C # FTP , como o acima, para você.
(eu sou o autor de WinSCP)
Você também pode tentar Ftp.dll FTP / FTPS cliente .
Ele suporta e conexões SSL implícitas explícitas. Aqui está a amostra implícito:
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();
}
Por favor note que este é produto comercial e eu sou o autor deste componente.
edtFTPnet / PRO é uma biblioteca de cliente FTP que também suporta FTP implícita e modos explícitos. É simplesmente uma questão de especificar o protocolo direita:
SecureFTPConnection conn = new SecureFTPConnection();
conn.Protocol = FileTransferProtocol.FTPSImplicit;
// set remote host, user, pwd etc ...
// now connect
conn.Connect();
Os mesmos suportes de componentes SFTP também.
E sim, eu sou um dos desenvolvedores deste componente (e de edtFTPnet , o, open source cliente .NET FTP livre).