Zmuszanie klienta ASP.NET WebAPI do wysyłania certyfikatu klienta, nawet jeśli nie pasuje do niego CA.

Mam określoną aplikację, która wymaga użycia certyfikatów klienta do wzajemnego uwierzytelniania żądań HTTPS. Serwer ma elastyczną zasadę sprawdzania poprawności certyfikatu, która umożliwia akceptowanie certyfikatów klienta z podpisem własnym, które nie występują w magazynie certyfikatów serwera. Wiadomo, że działa dobrze, używając curl jako klienta.

To, co określiłem za pomocą testów i wąchania pakietów, to ASP.NET MicrosoftuHttpClient stara się być zbyt inteligentny podczas uzgadniania SSL. Ten konkretny klient użyje tylko certyfikatu klienta (zWebRequestHandler.ClientCertificates kolekcja), jeśli ma łańcuch zaufania do jednego z zaufanych katalogów głównych serwera. Zauważyłem, że jeśli nie ma certyfikatów z łańcuchem zaufania, klient po prostu nie wyśle ​​certyfikatu podczas uzgadniania.

Jest to zrozumiałe zachowanie domyślne, ale jest zbyt restrykcyjne i wydaje się, że nie ma sposobu, aby go wyłączyć. Eksperymentowałem z różnymi innymiWebRequestHandler właściwości, w tymAuthenticationLevel iClientCertificateOptions ale bez skutku.

Czy istnieje sposób na życieHttpClient wysłać certyfikat klienta, gdy jest dostępny wClientCertificates kolekcji, nawet jeśli wydaje się, że nie będzie sprawdzać poprawności po stronie serwera? Jestem otwarty na zarówno proste, jak i brudne (hacki refleksyjne) rozwiązania, ponieważ naprawdę potrzebuję tego klienta do pracy.

questionAnswers(1)

yourAnswerToTheQuestion