Я пытаюсь инициализировать tls-туннель с помощью .net SslStream, но после открытия потока я всегда получаю следующую ошибку:
"Невозможно прочитать данные из транспортного соединения: установленное соединение было прерваноПО на вашем хост-компьютере. "
После того, как я установлю соединение tls и после отправки второго сообщения.
Я искал ответ последние четыре дня, но в Интернете нет полезной информации!
edit: я пытаюсь подключиться к talk.google.com
и использую пример кода из MSDN.Разница лишь в том, что я отправляю данные раньше и когда пришло время использовать tls, я делаю следующее:
public void SecureStream()
{
netStream.Flush();
sslStream = new SslStream(netStream, false, new RemoteCertificateValidationCallback(ValidateServerCertificate), null);
sslStream.AuthenticateAsClient("talk.google.com");}
edit: мне удалось устранить первую ошибку (небольшая ошибка в том, как я обрабатывалотправить) теперь я всегда получаю
"Невозможно прочитать данные из транспортного соединения: установленное соединение было прервано программным обеспечением на вашем хост-компьютере."
edit2: Я не отправляю никаких пробелов. Iпереписал часть передачи сообщений и у меня все та же проблема.
Я начинаю с
String streamInit = "<stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' to='google.com' version='1.0'>";
client.Send(streamInit);
Затем при получении я получаю следующее
static void client_MessageReceived(SyncronousClient source, string Result)
{
if (Regex.IsMatch(Result, "<starttls xmlns=\"urn:ietf:params:xml:ns:xmpp-tls\"><required/></starttls>"))
{
String startTlS = "<starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls'/>";
source.Send(startTlS);
}
else if (Regex.IsMatch(Result, "<proceed xmlns=\"urn:ietf:params:xml:ns:xmpp-tls\"/>"))
{
//Do TLS Magic
source.SecureStream();
String streamReInit = "<stream:stream xmlns='jabber:client'xmlns:stream='http://etherx.jabber.org/streams'to='google.com'version='1.0'>";
source.Send(streamReInit);
}
else if (Regex.IsMatch(Result, "<mechanisms xmlns=\"urn:ietf:params:xml:ns:xmpp-sasl\">"))
{
//String AuthType = "<auth xmlns='urn:ietf:params:xml:ns:xmpp-sasl' mechanism='X-GOOGLE-TOKEN'/>";
String AuthType = "<auth xmlns=\"urn:ietf:params:xml:ns:xmpp-sasl\" mechanism=\"PLAIN\"/>";
source.Send(AuthType);
}}