Подтвердить что ты не робот

Как реализовать идентификацию имени сервера (SNI)

Как реализовать идентификацию имени сервера (SNI) на OpenSSL на C или С++?

Есть ли в мире реальные примеры?

4b9b3361

Ответ 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 реализуют эту функцию, поэтому они являются хорошим ресурсом, чтобы увидеть, как это сделать.