2015-01-08 26 views
6

自分自身の証明書を自動的に生成するJava Nettyベースのサーバーに接続しようとしています(クライアントからの証明書今のところサイド)。リモートパーティがWPFでトランスポートストリームの例外をクローズしたためにソケットと認証に失敗しました

私の仕事は、TcpSocket接続をTls暗号化接続に移行することでした。

using (var client = new NetworkStream(connection.TcpSocket)) 
{ 
    if (client.CanRead) 
    { 
     client.BeginRead(recvState.DataBuffer, 0, recvState.DataBuffer.Length, ReceiveCallback, 
     recvState); 
    } 
} 

をし、それが完璧に働いている:

まず第一に、私はNetworkStreamにTcpSocketを変換します。

client.pfxは、プロジェクト内のファイルとして、パスワードのないランダムな証明書であり、また certmgr.mscCurrent User Certificates > Personal > Certificatesにインポート
using (var client = new NetworkStream(connection.TcpSocket)) 
using (var sslStream = new SslStream(client, false, App_CertificateValidation)) 
{ 
    var clientCertificate = new X509Certificate2("client.pfx"); 
    var clientCertificateCollection = new X509Certificate2Collection(new[] { clientCertificate }); 
    sslStream.AuthenticateAsClient("MyServer", clientCertificateCollection, SslProtocols.Tls, false); 

    if (sslStream.CanRead) 
    { 
     sslStream.BeginRead(recvState.DataBuffer, 0, recvState.DataBuffer.Length, ReceiveCallback, 
     recvState); 
    } 
} 

:のようなここに - それでは、私はSslAuthenticationを構築することを決めました。相手 は、トランスポートストリーム例外を閉鎖したため、認証に失敗しました:

問題はAuthenticateAsClientが

System.IO.IOExceptionをスローです。

また、AuthenticateAsCtlientメソッドのホスト名が何かを意味する場合、サーバーはすべての証明書を受け入れますか?私はそこに何か重要なものを置くべきでしょうか?

私はまだサーバーの人と連絡を取ることができるので、私はすべてのことを尋ねることができます - 追加情報が必要ですか?

+0

修正済みですか?私はここで同じ状況があります。ありがとう –

+0

いいえ。まだ助けを待っている。 – Zozo

答えて

6

これは機能しています。

その認定ストレージ秘密鍵 WITH証明書にインストールされているソケットサーバーMUSTをホストしているサーバー。それをインストールせずに(証明書または公開鍵だけで)インストールすると、認証に失敗した場合のエラーが表示されます。

私は助けてくれることを願っています。

+0

この回答をサーバーチームに渡すつもりです。ありがとうございました! – Zozo

+0

私のアプリケーションはメールを8〜10時間送信しますが、このような例外がスローされます。「リモートパーティがトランスポートストリームを閉じたために認証に失敗しました。この場合の対処方法は?助けてください。 –

+0

あなた、ちょうどこのポストで私のお尻を保存しました。どうもありがとうございます!もし私ができるなら、私はあなたに私の評判のポイントを全部あげましょう!笑! – Brandon

関連する問題