SSL (TLS v1.2) - ¿Puedo ofrecer CA de reserva cuando actualizo Certificados? (Java)

0

Actualmente estoy desarrollando un producto que involucra dos situaciones de red. En el lado del cliente, varias computadoras forman una red P2P (múltiples ubicaciones, múltiples redes p2p), y un subconjunto de nodos de cada red establece una conexión con un subconjunto de servidores que alojamos (para intercambios de datos, actualizaciones). Todos los servidores y clientes tienen certificados, firmados con un certificado de CA.

Mi problema ahora es la actualización de las CA (intermedias). No puedo asegurar una actualización simultánea de todas las máquinas a la vez (también para fallos, se agradecería un tiempo de transición), por lo que tiene que haber un período de tiempo en el que sean válidos múltiples certificados de CA, una versión heredada que se ejecutará en no. -tiempo no flexible, y una versión actualizada para reemplazarlo.

Dado que el cliente espera con su autenticación hasta que haya recibido el certificado del servidor, puede reaccionar ante una CA obsoleta y enviar su propia cadena de certificados heredada, y como la conexión en las redes p2p se intentará de ambas maneras, puedo ignore el caso en el que un cliente heredado se encuentra con un servidor actualizado y simplemente espere a que suceda al revés.

Pero eso no funciona para los servidores centrales, ya que los clientes pueden esconderse detrás de una Capa NAT, y me parecería feo cambiar la conexión en un modelo de cliente-servidor real. Trabajar con el certificado heredado hasta el día x sin ofrecer una transición sin problemas me parece arriesgado.

Entonces, finalmente, aquí está la pregunta, ¿es posible que un servidor SSL ofrezca un certificado de respaldo en caso de que el cliente desconozca la CA actual (intermedia)?

Tengo dos ideas para las soluciones (en caso de error, recuerde la dirección IP del cliente y envíe un certificado diferente al reintentar, o ejecute el servicio en puertos diferentes con certificados diferentes), pero como actualizar las CA es una cosa real, supongo que debería Se mejor solución.

Por favor, ilumíname.

    
pregunta Sebastian Mohr 12.10.2013 - 19:30
fuente

1 respuesta

1

La solución es: no hacer nada.

Los servidores y clientes SSL envían sus certificados como cadenas precisamente porque no pueden asumir que el par ya tendrá todos los certificados de CA intermedios necesarios. El punto central de las cadenas de certificados y de la CA intermedia es que una "parte dependiente" (jerga X.509 que significa aquí "un cliente o un servidor") puede validar una cadena, cualquier cadena, siempre que tenga la confianza ancla , que también se conoce como "certificado raíz" o "CA raíz". Es decir. la CA que no es una CA intermedia.

Por ejemplo, suponga que en su sistema hay una CA raíz que todos conocen a priori (para eso es la CA). Luego está la "antigua CA intermedia" llamada CA1, y la "nueva CA intermedia" llamada CA2. Anteriormente, el servidor tenía un certificado S1 emitido por CA1, pero ahora tiene un certificado S2 más reciente emitido por CA2. Un cliente se conecta. ¿Qué debe enviar el servidor? Bueno, el servidor simplemente envía la cadena CA2- > S2. Es posible que el cliente nunca haya visto CA2 antes; no importa. CA2 es emitido (firmado) por la raíz, y el cliente conoce y confía en la raíz, de modo que el cliente puede verificar la firma en el certificado de CA2, y así aprender que CA2 es una CA intermedia válida que el cliente no había encontrado hasta ahora. La validación del certificado continúa con la verificación de la firma en S2, por parte de CA2. Las cosas simplemente funcionan.

certificados X.509 funcionan en un modelo PKI jerárquico en el que los actores deben conocer la CA raíz y nada más . Estos certificados han sido diseñados con el propósito exacto de evitar el problema que está visualizando, es decir, la distribución de CA intermedia. Cualquier cliente (o servidor) puede construir dinámicamente cualquier cadena de confianza requerida en función de los certificados que tenga en cualquier momento, y dado que los certificados están encadenados, la forma en que se obtienen no es importante. En particular, pueden ser recibidos por el par, y esta transferencia no requiere confianza adicional.

Entonces, mientras todos los servidores (y el cliente) envíen sus certificados como parte de las cadenas que son válidas en ese momento, la validación funcionará.

Ahora, si estuvieras hablando de actualizar una CA raíz , entonces sí, eso sería complicado. La confianza se transporta a través de las firmas en los certificados; pero no se crea de la nada. Tiene que comenzar en alguna parte, y esa parte es un a priori , conocimiento intrínseco de un ancla de confianza. En resumen, realmente no quieres cambiar tu CA raíz a menudo, porque es un desastre. Se supone que una raíz es muy longeva. Y esto implica el uso de una CA intermedia, porque una raíz muy longeva es una cosa preciosa, por lo que realmente desea mantener la CA raíz fuera de línea y usarla tan poco como sea posible.

    
respondido por el Thomas Pornin 12.10.2013 - 21:52
fuente

Lea otras preguntas en las etiquetas