特定のルートまたはコントローラーに対してのみ SSL クライアント証明書を要求する

私はあなたとまったく同じ要件で、同じことをしようとしています。

ありえないという結論に達しました。私の回避策は 2 を使用することです WebHostBuilder オブジェクト - そうでない場所の 1 つ クライアント証明書が必要であり、するための証明書が 1 つ必要です .これには、各 IWebHost という欠点があります。 別のポートでリッスンする必要がありますが、あなたが説明したシナリオから、それは大きな問題ではないと思います.

これは同じプロセス内で行うため、このソリューションはその要件に適合します。


context.Connection.GetClientCertificateAsync(); でも同じ問題がありました 常に null を返していました。その後、IIS Express を介して Kestrel を常に実行していることに気付きました。

Visual Studio のデバッガー ツールバーから、IIS Express から自分のプロジェクトに変更しました。 Kestrel はコンソール アプリケーションとして起動され、クライアント証明書を取得できました。

IIS Express はクライアント証明書をサポートしていないと思うので、証明書は常に無視されていました.

質問の他の部分については; HttpsConnectionFilterOptions を使用する場合、Kestrel はこの粒度をサポートしていないと思います。 . Kestrel 接続フィルター オプションのソース コードから、クライアント証明書が null の場合、接続はドロップされます。 HttpsConnectionFilterOptions のソースコードを変更できるかもしれません そこから独自のフィルターを作成します。次に、 ClientCertificateValidation を使用できます クライアント証明書が送信されない場合に接続を許可するカスタム証明書検証方法を指定するプロパティ

これがお役に立てば幸いです。