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:
- Generar una CA localmente
- Genere un certificado localmente para el dominio
localhost
- Utilice la CA para firmar el certificado
- elimine el archivo .key de la CA para que nunca pueda ser reutilizado
- 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.