Поток-оболочка SSL в C - PullRequest
       12

Поток-оболочка SSL в C

1 голос
/ 03 декабря 2009

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

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

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 функции, необходимые для ручного выполнения рукопожатия и шифрования? Или я могу использовать другую библиотеку?

Ответы [ 2 ]

1 голос
/ 04 декабря 2009

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

Например, посмотрите ssl_unix.c из Pine IMAP,

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

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

1 голос
/ 03 декабря 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...