Introduction
The purpose of this article is to create a C # FTP client in Secure mode, so if you don’t have much knowledge of FTPS, I advise you to take a look at this: FTPS.
In the .NET Framework, to upload a file in FTPS mode, we generally use the FtpWebRequest class, but you can not send commands with « quote » arguments, and even if you search on the web, you will not find a concrete example of a secured C# FTP client.
It’s for those reasons I decided to create this article.
SSL Stream?
To send a socket in Secure Socket Layer (SSL) mode, we use the class System.Net.Security.SslStream.
“Provides a stream used for client-server communication that uses the Secure Socket Layer (SSL) security protocol to authenticate the server and optionally the client”.
For more information, refer to MSDN.
Using the Code
1. Pre-Authenticate
FTPFactory ftp = new FTPFactory();
ftp.setDebug(true);
ftp.setRemoteHost(Settings.Default.TargetFtpSource);
ftp.setRemotePort(990);
ftp.loginWithoutUser();
string cmd = "AUTH SSL";
ftp.sendCommand(cmd);
Before connecting to the FTP server in SSL mode, you have to define the 990 SSL port and send the « AUTH SSL » command authentication using SSL.

2. Create SSL Stream
ftp.getSslStream();
ftp.setUseStream(true);
ftp.setRemoteUser(Settings.Default.TargetFtpSecureUser);
ftp.setRemotePass(Settings.Default.TargetFtpSecurePass);
ftp.login();
ftp.getSslStream() creates an SSL stream from client socket which will be used for exchange between the client and the server FTPS. Then, you have to enter a login and password to authenticate on the FTPS server.
Note: if the SSL stream is well established, then I display all the information about the server certificate.

3. Upload File
ftp.setBinaryMode(false);
ftp.uploadSecure(@"Filepath", false);
ftp.close();
Before uploading a file, you have to specify the mode: ftp.setBinaryMode(bool value).
value is false --> ASCII mode
value is true --> Binary mode
By default, it’s binary. Now, you upload the file using:
ftp.uploadSecure(@"Filepath", false)
Note: you can upload in non secured mode using ftp.upload().
Points of Interest
I learned how an SSL stream and the RAW FTP communication works between a client and an FTP server. Searching on the web, I found many who were stuck on the issue of SSL communication with an FTP server, so I hope this article will be of great help.
in 2005, I started my career. Net and I could improve in this technology through the project WinFroms. Net 2.0 / MVC2 for "Nestle".
After obtaining my diploma MASTER "MBDS" from the University of Nice Sophia Anti-police, I left to Belguim to work as Expert .Net Analyst Developer.
Currently I specialize in architecture Asp.net to the lowest level.
Meanwhile I remain very active in the community. Net, I created the 1st community. Net Morocco "on Facebook and LinkedIn and twitter, called "Morocco .Net User Group (MONUG)"