.Net System.Security.SslStream クラスを使用して、クライアント認証で SSL/TLS ストリームのサーバー側を処理しようとしています。
ハンドシェイクを実行するために、次のコードを使用しています。
SslStream sslStream = new SslStream(innerStream, false, RemoteCertificateValidation, LocalCertificateSelectionCallback);
sslStream.AuthenticateAsServer(serverCertificate, true, SslProtocols.Default, false);
残念ながら、これにより、CryptoAPI Trusted Root Store 内のすべての証明書のサブジェクト名を含む CertificateRequest を SslStream が送信することになります。
これをオーバーライドできるようにしたいと思います。信頼されたルート ストアから証明書をインストールまたは削除することをユーザーに要求することは、私にとって選択肢ではありません。
SslStream は下で SSPI/SecureChannel を使用しているように見えるので、その API で同等のことを行う方法を誰かが知っていれば、それも役に立ちます。
何か案は?