Práctica recomendada para verificar datos contra una CA

3

Supongamos que he firmado mi clave pública con una CA de confianza y la CA me proporcionó un certificado firmado, y quiero que las aplicaciones cliente verifiquen este certificado. El proceso general es que el cliente verifica la clave pública de la CA y no la mía, por lo que ni siquiera necesito transmitir la clave pública, pero ¿cuál es la mejor práctica para implementar esto en una aplicación cliente de C #?

Mi enfoque actual elegido es que en la aplicación del servidor, estoy almacenando el certificado (que contiene mi clave privada) en mi tienda local, que uso para firmar datos. Luego, en la aplicación cliente, estoy cargando el almacén raíz del usuario actual y paso el nombre del certificado de la CA que firmó mi certificado, y si esta CA se encuentra en la tienda, recupero su clave pública y verifico que ese. Si mi clave pública ha sido firmada por la CA, entonces la verificación debería tener éxito, de lo contrario fallará. ¿Es esta la forma correcta de implementarlo? Si no, por favor proporcione mejores soluciones.

Las siguientes son mis preguntas con respecto a mi enfoque elegido:

  1. ¿Puede cambiar el nombre del certificado de la CA? Si es así, tendría que cambiarlo en codigo Si esto puede cambiar, ¿qué más debo usar para buscar el certificado? Tal vez el número de serie?

  2. ¿Puede alguien crear el mismo nombre de certificado? Estoy asumiendo que tu puede. Por ejemplo, un hacker puede crear un nombre de certificado que es lo mismo que una CA establecida, pero obviamente depende del usuario agregarlo a la tienda de confianza en su máquina. Si él no lo hace, entonces el El hacker no tiene ningún poder en absoluto. Además, no creo que dos certificados pueden tener el mismo número de serie.

  3. Si mi clave privada es secuestrada y revoco el certificado, La verificación debe comenzar a fallar en las aplicaciones del cliente. Eso Comenzará a verificar con éxito una vez que comience a firmar los mensajes. con el certificado recién emitido por la CA. ¿Es correcto?

Finalmente, actualmente no poseo un certificado firmado, por lo que no puedo probar esto. Es por eso que estoy haciendo estas preguntas, de modo que si este enfoque es correcto, puedo proceder a comprar un certificado ya que conozco el camino a seguir. También, con suerte, esta pregunta podría ayudar a otras personas con el mismo problema.

Gracias de antemano.

    
pregunta seedg 15.10.2015 - 16:05
fuente

1 respuesta

1
  

Digamos que he firmado mi clave pública con una CA de confianza y la   CA me proporcionó un certificado firmado y quiero que cualquier cliente   Aplicaciones para verificar contra este certificado. El proceso general   es que el cliente verifica contra la clave pública de la AC, y no mi   propia, por lo que ni siquiera necesito transmitir la clave pública, pero ¿cuál es la   ¿Mejores prácticas para implementar esto en una aplicación cliente de C #?

SÍ necesita su clave pública (contenida en el certificado) en los clientes para validar la firma que ha hecho con su clave privada. Utiliza el certificado de CA para validar su firma de certificado (un certificado es una clave pública + alguna información sobre el propietario (asunto) del certificado).

Puede enviar su certificado en cada solicitud o hacer que se almacene en caché en el cliente, es decir, idioma independiente.

  

Mi enfoque actual elegido es que en la aplicación del servidor, estoy   almacenar el certificado (que contiene mi clave privada) en mi local   Tienda, que utilizo para firmar datos. Entonces, en la aplicación cliente, estoy   cargando la tienda raíz del usuario actual y paso el certificado   nombre de la CA que firmó mi certificado, y si se encuentra esta CA en   La tienda, recupero su clave pública y verifico contra eso. Si mi   la clave pública ha sido firmada por la CA, entonces la verificación debe   tener éxito, de lo contrario va a fallar. ¿Es esta la forma correcta de   implementándolo? Si no, por favor proporcione mejores soluciones.

No es la forma correcta. Debes tener tu certificado en el cliente. Verifique el certificado utilizando el certificado de CA y luego use su certificado (que contiene una clave pública) para verificar la firma.

  

Las siguientes son mis preguntas con respecto a mi enfoque elegido:

Todos estos no pasarán si usted valida correctamente su certificado contra el certificado de CA. Recomendaría no reinventar la rueda aquí, y usar una ruta de certificación estándar de una buena biblioteca, ya que es complejo hacerlo bien. Explicaré más arriba cómo se resuelve cada cosa en una validación de ruta de certificado:

  

¿Puede cambiar el nombre del certificado de la AC? Si es así, tendría que   cambiarlo en codigo Si esto puede cambiar, ¿qué más debo usar para   buscar el certificado? Tal vez el número de serie?

Su certificado tiene campos que identifican correctamente y exactamente a quien lo emite, utilizando muchos archivos del certificado que no deben colidarse. Si coinciden, aún así, la firma de su certificado debe coincidir.

  

¿Puede alguien crear el mismo nombre de certificado? Estoy asumiendo que tu   puede. Por ejemplo, un hacker puede crear un nombre de certificado que es   lo mismo que una CA establecida, pero obviamente le toca al usuario agregar   A la tienda de confianza en su máquina. Si él no lo hace, entonces el   El hacker no tiene ningún poder en absoluto. Además, no creo que   dos certificados pueden tener el mismo número de serie.

Eso se verá reflejado en la firma de la CA en su certificado, que usted verificará antes de usarlo.

  

Si mi clave privada es secuestrada y revoco el certificado,   La verificación debe comenzar a fallar en las aplicaciones del cliente. Eso   Comenzará a verificar con éxito una vez que comience a firmar los mensajes.   con el certificado recién emitido por la CA. ¿Esto es correcto?

Eso se resolverá mediante la verificación de revocación, que debe habilitar en la verificación de la ruta de certificación. Cuando la clave privada es secuestrada, debe pedirle a la CA que la revoque, y se agregará en una CRL (lista de revocación de certificados) que se verifica en la verificación de la ruta de certificación.

  

Finalmente, actualmente no poseo un certificado firmado, por lo que no puedo   prueba esto Es por eso que estoy haciendo estas preguntas, por lo que si   Este enfoque es correcto, puedo proceder a comprar un certificado ya que   saber el camino a seguir También, con suerte, esta pregunta podría ayudar a otros   Personas con el mismo problema.

Puede crear su propia CA y realizar pruebas, utilizando Microsofts CA, openssl u otras herramientas. Hay muchos tutriales en eso disponible.

    
respondido por el CristianTM 07.01.2016 - 13:43
fuente

Lea otras preguntas en las etiquetas