Обслуживание нескольких доменов в одном ящике с SNI
Я использую OpenSSL 0.9.8q во FreeBSD-8.2. В моей системе 3 виртуальных хоста, и я хочу внедрить SNI для обслуживания всех 3 из них на одном сервере.
У меня есть 3 отдельных сертификата по одному для каждого, и в своем коде ssl-сервера я должен каким-то образом выяснить, каково доменное имя запроса клиента, и использовать соответствующий файл сертификата на основе этого. Для этого я написал функцию с именемget_ssl_servername_cb
и передал его как функцию обратного вызоваSSL_CTX_set_tlsext_servername_callback
, Таким образом, в функции обратного вызова я могу получить доменное имя запроса клиента.
Но моя проблема в том, что эта функция обратного вызова выполняется после выполненияSSL_accept
функция, но я должен выбрать и использовать соответствующий сертификат перед использованиемSSL_new
команда, которая является способом до выполненияSSL_accept
.
Итак, мой вопрос, как я могу использоватьSSL_CTX_set_tlsext_servername_callback
функция для SNI?