.net SslStream で tls トンネルを初期化しようとしていますが、ストリームを開いた後、常に次のエラーが発生します。
「トランスポート接続からデータを読み取れません: 確立された接続は、ホスト マシンのソフトウェアによって中止されました。」
TLS 接続を確立した後、2 番目のメッセージを送信した後。
この 4 日間、答えを探していましたが、役立つ情報がオンラインにありません!
編集: 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);
}}