2012-01-27 9 views
5

He escrito una biblioteca de redes basada en eventos en C y ahora deseo agregar soporte SSL/TLS a través de OpenSSL. En lugar de usar SSL_read() y SSL_write(), prefiero que OpenSSL solo realice el cifrado/descifrado de los datos salientes/entrantes, permitiéndome transmitir/recibir los datos yo mismo.OpenSSL: realice en/descifrado sin SSL_read()/SSL_write()

Soy nuevo en SSL/TLS y OpenSSL, por lo que:

¿Hay una manera de tener OpenSSL única realizar el cifrado/descifrado de char matrices?

Algo así como size_t SSL_encrypt(const char *buf_in, size_t size_in, char *buf_out) sería genial.

Respuesta

9

Exactamente lo que ha pedido no es posible, porque con TLS no hay una correspondencia 1-a-1 entre enviar algo en la capa de aplicación y enviar algo en el socket de red. Eventos como las renegociaciones significan que a veces SSL necesita leer datos de la red para avanzar enviando datos, y viceversa.

Sin embargo, aún puede usar OpenSSL para realizar SSL, pero debe encargarse usted mismo de leer y escribir desde la red. Esto se hace llamando SSL_set_bio() en el puntero SSL en lugar de SSL_set_fd():

  1. Uso BIO_new_bio_pair() para crear un par BIO conectada. Las rutinas SSL leen y escriben un BIO, y el otro BIO será leído y escrito por su aplicación (lo que le permite pasar los datos al otro extremo por el método que desee).

  2. Utilice SSL_set_bio() en un nuevo objeto SSL para configurar el BIO de lectura y escritura en uno de los BIO del par generado.

  3. Use BIO_read() y BIO_write() en el otro BIO en el par para leer y escribir los datos del protocolo SSL.

  4. Uso SSL_accept(), SSL_connect(), SSL_read() y SSL_write() como normales en el objeto de SSL.

(No está claro qué ventaja que esto le daría en su aplicación, sin embargo: en este caso, realmente no se puede hacer otra cosa que leer y escribir exactamente lo OpenSSL que pasa, por lo que también podría dejar que nada hacer la lectura y la escritura también).

+0

Muchas gracias caf, es la primera vez que obtengo una explicación comprensible de cómo se supone que se usan las BIO. ¡Añadiendo +1 para esto! –