На стороне клиента вы используете SSL_set_tlsext_host_name(ssl, servername)
перед установкой соединения SSL.
На стороне сервера все немного сложнее:
- Установите дополнительные
SSL_CTX()
для каждого отдельного сертификата;
- Добавить обратный вызов имени сервера для каждого
SSL_CTX()
, используя SSL_CTX_set_tlsext_servername_callback()
;
- В обратном вызове получите предоставленное клиентом имя сервера с
SSL_get_servername(ssl, TLSEXT_NAMETYPE_host_name)
. Найдите правильный SSL_CTX
, чтобы использовать это имя хоста, затем переключите объект SSL
на этот SSL_CTX
с помощью SSL_set_SSL_CTX()
.
Файлы s_client.c
и s_server.c
в каталоге apps/
исходного дистрибутива OpenSSL реализуют эту функцию, поэтому они являются хорошим ресурсом, чтобы узнать, как это сделать.