自分自身の証明書を自動的に生成する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.msc
で
Current 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メソッドのホスト名が何かを意味する場合、サーバーはすべての証明書を受け入れますか?私はそこに何か重要なものを置くべきでしょうか?
私はまだサーバーの人と連絡を取ることができるので、私はすべてのことを尋ねることができます - 追加情報が必要ですか?
修正済みですか?私はここで同じ状況があります。ありがとう –
いいえ。まだ助けを待っている。 – Zozo