2010-04-23 16 views
5

Tengo una duda muy básica en SSL HandShake. Supongamos que tenemos un servidor S que utiliza certificados autofirmados. Escribo un cliente C de Java que se conecta a la S. Cuando C se conecta a S, C obtiene certificados de S y los guarda en su almacén de confianza y continúa la parte restante de la comunicación. Después de un tiempo, utilizo la misma C para conectarme a la S, por lo que S enviará los certificados nuevamente a C, o C usará los certificados ya almacenados en el almacén de confianza. No soy bueno en SSL y en la implementación subyacente de la funcionalidad Truststore en Java.SSL HandShake en Java Client

¿Enviarán los certificados a C invariablemente si la C tiene certificados en su almacén de confianza? Creo que si tengo certificados en Truststore C Trusts S y C no pedirán certificados cuando me vuelva a conectar. ¿Mi suposición es correcta?

¿El proceso es el mismo para los certificados autofirmados y los certificados de CA?

Gracias de antemano.

+1

Escribí un simulador de https en java. Pude simular 12000 - 15000 solicitudes en 15 segundos utilizando certificados autofirmados. ¿Pero lleva 3 minutos usar certificados de CA? Realmente no entiendo por qué sucede esto. ¿Hay alguna diferencia sutil en el manejo de los certificados autofirmados contra CA? – JKV

Respuesta

6

Esta es mi comprensión de SSL, no soy un experto en el tema, pero a falta de otras respuestas espero poder al menos darle algunas cosas en qué pensar.

Cuando crea un certificado autofirmado para el servidor, necesita agregarlo al cliente de alguna manera, no se instala tan pronto como el cliente se conecta; de lo contrario, cualquier servidor podría convertirse en confiable mediante el envío de un certificado autofirmado a todo lo que intente conectarse a él. En mi aplicación, el certificado del servidor se carga en el almacén de confianza del cliente cuando se inicia especificando javax.net.ssl.truststore ("ruta/a/servidor/cert");

Ahora, cuando el cliente se conecta al servidor, se produce el apretón de manos. En este punto, el servidor enviará su certificado al cliente y el cliente confirmará que, de hecho, proviene del servidor, al marcarlo en su almacén de confianza (en este punto no importa si es autofirmado o no, porque el cliente debe verificar los certificados raíz, así como los que haya agregado). Si el certificado enviado por el servidor verifica, la comunicación continúa y los datos se comparten.

Hay alguna forma de behvaiour de sesión que tiene lugar que permite que la comunicación continúe sin tener que intercambiar certificados cada vez. Pero creo que esto se limita a la conexión única, por lo que tan pronto como cierre la conexión y cree una nueva, el proceso debe repetirse, es decir, el servidor debe enviar su certificado para su validación nuevamente.

Por lo tanto, en resumen: el certificado de servidor autofirmado debe instalarse en el cliente fuera de la comunicación SSL (por ejemplo, cómo se instalan los certificados raíz de CA en un producto desde el principio). Cada conexión SSL hecha entre el cliente y el servidor requerirá que el servidor envíe su certificado al cliente para que pueda verificarlo contra su almacén de confianza.

Es posible que el servidor permita reanudar las sesiones, en cuyo caso no se volverá a enviar el certificado (pero no estoy seguro de en qué condiciones se puede reanudar una sesión, tal vez sea configurable en diferentes servidores) .

Espero que esto al menos te dé algo en qué pensar.

+0

Eso es bastante bueno.La capacidad de reanudación no está vinculada a las conexiones; por lo general, simplemente se trata de que la sesión tenga una duración determinada, comúnmente de cinco minutos, durante la cual las nuevas conexiones SSL entre los mismos pares SSL pueden reutilizar el secreto maestro generado al principio. –

+0

Escribí un simulador de https en java. Pude simular 12000 - 15000 solicitudes en 15 segundos utilizando certificados autofirmados. ¿Pero lleva 3 minutos usar certificados de CA? Realmente no entiendo por qué sucede esto. ¿Hay alguna diferencia sutil en el manejo de los certificados autofirmados contra CA? – JKV

+1

No creo que haya ninguna diferencia en la forma en que se manejan, pero podría haber diferencias en los certificados mismos. ¿Tal vez el tamaño de clave utilizado en el certificado autofirmado es más corto que los certificados de CA? Los certificados de CA pueden tener una larga cadena de certificados, por lo que para verificar el certificado del cliente debe buscar en una lista más larga de certificados de confianza. Hay formas de ver estas cosas usando openssl, creo. – DaveJohnston