Ver Mensaje Individual
  #1 (permalink)  
Antiguo 09/03/2014, 14:54
chcma
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.429
Antigüedad: 20 años, 11 meses
Puntos: 7
Web Api + SSL + Certificado Cliente > Enviar certificado cliente desde Winforms

Buenas Foreros..

Tengo el IIS configurado con SSL, y también configurado para aceptar Certificados Cliente. Y funciona.

Quiero realizar una petición Web Api desde un aplicativo Windows (Cosa que ya sé hacer) enviado un Certificado. Ejecuto la aplicación, pulso el botón de enviar la solicitud al servidor, antes de enviarla selecciono el certificado que deseo utilizar, y envío la petición.

Sin embargo, en el lado del servidor el GetClientCertificate()... ME LLEGA A NULL.

Alguien sabe que puedo estar haciendo mal ??

Les dejo mi código:

Aplicación Windows
Código:
                //Creo el manejador de la petición, en la que adjunto un certificado cliente.
                var certHandler = new WebRequestHandler();
                certHandler.ClientCertificateOptions = ClientCertificateOption.Manual;
                certHandler.UseDefaultCredentials = false;
                certHandler.ClientCertificates.Add(objCertificate);                

                //Creo el objeto de la petición.
                var client = new HttpClient(certHandler);
                client.BaseAddress = new Uri("https://pchevia/WebTicketoCert/");


                //Indico en la cabecera que formato deseo recibir la petición.
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));                


                //Realizo la petición
                HttpResponseMessage response = client.GetAsync("api/Parking/StopParking/34543543").Result;
                
                //Recupero la respuesta (La cual siempre está siendo Rechazada, claro)
                if (response.IsSuccessStatusCode)
                {

                    var result = response.Content.ReadAsAsync(typeof(bool)).Result;

                }
                else
                {
                    MessageBox.Show("Error Code" +
                    response.StatusCode + " : Message - " + response.ReasonPhrase);
                }

En el lado del servidor cree un Atributo de validación que es el que tengo establecido en la clase del controlador, para siempre validar si me ha llegado el certificado.
Código:
    public class BasicAuthorizeAttribute : AuthorizationFilterAttribute
    {
        public override void OnAuthorization(HttpActionContext actionContext)
        {
              //Aqui ya debería de poder recuperar el certificado cliente
              var certificate = actionContext.Request.GetClientCertificate()

En fin... si alguien sabe que puede estar pasando, agradecería me diera un poco de soporte, por que la verdad... creo que es simple el proceso en sí, y no sé que puedo estar haciendo mal...

Gracias ya por vuestro tiempo y molestia en leer el post.

Un saludo.
__________________
Charlie.