Модераторы: feodorv
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> boost::asio::ssl замена контекста "на лету" 
V
    Опции темы
bsa
Дата 25.11.2009, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: нет
Всего: 196



Желаемый порядок моих действий:
1. установка TCP соединения
2. получение идентификатора
3. выбор verify_file (сертификата) по идентификатору
4. SSL handshake
5. нормальная работа
6. закрытие подключения.

boost::asio::ssl::stream в качестве параметра принимает неконстантную ссылку на контекст. Из чего следует логичный вывод, что этот контекст можно потом менять. Поэтому, я на этапе 0 (который перед 1) создаю ssl::stream<ip::tcp::socket>(ios, ctx), а на п.3 выполняю ctx.set_verify_file() и ctx.set_verify_mode(verify_peer)... Но каково было мое удивление, когда я убрал set_verify_file() и все продолжило работать... Затем я поместил set_verify_mode() перед созданием сокета, и все перестало работать - handshake не проходит. Путем не очень долгих изысканий выяснилось, что некие очень умные люди (разработчики OpenSSL) сделали ход конем при создании SSL контекста - судя по всему, это "умный указатель" с семантикой COW (copy on write). Таким образом, использованная мной технология не работает.

Тогда я решил сначала создавать обычный tcp::socket, а затем, когда будет контекст готов, пихать его в ssl::stream... Но не тут-то было - у ssl::stream вообще нет для этого методов, а у tcp::socket есть возможность получить "нативный" дескриптор сокета (native()) и установить его (assign()), но я не нашел ничего похожего на метод "отцепления" дескриптора от сокета...

Собственно вопрос, что делать?

Это сообщение отредактировал(а) bsa - 25.11.2009, 14:52
PM   Вверх
bsa
Дата 25.11.2009, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: нет
Всего: 196



Кажется нашел:
Цитата(boost.org)
In some use cases the underlying stream object will need to have a longer lifetime than the SSL stream, in which case the template parameter should be a reference to the stream type:
Код
ip::tcp::socket sock(my_io_service);
ssl::stream<ip::tcp::socket&> ssl_sock(sock, ctx);

PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0430 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.