Hace poco me encontré con esta pregunta,¿cómo puedo utilizar un certificado de cliente si se recibe en el proxy de ARR y lo quiero utilizar en el servidor al que se redije el tráfico?.

Por defecto, ARR envía el certificado en un header X-ARR-ClientCert, así que nuestro problema debería estar resuelto.

Pero hay que tener en cuenta que el certificado se está transportando como un header, por lo que para poder acceder a él, deberíamos capturar ese header y cargarlo en un objeto certificado dentro del código de nuestra aplicación.

Este es un sencillo ejemplo que indica una forma de acceso a ese certificado:

      System.Text.ASCIIEncoding encoding=new System.Text.ASCIIEncoding();
      string cert = Request.Headers["X-ARR-ClientCert"];
       X509Certificate2 x509Cert2 = new X509Certificate2(encoding.GetBytes(cert));

Una vez tenemos este código, podemos utilizar el certificado dentro de la aplicación del mismo modo que si lo hubiese cargado utilizando el método Request.ClientCertificate

Si queremos deshabilitar el que se envíen los certificados de cliente, bastaría con borrar el valor del campo clientCertHeaderName. Se puede hacer con esta línea de código:

      appcmd .exe set config -section:system.webServer/proxy /clientCertHeaderName:""  /commit:apphost

 

Espero que os sirva de ayuda.

- José Ortega Gutiérrez