Recientemente necesité configurar CocoaHttpServer, que estamos utilizando en nuestra aplicación con éxito, para manejar conexiones HTTPS provenientes de una aplicación cliente (que se ejecuta en dispositivos Android). Esto está bien, hay un código de muestra abundante que permite esto, y pudimos habilitar el servidor seguro sin problemas.¿Cómo se establecen los cifrados SSL cuando se usa CFSocket/CFStream en Cocoa?
En la práctica, estábamos viendo fases de negociación SSL increíblemente largas mientras el cliente estaba haciendo su intercambio de manos con nuestro servidor: más de 70 segundos.
A través de una larga serie de búsquedas, encontré que la demora se debía al cálculo de los parámetros de Diffie-Hellman utilizados por defecto cuando SSL está habilitado en CFSocket. Este thread es donde comencé a encontrar la respuesta a mi problema.
Para que coincida con lo que nuestro servidor Windows estaba haciendo (utilizando un cifrado SSL menos seguro) Necesitaba configurar el cifrado explícitamente en la Mac, lo cual no es fácil cuando se usa AsyncSocket como contenedor para las comunicaciones de socket.
servidorNuestra Windows no usando: TLS_RSA_WITH_RC4_128_MD5) (0x04) RC4 128 bits MD5 de RSA
servidorNuestra Macintosh estaba usando: TLS_DHE_RSA_WITH_AES_256_CBC_SHA (0x039) AES de 256 bits SHA-1 efímero de Diffie-Hellman de intercambio de claves utilizando el certificado RSA
La diferencia en "seguridad" es grande, pero probablemente no vale la pena el esfuerzo/cálculo/demora que estábamos viendo. ¿Teatro de seguridad?
A +1 por sus esfuerzos, y por trabajar la frase "Security Theatre?" en su publicación :-) –
Esto es útil, pero debe dividir la respuesta y publicarla como respuesta a esta pregunta, para que no viva para siempre en la página No contestada. (Es totalmente kosher responder tu propia pregunta). – benzado