Cómo implementar la Indicación del Nombre del Servidor(SNI)
ssl openssl (1)
En el lado del cliente, usa SSL_set_tlsext_host_name(ssl, servername)
antes de iniciar la conexión SSL.
En el lado del servidor, es un poco más complicado:
- Configure un
SSL_CTX()
adicionalSSL_CTX()
para cada certificado diferente; - Agregue una devolución de llamada de servidor a cada
SSL_CTX()
usandoSSL_CTX_set_tlsext_servername_callback()
; - En la devolución de llamada, recupere el nombre de servidor proporcionado por el cliente con
SSL_get_servername(ssl, TLSEXT_NAMETYPE_host_name)
. Calcule elSSL_CTX
correcto para ir con ese nombre de host, luego cambie el objetoSSL
a eseSSL_CTX
conSSL_set_SSL_CTX()
.
Los archivos s_client.c
y s_server.c
en las apps/
directorio de la distribución de origen OpenSSL implementan esta funcionalidad, por lo que son un buen recurso para ver cómo se debe hacer.
¿Cómo implementar la Indicación del nombre del servidor (SNI) en OpenSSL en C o C ++?
¿Hay algún ejemplo del mundo real disponible?