Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Сети > OpenSsl разбираюсь


Автор: null56 2.7.2009, 20:35
Проблема:
У меня возникла задача  использования на сервере библиотеки openssl, до поддержания безопасного соединения. Изначально планировалось использовать openssl через классы Qt (QSslSocket), но они не совсем хорошо они подходят под мою задачу, поэтому решил попробовать комбинацию этих двух средств.

Хотелось бы задать несколько вопросов людям, которые уже активно используют openssl
С библиотекой в чистом виде НИКОГДА не работал, поэтому некоторые вопросы могут показаться глупыми.
Начал поиск информации по openssl и набрел на вот эти статьи
http://www.ibm.com/developerworks/linux/library/l-openssl.html?S_TACT=105AGX99&S_CMP=CP
http://www.ibm.com/developerworks/linux/library/l-openssl2.html?S_TACT=105AGX99&S_CMP=CP
http://www.ibm.com/developerworks/ru/library/l-openssl3/index.html

1) Библиотека, я так понял, написала на C, а значит является переносимой между платформами, поэтому вопрос: смогу  ли я использовать данную библиотеку для работы с сокетами под linux и windows

2) Читая статью заметил это
Цитата

Listing 1. Required headers

#include "openssl/bio.h"
#include "openssl/ssl.h"
#include "openssl/err.h"

Это получается сердце библиотеки, которое содержит всё необходимое для создания защищенного канала и обмена по нему данными, используя сертификат и закрытый ключ? (ну err.h, я так понял для строк с ошибками).
Что потребуется еще?

3) Если у кого есть подробные маны для работы с опенссл, киньте пожалуйста ссылочки

4) Если у кого есть под рукой, то скиньте пожалуйста элементарный примерчик использования библиотеки на серверной и клиентской сторонах... до остального допру из манов
Достаточно было бы соединения, обмена ключами, передача данных туда сюда

Заранее благодарен за помощь


Автор: jonie 2.7.2009, 22:43
Цитата



1) Библиотека, я так понял, написала на C, а значит является переносимой между платформами, поэтому вопрос: смогу  ли я использовать данную библиотеку для работы с сокетами под linux и windows
да. более того вы можете использовать "местные" сокеты openSSL - т.н. BIOSocket-ы, если мне не изменяет память (собственно их и будете использовать).

Цитата
Это получается сердце библиотеки, которое содержит всё необходимое для создания защищенного канала и обмена по нему данными, используя сертификат и закрытый ключ? (ну err.h, я так понял для строк с ошибками).
Что потребуется еще?

это хедеры, сама библиотека состоит из многих файлов. Если вы будете использовать уже скомпилированную версию то понадобятся lib файл-ы, и , если библиотека скомпонована как динамическая, dll\so файлы самой библиотеки.

Цитата
3) Если у кого есть подробные маны для работы с опенссл, киньте пожалуйста ссылочки
4) Если у кого есть под рукой, то скиньте пожалуйста элементарный примерчик использования библиотеки на серверной и клиентской сторонах... 
в исходниках openSSL есть примеры (и не один) и документация по работе с ней.


Автор: null56 3.7.2009, 13:12
Если я буду получать новые соединения в виде дескрипторов сокетов (int), не средствами BIO, то есть без BIO_do_accept. То смогу ли я потом связать этот дескриптор с объектом BIO, если да, то я так понимаю, это должна сделать одна из этих функций?
Код

        long BIO_set_fd(BIO *b, int fd, long close_flag);
        BIO *BIO_new_socket(int sock, int close_flag);

Так же хотел спросить:
1) Что такое close_flag? я до них еще не дошел или не допер...
2) Где мне можно сказать сокету, что я хочу работать в неблокирующем режиме? это нужно сделать fcntl или в openssl библе есть свои методы?

Автор: MAKCim 4.7.2009, 09:13
Цитата(null56 @  3.7.2009,  13:12 Найти цитируемый пост)
1) Что такое close_flag? я до них еще не дошел или не допер...

сокет закрывается при освобождении (free()) объекта BIO


Цитата(null56 @  3.7.2009,  13:12 Найти цитируемый пост)
2) Где мне можно сказать сокету, что я хочу работать в неблокирующем режиме? это нужно сделать fcntl или в openssl библе есть свои методы?

насколько я знаю, таких методов нет

Автор: null56 4.7.2009, 13:07
MAKCim, по поводу блокирующего - неблокирующего.... кусок из статьи
Цитата

BIO_read will attempt to read a certain number of bytes from the server. It returns the number of bytes read, or 0 or -1. On a blocking connection, a return of 0 means that the connection was closed, while -1 indicates that an error occurred. On a non-blocking connection, a return of 0 means no data was available, and -1 indicates an error. To determine if the error is recoverable, call BIO_should_retry. 

а по умолчанию в какой режиме работает сокет через BIO?

Автор: MAKCim 5.7.2009, 09:08
Цитата(null56 @  4.7.2009,  13:07 Найти цитируемый пост)
а по умолчанию в какой режиме работает сокет через BIO?

по-умолчанию создается блокирующий сокет (через socket()), поэтому и BIO_s_socket работает в блокирующем режиме

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)