

サーバサイドの実装をOpenSSL(C++)、クライアントの実装をC#のSslStreamで行っています(.NET Framework 4.7.2を利用)。  
TLS通信のためのハンドシェイクはOpenSSLのSSL_acceptとSslStream.AuthenticateAsClientで実行していますが、ハンドシェイク中にエラーが起こった時にアラートをサーバへ送出する方法が分からずにいます。  
（例えばクライアントがサーバ証明書を受理しなかった場合、サーバにunknown_caを送出するべきなのですが、現状送出できないのでハンドシェイクが最後まで進んでしまいます。）  
クライアントは以下のように実装しています。

[code]

    private static ManualResetEvent connectDone = new ManualResetEvent(false);
    
    static void Main(string[] args)
    {
        using (Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp))
        {
        IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Parse(args[0]), 2500);
        IAsyncResult result = socket.BeginConnect(ipEndPoint, new AsyncCallback(OnConnectServer), socket);
    
        connectDone.WaitOne();
        }
    }
    
    private static void OnConnectServer(IAsyncResult asyncResult)
    {
        Socket socket = (Socket)asyncResult.AsyncState;
        socket.EndConnect(asyncResult);
    
        SslStream sslStream = new SslStream(
         new NetworkStream(socket),
         false,
         new RemoteCertificateValidationCallback(CertificateValidation)
        );
        try
        {
            sslStream.AuthenticateAsClient(serverName);
        }
        catch (AuthenticationException ex)
        {
            Console.WriteLine(ex.Message);
        }
        sslStream.Close();
        connectDone.Set();
    }
    
[/code]

SslStreamを使ってアラートをサーバへ送出する方法のわかる方はいらっしゃるでしょうか。


CC BY-SA 4.0
2021-02-24T01:21:09.113
74239
2021-02-24T01:21:09.113
44095
question
c# .net ssl
C# SslStreamでハンドシェイク中にTLSアラートを送出したい