2015-12-14 3 views
0

При реализации сервера C++ я столкнулся с проблемой наличия двух доменов, указывающих на один и тот же сервер. Реализация стандартного SSL-сервера с использованием boost не является проблемой, но теперь мне нужно как-то решить, какой сертификат использовать при подключении. Я знаю, что это возможно, потому что это обычная практика в массовом веб-хостинге.C++ SSL Virtualhosting

Например, один Apache/nginx способен предоставлять два разных https-сайта, используя два разных сертификата на одном и том же порту (443). Я хотел бы реализовать аналогичное поведение на C++.

Как работает apache?

Возможно ли реализовать это с использованием boost asio или мне нужно использовать API более низкого уровня (OpenSSL/OS)?

+0

может ли сервер распознавать один домен из другого на основе входящих запросов? – UmNyobe

+0

Семантика очень похожа на http. Как только соединение установлено, я знаю, основываясь на входящих запросах, к которым подключен хост. Но это уже слишком поздно для принятия решения. Должен быть какой-то способ без этого, поскольку он работает в Apache. – Thalhammer

ответ

1

Способ сообщить серверу заранее, какой хост является желательным, использовать имя сервера, как описано в RFC 6066. Он добавляет поле расширения server_name в TLS, включая список имен серверов, который затем может использовать сервер.

Это не обязательное поле, поэтому не все браузеры или серверы поддерживают его. Но поддержка в основных продуктах хороша на данный момент.

+0

Спасибо, это мне очень помогает. Но, похоже, форсирование asio не поддерживает его. Кажется, я должен использовать простой OpenSSL. – Thalhammer