0hquazEd
@0hquazEd

Почему не устанавливается соединение через SSL?

Здравствуйте! Я решил воспользоваться SSL с помощью библиотеки boost::asio, посмотрев пример из документации я попробовал его повторить, на операции socket.handshake у меня вылетала ошибка, даже скопировав код у меня вылетала та же ошибка, однако если поставить sock.set_verify_mode(ssl::verify_none) - то код отрабатывал корректно, почему?

Код:
ssl::context ctx(ssl::context::sslv23);
	ctx.set_default_verify_paths();

	// Open a socket and connect it to the remote host.
	boost::asio::io_context io_context;
	ssl_socket sock(io_context, ctx);
	tcp::resolver resolver(io_context);
	tcp::resolver::query query("ru.wikipedia.org", "https");
	boost::asio::connect(sock.lowest_layer(), resolver.resolve(query));
	sock.lowest_layer().set_option(tcp::no_delay(true));

	// Perform SSL handshake and verify the remote host's
	// certificate.

	sock.set_verify_mode(ssl::verify_none);  // Если прописать sock.set_verify_mode(ssl::verify_peer); - выпадает ошибка
	sock.set_verify_callback(ssl::host_name_verification("en.wikipedia.org"));
	sock.handshake(ssl_socket::client);
	
	http::request<http::empty_body> request(http::verb::get, "/wiki/HTTP", 11);
	request.set(http::field::host, "en.wikipedia.org");
	request.set(http::field::user_agent, BOOST_BEAST_VERSION_STRING);

	http::write(sock, request);

	flat_buffer buffer;
	http::response<http::dynamic_body> response;

	http::read(sock, buffer, response);

	std::cout << buffers_to_string(response.body().data()) << std::endl;

	sock.lowest_layer().shutdown(net::ip::tcp::socket::shutdown_both);
	return 0;
  • Вопрос задан
  • 148 просмотров
Решения вопроса 1
@galaxy
С boost::asio я не знаком, но проблема стандартная. Чтобы верифицировать узел (сайт en.wikipedia.org в данном случае), нужны доверенные корневые сертификаты. Они в подобных библиотеках, как правило, не настроены, если вы специально не озаботились.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы