さまざまな SSL サービスを管理する必要があるサーバー アプリケーションを開発しています。各サービスには独自の証明書があります (もちろん、CN は異なります)。SNIを使用して正しい証明書を提供したいのですが、ストリームを認証する前に ClientHello (SNI 拡張機能がある場所) を読み取るのに苦労しています。
それがコードです:
byte[] ClientHello = new byte[3000];
Stream TargetStream = TargetTcpClient.GetStream();
//Whatever I write here let me be unable to successfully authenticate
//If I don't read anything (like in this way), it works perfectly
int ClientHelloN = 0; //TargetStream.ReadByte();// TargetStream.Read(ClientHello, 0, 3000);
/*SNI Logic to extract Server-name*/
Certificate = new X509Certificate2(/*PATH TO CORRECT CERTIFICATE*/);
SslStream SSLStream = new SslStream(TargetStream);
SSLStream.AuthenticateAsServer(Certificate);
プレフィックス付きの証明書を使用して直接認証しても問題はありませんが、認証前にストリームから 1 バイトでも読み取ろうとすると、AuthenticateAsServer メソッドで永遠にループします。