5

SslStream / Tcp クライアント経由でサーバーに接続しようとしています。毎回、次のような例外が発生します。AuthenticateAsClient 行でトランスポート ストリームから予期しない EOF または 0 バイトを受信しました。

トレース ログを有効にしましたが、ログに次の 2 つのエラーが記録されています。

System.Net 情報: 0: [12260] SecureChannel#66702757::.ctor(ホスト名 = xxx.xx.xx.xxx、#clientCertificates = 0、encryptionPolicy = RequireEncryption)

System.Net 情報: 0 : [12260] SecureChannel#66702757 - 選択できるクライアント証明書が 0 個残っています。

これを解決する方法について誰かアドバイスをいただけますか?理由はわかりませんが、違いがある場合は外側のキャッチに投げています。

try
{
    TcpClient client = new TcpClient(_host, _port);
    // _stream = client.GetStream();

    _stream = new SslStream(client.GetStream(), false, ValidateServerCertificate, null);
    _sslReader = new StreamReader(client.GetStream());

    try
    {
        _stream.AuthenticateAsClient(_host);
    }
    catch (AuthenticationException e)
    {
        client.Close();
        return;
    }

    HandleConnect();
}
catch (Exception e)
{
    _logger.Error(e.BuildExceptionInfo());
}

public bool ValidateServerCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
    if (sslPolicyErrors == SslPolicyErrors.None || sslPolicyErrors == SslPolicyErrors.RemoteCertificateNameMismatch)
        return true;

    return false;
}
4

2 に答える 2

2

私の推測では、サーバーはクライアント証明書を必要としています。

于 2014-02-24T17:48:45.397 に答える
0

これは、Windows ビルド 20H2 に更新した後に発生しました。以前は次のように動作していました:

ssl.AuthenticateAsClient(_host);

enabledSslProtocolsしかし、パラメーターを明示的に に設定した後、証明書を使用せずに再び接続することができましたSslProtocols.Default

ssl.AuthenticateAsClient(_host, null, SslProtocols.Default, false);
于 2021-11-16T20:00:43.357 に答える