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.