我正在尝试使用 .net SslStream 初始化一个 tls 隧道,但在打开流后我总是收到以下错误:
“无法从传输连接读取数据:已建立的连接被主机中的软件中止。”
在我建立 tls 连接并发送第二条消息之后。
过去四天我一直在寻找答案,但网上没有任何有用的信息!
编辑:我正在尝试连接到 talk.google.com
我正在使用来自 MSDN 的代码示例。唯一的区别是我在使用 tls 之前和何时发送数据,我执行以下操作:
public void SecureStream()
{
netStream.Flush();
sslStream = new SslStream(netStream, false, new RemoteCertificateValidationCallback(ValidateServerCertificate), null);
sslStream.AuthenticateAsClient("talk.google.com");}
编辑:我设法消除了第一个错误(关于我如何处理发送的小错误)现在我总是得到
“无法从传输连接读取数据:已建立的连接被主机中的软件中止。”
编辑2:我没有发送任何空格我重写了消息传递部分,但我仍然遇到同样的问题。
我从
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);
}}