¿El método más seguro para los certificados autofirmados en el cliente?

1

Contexto del problema

Estoy escribiendo una pieza de middleware. El middleware se ejecuta en una máquina cliente. Descarga material de un servidor (usando SSL normal), descifra el material usando una clave privada en la máquina cliente y proporciona una interfaz estándar para que accedan aplicaciones de terceros. Las aplicaciones de terceros esperan un certificado SSL, incluso cuando están configuradas para conectar mi middleware en localhost . No quiero que mis usuarios tengan que hacer clic en las excepciones de seguridad, y en estos días ni siquiera todas las aplicaciones permiten que se hagan excepciones de seguridad.

Por lo tanto, después de la instalación, mi aplicación debe admitir una conexión SSL sin que el usuario tenga que luchar contra un certificado autofirmado, pero obviamente sin abrir al usuario a los ataques MITM.

Solución propuesta

Este es el mejor plan que tengo ahora para el proceso de instalación del cliente:

  1. Generar una CA localmente
  2. Genere un certificado localmente para el dominio localhost
  3. Utilice la CA para firmar el certificado
  4. elimine el archivo .key de la CA para que nunca pueda ser reutilizado
  5. instale el archivo .cert de CA en la lista de CA de confianza del sistema

Pregunta

  • ¿Hay agujeros de seguridad en este plan?
  • ¿Se está utilizando esta estrategia en otro lugar?
  • ¿Hay una mejor manera de abordar el problema?

Aclaración

Permítame ser muy claro, el servidor tiene un certificado SSL. Cuando el middleware se comunica con el servidor, utiliza SSL. Eso no está en cuestión. Es la conexión entre el cliente de terceros y el middleware (que están ambos en la máquina cliente) lo que está en cuestión.

Lo que debe funcionar: Necesito que clientes de terceros se conecten a mi middleware como si fuera un servidor remoto en una fasion perfecta. Si el cliente de terceros fuera un navegador, se vería como un pequeño ícono de candado verde al lado de https. El usuario no debe tener que aceptar excepciones de seguridad. Algunos clientes de terceros no permitirán excepciones de seguridad en absoluto, lo que resultará en un rechazo absoluto de los certificados autofirmados. Eso es obviamente desagradable para mis usuarios.

Contra lo que estoy tratando de protegerme: no quiero agregar una CA a la máquina cliente que permita a cualquier persona que acceda a la máquina ejecutar ataques MITM. Es por eso que estaría eliminando el archivo .key de CA tan pronto como se firmara el certificado localhost . En teoría, se podría lanzar un ataque MITM solo con el certificado localhost generado, pero solo contra las conexiones localhost , y no contra el www.mybank.com .

Lo que no veo como una amenaza: cualquier persona que tenga acceso al equipo cliente ya tendrá acceso a todo lo que haya pasado entre el cliente de terceros y el middleware, como no lo hacen los clientes de terceros. Encripta los materiales que reciben del middleware. Por lo tanto, no veo que la seguridad del certificado localhost generado sea particularmente relevante.

    
pregunta rexroni 05.10.2017 - 07:50
fuente

2 respuestas

1

La pregunta que debe aclarar es contra qué está tratando de protegerse. Su solución está bien si todo lo que necesita es el pequeño ícono de candado verde en el navegador, pero se vuelve mucho más complicado a medida que comienza a requerir más.

Por ejemplo, ¿está tratando de proteger la aplicación de un ataque (¿qué ataques?), o está tratando de proteger al usuario de un atacante que reutiliza el certificado de localhost por otras razones?

En cualquier caso, un atacante en la máquina puede obtener acceso a la clave privada sin procesar del certificado localhost, o acceder a usar la clave privada, independientemente del estado de la CA.

Esto se puede hacer más difícil ejecutando el servicio como una cuenta de servicio separada y bloqueando la clave para ese usuario, pero cualquier administrador en la máquina puede omitir esto. Luego, puede mitigar esto aún más asegurándose de que los usuarios humanos no se estén ejecutando como administrador (esto naturalmente resulta ser la parte difícil).

    
respondido por el Steve 05.10.2017 - 17:18
fuente
0

Depende de su relación con las personas que consumirán el servicio que está diseñando. Lo que describe significa que no puede revocar el certificado emitido. ¿Cómo haría usted (o alguien más) para eliminar la confianza del certificado?

  

¿Hay una mejor manera de abordar el problema?

Vaya a comprar un certificado de una autoridad de certificación pública existente (u obtenga uno gratis de "Vamos a cifrar").

    
respondido por el symcbean 05.10.2017 - 14:41
fuente

Lea otras preguntas en las etiquetas