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

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

Есть ли примеры из реальной жизни?

1 ответ

Решение

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

Другие вопросы по тегам