2009-12-03 1 views
1

У меня есть простой тип stream_t в C с вашими основными операциями чтения/записи и поддержка нескольких базовых реализаций с использованием указателей функций. Таким образом, поток может быть подкреплен файлом, буфером символов и т. Д.поток обертки SSL в C

Один тип потока - стандартный сокет POSIX, и я хотел бы закодировать поток оболочки, который добавит поддержку SSL к существующему потоку, аналогично .NET SslStream. Так что я мог бы написать что-то вроде этого:

 
stream_t *socket = something(); 

// wrap existing stream and perform handshake as client 
stream_t *ssl_stream = ssl_stream_create(socket); 
ssl_stream_authenticate_as_user(ssl_stream); 

// now all read/writes are encrypted and passed through to the wrapped stream 

я написал некоторые SSL код сокета перед использованием OpenSSL, BIO_new_connect(...) и т.д., но это более высокий уровень API, чем то, что мне нужно. Открывает ли OpenSSL функции, которые мне нужны, чтобы вручную выполнить рукопожатие и шифрование? Или есть какая-то другая библиотека, которую я могу использовать?

ответ

1

Я не знаю ни одной библиотеки, которую вы можете использовать, но вы можете найти множество образцов. Большинство приложений в C должны будут сделать то же самое для своего TCP-кода, поэтому версии SSL и raw socket не будут сильно отличаться.

Например, проверить ssl_unix.c Пайн IMAP,

https://svn.cac.washington.edu/public/alpine/snapshots/imap/src/osdep/unix/

Он делает именно то, что вы описываете с OpenSSL.

1

Я использовал BIO_s_mem в качестве обложки для операций сокетов SSL. Я читал и сам писал в сокет (вместо того, чтобы давать дескриптор OpenSSL и делать чтение/запись). Рукопожатие выполняется, когда вы вызываете SSL_accept (на стороне сервера) или SSL_connect (на стороне клиента). Кроме этого, просто позвоните SSL_read и SSL_write, чтобы сделать чтение и письмо.

 Смежные вопросы

  • Нет связанных вопросов^_^