Obligando al cliente ASP.NET WebAPI a enviar un certificado de cliente incluso cuando ninguna CA coincide
Tengo una aplicación específica que requiere el uso de certificados de cliente para la autenticación mutua de solicitudes HTTPS. El servidor tiene una política flexible de validación de certificados que le permite aceptar certificados de clientes autofirmados que no están presentes en el almacén de certificados del servidor. Se sabe que esto funciona bien usando curl como cliente.
Lo que he determinado a través de las pruebas y la detección de paquetes es que ASP.NET de MicrosoftHttpClient
Intenta ser demasiado inteligente durante el protocolo de enlace SSL. Este cliente en particular solo utilizará un certificado de cliente (de laWebRequestHandler.ClientCertificates
colección) si tiene cadena de confianza a una de las raíces de confianza del servidor. Lo que he observado es que si no hay certificados con cadena de confianza, el cliente simplemente no enviará ningún certificado durante el protocolo de enlace.
Este es un comportamiento predeterminado comprensible, pero es demasiado restrictivo y no parece haber forma de desactivarlo. He experimentado con varios otrosWebRequestHandler
propiedades, incluyendoAuthenticationLevel
yClientCertificateOptions
pero fue en vano.
¿Hay una manera de forzarHttpClient
enviar un certificado de cliente cuando esté disponible en elClientCertificates
colección, a pesar de que parece que no se validará en el lado del servidor? Estoy abierto a soluciones tanto directas como sucias (hacks de reflexión) ya que realmente necesito que este cliente trabaje.