Я пытаюсь понять, как работает 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 (текст); 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;
}
Взято из MSDN.
Я продолжаю умирать при сбое рукопожатия из-за неожиданного формата пакета (который я пробовал гуглить, но все говорят, что это потому, что автор подключился к неправильному порту), который я принимаю как: Соединение не будет ssl, пока AUTH SSL не будет отправлен Это. Итак, мой вопрос: как мне сделать это «гибридным» соединением, чтобы я мог установить SSL-соединение с сервером?
Любая помощь очень ценится!