Как начать работу с OpenSSL?
От: Kelasant  
Дата: 08.03.05 10:50
Оценка:
Очень мало инфы о настройке и подключении.

Скачал библиотеку, установил.
Начал последовательно выполнять функции начала соединения.
SSL_library_init();
SSL_CTX_new();
SSL_new();
SSL_set_fd() (или BIO — вообще не понял, что это такое);

Все ок.
Но на попытке соединиться с помощью
SSL_connect() на клиенте и SSL_accept() на сервере
получаю ошибки.
Приходит в голову, что не настроены ключи, сертификаты и прочее в настройках.
Но структуры данных сильно навороченные и мало документированы — мне неясно, куда идти,
чтобы все это генерировать и подставлять.

Немного о задаче.
Мне нужно установить защищенное соединение между клиентом и сервером.
Мне не нужны постоянные ключи, сертификаты и прочее.
Соединение мне нужно установить одноразовое — на каждый сеанс сделать новые ключи, обменяться ими, потом передать данные туда-сюда и все — все эти ключи и прочее мне сохранять не надо.
Это реально или надо делать постоянные ключи?

Кто сможет обьяснить?
Re: Как начать работу с OpenSSL?
От: MaximE Великобритания  
Дата: 08.03.05 16:12
Оценка:
Kelasant wrote:

> Очень мало инфы о настройке и подключении.

>
> Скачал библиотеку, установил.
> Начал последовательно выполнять функции начала соединения.
> SSL_library_init();
> SSL_CTX_new();
> SSL_new();
> SSL_set_fd() (или BIO — вообще не понял, что это такое);
>
> Все ок.
> Но на попытке соединиться с помощью
> SSL_connect() на клиенте и SSL_accept() на сервере
> получаю ошибки.
> Приходит в голову, что не настроены ключи, сертификаты и прочее в настройках.
> Но структуры данных сильно навороченные и мало документированы — мне неясно, куда идти,
> чтобы все это генерировать и подставлять.

Скачай сорсы, там есть фолдер samples. Там все проще некуда.

> Немного о задаче.

> Мне нужно установить защищенное соединение между клиентом и сервером.
> Мне не нужны постоянные ключи, сертификаты и прочее.
> Соединение мне нужно установить одноразовое — на каждый сеанс сделать новые ключи, обменяться ими, потом передать данные туда-сюда и все — все эти ключи и прочее мне сохранять не надо.
> Это реально или надо делать постоянные ключи?

Реально. Используй "ADH" шифры. http://rsdn.ru/Forum/?mid=1017231
Автор: MaximE
Дата: 09.02.05


--
Maxim Yegorushkin

Those who do not understand Unix are condemned to reinvent it, poorly. © Henry Spencer
Posted via RSDN NNTP Server 1.9
Re[2]: Как начать работу с OpenSSL?
От: Kelasant  
Дата: 09.03.05 08:41
Оценка:
ME>Скачай сорсы, там есть фолдер samples. Там все проще некуда.

ME>Реально. Используй "ADH" шифры. http://rsdn.ru/Forum/?mid=1017231
Автор: MaximE
Дата: 09.02.05


ME>--

ME>[i]Maxim Yegorushkin

Спасибо. Начну рассматривать.
Re[2]: Как начать работу с OpenSSL?
От: SkyDance Земля  
Дата: 09.03.05 10:03
Оценка:
"MaximE" <5711@users.rsdn.ru> wrote in message news:1060701@news.rsdn.ru...
> Реально. Используй "ADH" шифры. http://rsdn.ru/Forum/?mid=1017231
Автор: MaximE
Дата: 09.02.05


Кстати, об OpenSSL и ADH, а также неблокирующих сокетах...
Как *правильно* с помощью OpenSSL решить такую задачу:

Есть класс (исходников, ессно, нет), что-то вроде MFC-шного CAsyncSocket. Набор функций стандартный, create, bind, listen, connect, accept, read, write, close. Поскольку это все жутко асинхронное, есть соответствующий набор completion events, то бишь onaccepted, onreadcomplete, onwritecomplete.
Надо сделать CSSLSocket, который будет давать все то же, но уже с SSL-ем, через методы базового класса asyncSocket.

Но ведь openSSL ни о каких acyncsocket не знает. Правильно ли я понимаю, что нужно написать свой BIO-"якобы-класс", который бы работал сквозь asyncSocket, или есть методы проще?
Posted via RSDN NNTP Server 1.9
Re[3]: Как начать работу с OpenSSL?
От: MaximE Великобритания  
Дата: 09.03.05 10:17
Оценка:
SkyDance <38094@users.rsdn.ru> wrote:

> "MaximE" <5711@users.rsdn.ru> wrote in message news:1060701@news.rsdn.ru...

>> Реально. Используй "ADH" шифры. http://rsdn.ru/Forum/?mid=1017231
Автор: MaximE
Дата: 09.02.05

>
> Кстати, об OpenSSL и ADH, а также неблокирующих сокетах...
> Как *правильно* с помощью OpenSSL решить такую задачу:
>
> Есть класс (исходников, ессно, нет), что-то вроде MFC-шного CAsyncSocket. Набор функций стандартный, create, bind, listen, connect, accept, read, write, close. Поскольку это все жутко асинхронное, есть соответствующий набор completion events, то бишь onaccepted, onreadcomplete, onwritecomplete.
> Надо сделать CSSLSocket, который будет давать все то же, но уже с SSL-ем, через методы базового класса asyncSocket.
>
> Но ведь openSSL ни о каких acyncsocket не знает.

