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