¿Qué método de cifrado debo usar al conectar varios clientes a un servidor local?

3

Actualmente estoy escribiendo un proyecto en C usando OpenSSL / TLS y no tengo mucha experiencia en el cifrado. He establecido con éxito conexiones OpenSSL sin cifrar y tengo una experiencia relativamente alta en C / C ++. El proyecto implica la activación del hardware, por lo que los datos enviados son muy repetitivos y no confidenciales (solo unos pocos bytes, como los comandos de giro para un servo o una lectura de temperatura)

Básicamente tengo múltiples clientes en una red local que quiero conectar de forma segura a un servidor local. El sistema tiene que funcionar sin conexión. Todo lo que quiero ahora es establecer una conexión entre el cliente y el servidor para evitar conexiones no autorizadas. La autenticación y la restricción del usuario estarán restringidas por la aplicación en el servidor.

He estado buscando en Public Key Encryption pero, según tengo entendido, eso requiere una conexión a la CA que puede no estar disponible en todo momento. ¿Qué tan correcto es esto y cuáles son mis alternativas?

Una implementación simple de C también sería útil. Gracias

    
pregunta Flowx 07.08.2017 - 09:43
fuente

1 respuesta

3

TLS es el protocolo correcto para este propósito. No es necesario tener una conexión a Internet con TLS (es decir, su requisito para estar fuera de línea ), pero puede usar TLS con certificados autofirmados (simple pero no escala bien) o tener su propio certificado Autoridad (más compleja pero bien escalable).

  

Una implementación simple de C también sería útil.

Usando OpenSSL simple para TLS de una manera adecuada no suele ser simple. Existen muchas implementaciones de muestra en la web, pero a menudo no tienen suficiente validación de certificados. Si lo implementa usted mismo, debe asegurarse de que

  • la ruta de confianza, la caducidad, etc. se comprueba correctamente. Eso es lo que la mayoría de las muestras ya hacen porque puede hacerse de manera simple con OpenSSL. Consulte enlace para ver un ejemplo de cliente.
  • el asunto del certificado se compara con el esperado. Eso es lo que la mayoría de los ejemplos no hacen porque era demasiado complejo con versiones anteriores de OpenSSL. Pero, no hacer esto te abre al hombre en los ataques medios. Consulte enlace para ver cómo se puede hacer esto.
  • en el caso de una PKI en lugar de certificados autofirmados, la revocación debe verificarse con una CRL que necesita descargar de algún lugar o contra OCSP. Esto casi nunca se hace y es demasiado complejo con OpenSSL. No sé si hay algún código de ejemplo para esto.
respondido por el Steffen Ullrich 07.08.2017 - 10:29
fuente

Lea otras preguntas en las etiquetas