Does.NET FtpWebRequest supporte à la fois implicite (FTPS) et explicite (FTPES)?

on me demande de supporter les FTPS implicites et explicites (aussi connues sous le nom de FTPES). Nous utilisons actuellement le .NET FtpWebRequest. L' FtpWebRequest supporte les deux types de FTPES, et quelle est la différence?

Merci

26
demandé sur Martin Prikryl 2009-12-03 22:09:12

5 réponses

pour autant que je sache, la version actuelle (.net 2.0 et 3.5) de FtpWebRequest supporte explicitement SSL seulement.

en fait, .NET 2.0 ne fonctionne pas actuellement support SSL implicite, seulement explicite. Nous envisagerons d'ajouter ceci pour version future.

JonCole - MSFTModerator at MSDN forum post

si vous devez utiliser à la fois Implict et TLS/SSL explicite, vous devez essayer L'un des composants FTP/SSL tiers. Suivant le code utilise notre Rebex FTP / SSL et est prise à partir de la tutoriel.

explicite TLS / SSL

le Client se connecte au serveur FTP de manière non protégée, habituellement au port 21 a été assigné au protocole FTP. Lorsque L'on souhaite protéger la connexion à L'aide de SSL, une négociation SSL est initialisée, la connexion de contrôle est sécurisée et toutes les communications suivantes sont protégées.

// 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);

protection explicite signifie qu'il est possible de sécuriser la connexion à tout moment. Si vous ne savez pas si vous aurez besoin de la protection sur not au moment de la connexion, vous pourriez vouloir vous connecter en utilisant le protocole FTP non crypté ordinaire et sécuriser la connexion plus tard.

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

protection SSL implicite de la session FTP

le protocole FTPS a d'abord été assigné à un port séparé par L'IANA. Dès la connexion à ce port, une négociation SSL démarre immédiatement et la connexion de contrôle est sécurisée. Toutes les connexions de données sont également garanties implicitement de la même manière. Cette approche est similaire à celle utilisée par HTTPS.

cette approche n'est pas favorisée par L'IETF et est dépréciée. Il est supporté par Rebex FTP / SSL pour l'interopérabilité avec les anciens serveurs, mais il est fortement recommandé d'utiliser la protection explicite à la place chaque fois que possible.

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

vous pouvez télécharger le composant à rebex.net/ftp-ssl.net/

17
répondu Martin Vobr 2010-10-08 18:08:38

J'ai utilisé Alex Client FTPS plus tôt. Peut - être devriez-vous regarder vers http://ftps.codeplex.com/.

12
répondu 2010-02-20 08:05:50

.net Framework/FtpWebRequest supporte seulement le cryptage TLS/SSL explicite. Il ne supporte pas le cryptage implicite TLS/SSL.

je crois qu'il est peu probable qu'il le soit jamais. La mise en œuvre FTP de .net frameworks n'utilise que des fonctionnalités standardisées du protocole. Le cryptage implicite TLS/SSL n'a jamais été standardisé. Il n'a été introduit que comme mécanisme temporaire pour permettre l'utilisation d'un chiffrement continu avec des clients FTP qui ne supportaient pas le chiffrement. En général, il n'y a pas de raison d'utiliser cryptage implicite TLS/SSL. Un serveur FTP qui supporte le cryptage TLS/SSL implicite seulement, est cassé, imo.


de toute façon, si vous avez besoin d'utiliser le cryptage implicite TLS/SSL, vous devez utiliser une bibliothèque FTP tierce.

Assemblée WinSCP. net, c'est facile:

// 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
}

Vous pouvez GUI WinSCP générer un modèle de code C # FTP, comme ci-dessus, pour vous.

(je suis l'auteur de WinSCP)

2
répondu Martin Prikryl 2017-06-26 09:31:09

Vous pouvez aussi essayer Ftp.DLL client FTP / FTPS.

il supporte implicite et explicite connexions SSL. Voici l'échantillon implicite:

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();
}

s'il vous Plaît noter que ce est produit commercial, et je suis l'auteur de ce composant.

1
répondu Pawel Lesnikowski 2016-09-09 17:47:03

edtFTPnet / PRO est une bibliothèque de clients FTP qui supporte aussi les modes FTPS implicites et explicites. Il s'agit simplement de spécifier le bon protocole:

 SecureFTPConnection conn = new SecureFTPConnection();
 conn.Protocol = FileTransferProtocol.FTPSImplicit;

 // set remote host, user, pwd etc ...

 // now connect
 conn.Connect();

le même composant supporte aussi le SFTP.

Et oui, je suis l'un des développeurs de ce composant (et de edtFTPnet, le client FTP free, open source .NET).

0
répondu Bruce Blackshaw 2010-02-26 12:43:51