Я пытаюсь понять, как работает SSL. Желая создать небольшой FTP-клиент с поддержкой SSL, я столкнулся с некоторыми проблемами:
TcpClient FtpConnection = new TcpClient(FtpServer, FtpPort);
NetworkStream FtpStream = FtpConnection.GetStream();
StreamReader FtpReader = new StreamReader(FtpStream);
FtpWriter = new StreamWriter(IrcStream);
send_cmd("AUTH SSL");
send_cmd — это просто FtpWriter.WriteLine(text); FtpWriter.Flush(); функция.
Моя «проблема» заключается в следующем: сначала мне нужно установить (не-ssl) соединение с FTP, затем сказать ему выполнить соединение ssl (AUTH SSL), и я предполагаю, что затем мне нужно установить новое соединение - что-то подобно:
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;
}
Взято с мсдн. Я продолжаю умирать при сбое рукопожатия из-за неожиданного формата пакета (который я пытался найти в Google, но все говорят, что это потому, что автор подключился к неправильному порту), что я воспринимаю как: соединение не ssl, пока AUTH SSL не будет отправлен на Это. Итак, мой вопрос: как мне сделать это «гибридное» соединение, чтобы я мог установить SSL-соединение с сервером?
Любая помощь приветствуется!