А ему и не нужно этого знать. OpenSSL не работает с событиями на сокетах.

> Правильно ли я понимаю, что нужно написать свой BIO-"якобы-класс", который бы работал сквозь asyncSocket, или есть методы проще?


Не нужно. Для блокирующих сокетов ты просто вызываешь SSL_connect/accept/read/write. Для неблокирующих/асинхронных ты так же вызываешь эти же ф-ции при получении событий готовности твоих сокетов, используя любую модель событий готовности сокетов на твоей платформе.

--
Maxim Yegorushkin

Those who do not understand Unix are condemned to reinvent it, poorly. © Henry Spencer
Posted via RSDN NNTP Server 1.9
Re[4]: Как начать работу с OpenSSL?
От: SkyDance Земля  
Дата: 09.03.05 11:22
Оценка:
"MaximE" <5711@users.rsdn.ru> wrote in message news:1061469@news.rsdn.ru...
> неблокирующих/асинхронных ты так же вызываешь эти же
> ф-ции при получении событий готовности твоих сокетов,
> используя любую модель событий готовности сокетов на твоей платформе.

Не совсем понимаю.
OpenSSL жестко issue'ит вызовы к сокетным функциям (send/recv и т.п.). Но они для тех самых "почти-async-socket" невалидны, да и самого file descriptor для сокета нет как такового — все скрыто от меня.
Posted via RSDN NNTP Server 1.9
Re[5]: Как начать работу с OpenSSL?
От: MaximE Великобритания  
Дата: 09.03.05 11:58
Оценка:
SkyDance <38094@users.rsdn.ru> wrote:

> "MaximE" <5711@users.rsdn.ru> wrote in message news:1061469@news.rsdn.ru...

>> неблокирующих/асинхронных ты так же вызываешь эти же
>> ф-ции при получении событий готовности твоих сокетов,
>> используя любую модель событий готовности сокетов на твоей платформе.
>
> Не совсем понимаю.
> OpenSSL жестко issue'ит вызовы к сокетным функциям (send/recv и т.п.). Но они для тех самых "почти-async-socket" невалидныж

Как невалидны?

Допустим ты устанавливаешь соединение с SSL сервером на неблокирующем/асинхронном сокете. Вызов connect тебе вернет EINPROGRESS. Дальше ты дожидаешься, пока сокет не станет доступен для записи. После установления соединения ты вызываешь SSL_connect. Этот вызов тебе вернет код возврата, который будет означать либо ошибку, либо что соединение установлено, либо что требуются еще запись/чтение (вызов read/write для сокета в недрах SSL вернул EAGAIN/EWOULDBLOCK). В последнем случае ты опять дожидаешься необходимого события на сокете и снова вызываешь SSL_connect; и так до тех пор пока тебе не вернется ошибка или что соединение установлено,

> да и самого file descriptor для сокета нет как такового — все скрыто от меня.


Как нет? Дескриптор твой, ты его назначаешь SSL соединению вызовом SSL_set_fd.

--
Maxim Yegorushkin

Those who do not understand Unix are condemned to reinvent it, poorly. © Henry Spencer
Posted via RSDN NNTP Server 1.9
Re[6]: Как начать работу с OpenSSL?
От: SkyDance Земля  
Дата: 09.03.05 12:13
Оценка:
"MaximE" <5711@users.rsdn.ru> wrote in message news:1061832@news.rsdn.ru...
> Как невалидны?

А вот так.
Таков этот гадский фреймворк, в котором (требование заказчика) приходится работать. Он использует OVERLAPPED и файловые функции для работы с сокетами. То бишь, сокет открывается WSASocket, чтение/запись в него идут через ReadFile/WriteFile глубоко в нёдрах фреймворка.
Получается вот что. Я за-accept'ил соединение, вызвал SSL_accept, внутри которого произошла куча чтений-записей — которые гадский фреймворк подхватил и тут же мимо моего кода поотдавал клиентам.

> Как нет? Дескриптор твой, ты его назначаешь

> SSL соединению вызовом SSL_set_fd.

У меня нет fd, который я могу передать в эту функцию. Просто и банально НЕТ... вместо него указатель на экземпляр типа-async-socket.
Posted via RSDN NNTP Server 1.9
Re[7]: Как начать работу с OpenSSL?
От: MaximE Великобритания  
Дата: 09.03.05 12:42
Оценка:
SkyDance wrote:

>> Как невалидны?

>
> А вот так.
> Таков этот гадский фреймворк, в котором (требование заказчика) приходится работать. Он использует OVERLAPPED и файловые функции для работы с сокетами. То бишь, сокет открывается WSASocket, чтение/запись в него идут через ReadFile/WriteFile глубоко в нёдрах фреймворка.
> Получается вот что. Я за-accept'ил соединение, вызвал SSL_accept, внутри которого произошла куча чтений-записей — которые гадский фреймворк подхватил и тут же мимо моего кода поотдавал клиентам.

Ну это уж не ко мне

>> Как нет? Дескриптор твой, ты его назначаешь

>> SSL соединению вызовом SSL_set_fd.
>
> У меня нет fd, который я могу передать в эту функцию. Просто и банально НЕТ... вместо него указатель на экземпляр типа-async-socket.

Тогда реализовывай bio.

--
Maxim Yegorushkin

Those who do not understand Unix are condemned to reinvent it, poorly. © Henry Spencer
Posted via RSDN NNTP Server 1.9
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.