Enviando certificados digitales

2

Utilicé la herramienta makecert para crear:

  1. un certificado autofirmado
  2. un certificado de servidor utilizando el certificado autofirmado
  3. un certificado de cliente que utiliza el certificado autofirmado

Luego instalé el certificado autofirmado en la sección Autoridades de certificación de confianza en mmc.

El certificado del servidor y el certificado del cliente se instalaron en la sección Personal en mmc.

Luego implementé un servicio web en IIS como HTTP usando el certificado del servidor.

Luego tengo otra aplicación que hace uso del servicio web. Envía el certificado del cliente con la solicitud de servicio web, como se muestra a continuación:

public static void Main(string[] args)
        {
            X509Store store = new X509Store(StoreName.My, StoreLocation.LocalMachine);
            store.Open(OpenFlags.ReadOnly);
            X509Certificate2Collection col = store.Certificates.Find(X509FindType.FindBySubjectName, "client.com", true);

            if (col.Count == 1)
            {
                ServicePointManager.Expect100Continue = true;
                ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls;

                ClientServices web_service = new ClientServices();
                web_service.ClientCertificates.Add(col[0]);

                try
                {
                    string check = web_service.CheckCertificate();

                    Console.WriteLine(check);
                }
                catch (WebException e)
                {
                    Console.WriteLine(e.Message.ToString());
                }
            }

            else
            {
                Console.WriteLine("The certificate was not found!");
            }
            Console.ReadKey();
        }

En el lado del servidor, estoy comprobando el certificado de cliente de esta manera:

[WebMethod]
        public string CheckCertificate()
        {
            string message;

            try
            {
                X509Certificate2 cert = new X509Certificate2(Context.Request.ClientCertificate.Certificate);                

                if (cert != null)
                {
                    message = cert.SerialNumber.ToString();
                }

                else
                {
                    message = "Error: No certificate was found!";
                }
            }
            catch (Exception e)
            {
                message = e.Message.ToString();
            }
            return message;
        }

Siempre que ejecuto la aplicación cliente, aparece el siguiente mensaje de error:

La solicitud fue cancelada. No se pudo crear un canal seguro SSL / TLS.

¿Cómo puedo resolver este problema por favor? He estado estancado en esto durante dos días, por lo que cualquier ayuda sería enormemente apreciada.

    
pregunta Matthew 27.04.2013 - 16:54
fuente

1 respuesta

0

Resolví el problema. Instalé la herramienta WinHttpCertCfg y concedí acceso a la clave privada. El comando que funcionó para mí es:

WinHttpCertCfg.exe -g -c LOCAL_MACHINE \ MY -s "" -a TODOS

    
respondido por el Matthew 28.04.2013 - 09:42
fuente

Lea otras preguntas en las etiquetas