thread resueltos programacion libro hilos evitar ejercicios ejemplos concurrente concurrencia clase multithreading ssl concurrency openssl

multithreading - resueltos - programacion concurrente java libro



Clarificación del soporte de simultaneidad OpenSSL 0.9.8L: ¿Pueden utilizarse instancias SSL mediante varios subprocesos si se realizan de forma no concurrente? (2)

1. Verdadero o Falso Las llamadas a la API de conexión OpenSSL (SSL_Read, SSL_Write, etc.) pueden ejecutarse simultáneamente en la misma instancia de SSL (puntero a SSL devuelto por una llamada SSL_new)?

* Falso No, no puede usar SSL_read / SSL_write al mismo tiempo en la misma instancia de SSL. *

2. Verdadero o Falso. Para los sockets de bloqueo donde SSL_MODE_AUTO_RETRY está habilitado, el hilo A puede llamar a SSL_Read () en la instancia X de SSL, mientras que el hilo B llama concurrentemente a SSL_Write () en la instancia SSL X?

* La misma respuesta que arriba. Con o sin SSL_MODE_AUTO_RETRY, no puede usar la misma instancia de SSL X concurrentemente para hacer SSL_read y SSL_write paralelamente *

3. Verdadero o Falso OpenSSL funciona sin errores cuando una aplicación utiliza sockets no bloqueantes y evita la ejecución simultánea de SSL_Read y SSL_Write (así como otras llamadas de API de conexión) en la misma instancia de SSL.

Cierto. Si no hay una ejecución simultánea allí, entonces OpenSSL funciona bien para el Bloqueo, así como Sockets No Bloqueos.

4. Verdadero o Falso Las instancias de OpenSSL SSL devueltas por SSL_new están vinculadas al único hilo que llamó a SSL_new; obligado significa que la instancia de SSL no se puede compartir con ningún otro subproceso, la instancia de SSL solo es válida para el uso en el subproceso que llamó SSL_new?

Falso. La instancia SSL no está vinculada a ningún hilo por OpenSSL. Puede usar la instancia de SSL creada en un hilo en otro hilo, siempre que solo un hilo esté usando una única instancia de SSL en cualquier punto del tiempo.

5. Verdadero o Falso. Si el hilo A i) llama a SSL_new, obteniendo una instancia de SSL X y ii) llama a SSL_Read utilizando la instancia de SSL X. Eventualmente ocurrirá una falla si el hilo B no invoca concurrentemente SSL_Read / SSL_Write usando la misma instancia de SSL X?

Falso. Tanto el Subproceso A como el Subproceso B pueden usar la misma instancia SSL X, siempre que ambas no realicen operaciones simultáneas en la instancia SSL X.

Tenemos una aplicación de red multiproceso que ha estado utilizando sockets durante 10 años y ahora estamos tratando de asegurar la aplicación con OpenSSL 0.9.8L. Con los años, los protocolos de red de la aplicación se han diseñado para aprovechar la naturaleza dúplex de una única conexión de socket; la aplicación lee y escribe al mismo tiempo en el mismo socket. La aplicación administra el socket subyacente y pasa el descriptor de socket a OpenSSL a través de SSL_set_fd.

Configuramos OpenSSL para soporte multiproceso, configurando las devoluciones de llamadas estáticas y dinámicas, por ejemplo, CRYPTO_set_id_callback (), CRYPTO_set_locking_callback (), etc. En su mayor parte, la aplicación funciona bien pero estamos viendo algunas anomalías. Para ayudarnos a determinar la causa, las respuestas definitivas a algunas preguntas ayudarían.

La página de Preguntas más frecuentes de OpenSSL indica que OpenSSL es seguro para la ejecución de subprocesos, pero mantiene que una única "conexión SSL puede no ser utilizada simultáneamente por varios subprocesos".

http://www.openssl.org/support/faq.html#PROG1

  1. Verdadero o falso. Las llamadas a la API de conexión OpenSSL (SSL_Read, SSL_Write, etc.) pueden ejecutarse simultáneamente en la misma instancia de SSL (puntero a SSL devuelto por una llamada SSL_new)?
  2. Verdadero o falso. Para los sockets de bloqueo donde SSL_MODE_AUTO_RETRY está habilitado, el hilo A puede llamar a SSL_Read () en la instancia X de SSL, mientras que el hilo B llama concurrentemente a SSL_Write () en la instancia SSL X?
  3. Verdadero o falso. OpenSSL funciona sin errores cuando una aplicación utiliza sockets no bloqueantes y evita la ejecución simultánea de SSL_Read y SSL_Write (así como otras llamadas de API de conexión) en la misma instancia de SSL.
  4. Verdadero o falso. Las instancias de OpenSSL SSL devueltas por SSL_new están vinculadas al único hilo que llamó a SSL_new; obligado significa que la instancia SSL no puede compartirse con ningún otro subproceso, la instancia SSL solo es válida para el hilo que llamó SSL_new?
  5. Verdadero o falso. Si el hilo A i) llama a SSL_new, obteniendo una instancia de SSL X y ii) llama a SSL_Read utilizando la instancia de SSL X. Eventualmente ocurrirá una falla si el hilo B no invoca concurrentemente SSL_Read / SSL_Write usando la misma instancia de SSL X?

Experimentalmente, si la conexión SSL ha pasado la etapa de negociación, y no hay renegociación después, entonces el uso de SSL_read y SSL_write simultáneamente no causó ningún daño. De acuerdo con mis pruebas, integé OpenSSL con Push Framework, una biblioteca de red multiproceso. Sin embargo, en todos los sitios donde leemos, los profesionales de OpenSSL insisten en que el mismo contexto no puede ser utilizado por múltiples hilos al mismo tiempo.