我正在尝试使用.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");}
编辑:我设法消除了第一个错误(关于我如何处理发送的小错误)现在我总是得到
“无法从传输连接中读取数据:已建立的连接已被主机中的软件中止.”
edit2:我没有发送任何空格我重写了消息传递部分,我仍然有同样的问题.
我开始
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); }}
解决方法
这不太可能是您的问题(除非.Net已经开始在SNI下开展),但是当您调用AuthenticateAsClient时,请传入您在流属性中使用的相同域名(在本例中为google.com).同样,您可能需要gmail.com而不是google.com:
sslStream.AuthenticateAsClient("gmail.com",null,SslProtocols.Tls,false);
正如csharptest.net所提到的那样,确保你没有发送额外空格的keepalive计时器,或等到TLS工作之后才启动计时器.我可以想象你得到这个错误的唯一另一种方法是,如果你没有服务器实现的密码套件,但我知道.Net SslStream可以对抗GTalk.
最后,使用现有的.Net库中的一个用于XMPP(有5个列出的here),您可以立即开始编写更多有趣的代码.您将要遇到.Net XML系统的不足之处,当您在单次读取中开始获取部分节或多个节时,基于正则表达式的方法将无法工作.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。