Cómo diagnosticar la alerta Sin certificado

1

He escrito una solicitud (en C #) para comunicarme con uno de nuestros clientes a través de un servicio web. Nuestro cliente nos obliga a utilizar SSL bidireccional. El cliente nos ha enviado su certificado (en forma de un archivo .p7b). El certificado de cliente me fue proporcionado en forma de un archivo .cer.

He instalado los certificados y en el programa uso la clase HttpWebRequest y agrego el certificado del cliente a la colección de Certificados de Clientes.

Cuando ejecuto el programa obtengo una excepción:

System.Net.WebException: The request was aborted: Could not create SSL/TLS secure channel.

He utilizado WireShark para intentar diagnosticar el error y veo esto (direcciones IP eliminadas):

1615    12.259771000    CLIENT_IP   SERVER_IP   SSLv3   112 Client Hello
1629    12.429299000    SERVER_IP   CLIENT_IP   SSLv3   1488    Server Hello, Certificate, Certificate Request, Server Hello Done
1630    12.445672000    CLIENT_IP   SERVER_IP   SSLv3   397 Alert (Level: Warning, Description: No Certificate), Client Key Exchange, Change Cipher Spec, Encrypted Handshake Message
1645    12.666191000    SERVER_IP   CLIENT_IP   SSLv3   61  Alert (Level: Fatal, Description: Handshake Failure)

Parece que el servidor ha enviado su certificado, pero por alguna razón, mi aplicación no está devolviendo uno, por lo que envía la alerta Sin certificado. Sin embargo, en mi código, parece encontrar el certificado y se agrega a la colección ClientCertificate de la clase HttpWebRequest. Dado que soy bastante nuevo en SSL, no estoy seguro de cuál es el problema. Podría ser un error de programación, pero el uso de algunos certificados de prueba parece funcionar. ¿La alerta indica que hay un problema con el certificado del cliente? Algunas publicaciones que he leído parecen indicar que, aunque la clave privada no se envía al servidor, todavía es necesaria en el lado del cliente. Pero después de cargar el certificado (usando la clase .Net X509Certificate2), me doy cuenta de que la propiedad PrivateKey es nula. ¿Podría ser esta la fuente del problema? El archivo .cer me lo proporcionó otra persona de la empresa.

Cualquier ayuda o sugerencia sería útil. Me he abstenido de publicar el código porque no estoy seguro de que sea bienvenido aquí, pero puedo publicar algunos si es necesario.

    
pregunta Chris Dunaway 18.02.2014 - 17:32
fuente

1 respuesta

2

Bueno, no, eso no funcionará para ti. El punto de un certificado de cliente no es realmente la parte de certificado, sino la clave privada vinculada al certificado de cliente. Si no tienes la clave privada no puedes hacer nada útil. Lo que sucedería es que la solicitud que envía se cifra con la clave pública del servidor y se descifra con su clave privada. A la inversa, cualquier respuesta que el servidor envíe se cifra con su clave pública (el certificado). Para descifrar la respuesta necesitas una clave privada.

Lo que necesitas de las otras personas es el archivo PFX. En realidad, debe generar las claves localmente y enviarles el certificado del cliente. Sin embargo, solo el certificado, no la clave privada.

    
respondido por el Steve 18.02.2014 - 18:04
fuente

Lea otras preguntas en las etiquetas