2011-03-22 17 views
16

Se me considera usar zeromq como capa de mensajería entre mis aplicaciones. Al menos en algunos casos, quiero que la comunicación sea segura y estoy pensando en SSL.¿Cómo funciona zeromq junto con SSL?

¿Hay alguna forma estándar de habilitar ssl zeromq? Por lo que yo entiendo, no lo admite de la caja.

Sería bueno si acabo de tener un parámetro cuando connnecting a una toma de corriente (bool: UseSSL) :)

¿Alguna idea?

Respuesta

4

actualmente estamos implementando una solución clave pre-compartida utilizando 0mq que implementa un protocolo de intercambio de claves basado libremente en TLS/SSL.

Esencialmente, tenemos un servicio de agregador de datos que publica estado de cifrado de datos de salud durante un editor 0mq multidifusión. Se usa una clave simétrica (AES128) para cifrar los datos y se puede recuperar a partir de un segundo servicio que se ejecuta como un modelo de solicitud/respuesta más simple en 0mq.

Para recuperar la clave simétrica (PSK), estamos implementando el siguiente protocolo: cliente se conecta servidor envía su certificado cliente verifica el certificado del servidor contra una cadena de CA de confianza cliente envía su certificado servidor verifica el certificado de cliente en contra su cadena de CA Server cifra PSK usando la clave pública del cliente Server envía PSK cifrado al cliente cliente descifra PSK

una vez que un cliente tiene el PSK, puede descifrar los mensajes que se recuperan más de multidifusión.

También estamos buscando implementar un algoritmo de expiración de sesión que use dos claves con envoltura en el servicio de multidifusión. Una clave es la clave de sesión actual, y la segunda es la clave anterior que expira. De esta forma, un cliente tiene un poco más de tiempo para recuperar la nueva clave sin tener que almacenar en el búfer los mensajes cifrados antes de recuperar la nueva clave.

+0

¿Cómo es el progreso? – Anko

6

Entendiendo que esto no es realmente una respuesta a su pregunta, yo voy a ser la encriptación de los mensajes directamente con RSA, antes de enviarlos con 0mq.

En ausencia de un método de cifrado más integrado que está totalmente probado e implementado en mi plataforma de elección, eso es lo que voy a. 0mq acaba de lanzar la versión 4, que tiene encriptado, pero todavía se considera experimental y no es totalmente compatible con los enlaces de idioma.

Encriptar el mensaje, en lugar de la conexión, parece proporcionar la ruta de actualización más sencilla, y la diferencia para nuestros propósitos es prácticamente semántica dada la forma en que tendríamos que implementar el cifrado actualmente.

Editar: Sé más de cifrado ahora que lo hice cuando escribí esto, RSA no es una opción apropiada para el cifrado de datos del mensaje. Use AES, ya sea manualmente compartiendo claves (este es nuestro enfoque a corto plazo) o implementando un esquema de intercambio de claves como en la respuesta de Jim Miller ... pero tenga cuidado si usa el último enfoque, diseñando e implementando un esquema de intercambio de claves de forma segura es difícil. Mucho más difícil de lo que piensasPuede implementar SSL/TLS directamente (utilizando mensajes BIO), y otros lo han hecho, tampoco es simple, pero al menos saben que el esquema SSL es estándar de la industria y, por lo tanto, cumple con un requisito de seguridad mínimo.

En resumen, antes de que la curva elíptica criptografiada en ZMQ 4 se considere confiable y se convierta en estándar, la "solución aceptada" sería implementar SSL/TLS sobre la conexión manualmente y, en su defecto, usar AES 128 o 256 con un mecanismo seguro para compartir claves (compartir claves es donde RSA se usaría apropiadamente).

+2

Como esto acaba de recibir un voto positivo, actualicé mi respuesta para reflejar lo que aprendí desde que la escribí originalmente. – Jason