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

Foi útil?

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).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top