c# – .NET SslStream无效
我正在尝试使用.net SslStream对tls隧道进行初始化,但在打开流之后我总是得到以下错误:
“无法从传输连接中读取数据:已建立的连接已被主机中的软件中止.” 建立tls连接后,发送第二条消息后. 我一直在寻找过去四天的答案,但网上没有任何有用的信息! 编辑: 我正在使用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系统的不足之处,当您在单次读取中开始获取部分节或多个节时,基于正则表达式的方法将无法工作. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |