title: Raw FTP SSL with C#
body: <p>I'm trying to understand how SSL works. In my wish to make a small FTP client which supports SSL I've run into some problems:</p>
  
  <pre><code>TcpClient FtpConnection = new TcpClient(FtpServer, FtpPort);
  NetworkStream FtpStream = FtpConnection.GetStream();
  StreamReader FtpReader = new StreamReader(FtpStream);
  FtpWriter = new StreamWriter(IrcStream);
  send_cmd("AUTH SSL");
  </code></pre>
  
  <p>send_cmd is just a FtpWriter.WriteLine(text); FtpWriter.Flush(); function.</p>
  
  <p>My "problem" is this: First I need to make a (non-ssl) connection to the FTP, then tell it to do a ssl connection (AUTH SSL), and I would guess I then need to make a new connection - something like:</p>
  
  <pre><code>TcpClient client = new TcpClient(FtpServer, FtpPort);
  SslStream sslStream = new SslStream(client.GetStream(), false, new RemoteCertificateValidationCallback(ValidateServerCertificate), null);
  try
  {
      sslStream.AuthenticateAsClient("foobar");
  }
  catch (AuthenticationException e)
  {
      MessageBox.Show("Authentication failed - closing the connection.");
      client.Close();
      return;
  }
  </code></pre>
  
  <p>Taken from msdn.
  I keep dying on handshake failed due to unexpected packet format (which I've tried googling, but all say it's because the author has connected to a wrong port), which I take as: The connection is not ssl until AUTH SSL is send to it. So my question is, how would i go about making this a "hybrid" connection so I can make an SSL connection to the server?</p>
  
  <p>Any help is greatly appreciated!</p>