¿Es más seguro usar una CA si me autofirmo de todos modos?

11

Tenemos una aplicación web que ejecutamos para clientes en su stand en ferias. La comunicación entre los clientes y el servidor se realizó a través de HTTP hasta hace poco.

Actualmente estamos trabajando en la mejora de varios aspectos relacionados con la seguridad de esta aplicación. Por ejemplo, ahora implementé soporte para HTTPS y escribí un pequeño script para generar un certificado autofirmado para el servidor. Los clientes deben agregar este certificado a sus almacenes de certificados de confianza para que el navegador no se queje al respecto. Hasta ahora todo bien.

En el chat, alguien mencionó que nunca debería usar un certificado autofirmado independiente y que, en cambio, debería usar una autoridad certificadora para firmar mi certificado, incluso si la CA misma tiene su propia firma.

Dado que todavía tendría que confiar manualmente en la CA autofirmada en los clientes, no veo cómo esto tendría ningún beneficio desde el punto de vista de la seguridad. Supongo que sería un poco más conveniente en ciertos casos, pero generalmente borramos los clientes y el servidor después de cada implementación y volvemos a crear imágenes la próxima vez que tengamos que configurar el sistema.

    
pregunta Der Hochstapler 27.09.2013 - 22:10
fuente

1 respuesta

11

La distinción depende de algunos detalles sobre el certificado autofirmado y cómo reaccionarán el navegador y el sistema operativo.

Un certificado normal incluye una extensión Basic Constraints que contiene una bandera que indica si el certificado es para una CA o no; cuando el indicador es TRUE , el certificado se considera aceptable como emisor para otros certificados. Si la extensión falta por completo, el certificado debe considerarse como no CA.

Los certificados raíz de CA son "especiales"; No son verdaderos certificados. Son anclajes de confianza ; una TA es, nominalmente, una clave pública junto con un nombre. Es tradicional codificar anclajes de confianza como certificados, y como un certificado incluye un campo para una firma, algunos bytes deben almacenarse allí; allí nuevamente, la Tradición dice que haremos el certificado autofirmado . Sin embargo, nadie realmente comprueba esa firma; Los bytes basura de aproximadamente el tamaño correcto servirían igual de bien.

El punto difícil es que la interpretación de las extensiones de certificado, si las hay, que se encuentran en dicho "certificado de CA raíz", no es estándar. En particular, algunos CA históricos raíz datan de antes de la invención de la extensión Basic Constraints ; como certificados verdaderos, se interpretarían como "no CA", pero como son anclajes de confianza disfrazados de certificados, las reglas de interpretación normales no se aplican.

Por lo tanto, en algunos navegadores o sistemas operativos, un certificado que no es de CA (que carece de una extensión Basic Constraints , o incluso que presenta uno con el indicador cA establecido en FALSE ), una vez instalado en la tienda "CA raíz", muy bien puede comenzar a ser aceptado como un CA. Por lo tanto, la confidencialidad de la clave privada para cualquier certificado instalado en el almacén de confianza del usuario es bastante crítica.

¿Cuál es la diferencia en tu caso? Después de todo, en tu situación, hay dos opciones:

  • Crea un certificado autofirmado para su servidor y el usuario lo instala como "de confianza".
  • Crea un certificado CA autofirmado, que el usuario instala como "de confianza". Usted emite un certificado normal para su servidor con esta CA.

En ambos casos, el usuario entrega su seguridad a algún certificado suyo, que el usuario instala como "confiable". Entonces, ¿qué cambiaría?

La diferencia es que si utiliza una CA personalizada, puede almacenar la clave privada correspondiente con una buena protección. Por ejemplo, usted hace el negocio de CA en una computadora portátil que se mantiene fuera de línea en todo momento. No hay posibilidad de una explotación remota cuando no hay ninguna red. La CA raíz siempre debe estar fuera de línea y usarse solo como parte de los procedimientos manuales y las llaves USB para la transferencia de datos. Por otro lado, su servidor es, bueno, un servidor, por lo que está en línea y está intrínsecamente expuesto. Un atacante que piratee su servidor puede obtener una copia de la clave privada del servidor. Si la clave pública correspondiente se ha instalado como "raíz de confianza" en las máquinas de los usuarios, el atacante también gana mucho apalancamiento en estas máquinas.

Dicho brevemente, hacer una CA personalizada distinta del certificado del servidor (como se usa durante todo el día) permite una mejor protección de la clave privada y, por lo tanto, un menor riesgo de una escalada de potencia del atacante catastrófico.

Hay navegadores que no son tan vulnerables . Lo que realmente desea, con un certificado de servidor autofirmado, es que los usuarios confíen en ese certificado only para las conexiones SSL (no como CA), y solo para esa específica servidor. Firefox sabe cómo hacerlo; se denomina "excepción de seguridad" en la terminología de Firefox (consulte Preferencias - > Avanzadas - > Certificados - > Ver certificados, luego la pestaña "Servidores").

    
respondido por el Tom Leek 27.09.2013 - 23:25
fuente

Lea otras preguntas en las etiquetas