Ответ 1
На стороне клиента вы используете SSL_set_tlsext_host_name(ssl, servername)
перед началом соединения SSL.
На стороне сервера это немного сложнее:
- Настройте дополнительный
SSL_CTX()
для каждого другого сертификата; - Добавьте обратный вызов servername к каждому
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 реализуют эту функцию, поэтому они являются хорошим ресурсом, чтобы увидеть, как это сделать.