c ssl openssl sni

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() adicional SSL_CTX() para cada certificado diferente;
  • Agregue una devolución de llamada de servidor a cada SSL_CTX() usando SSL_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 el SSL_CTX correcto para ir con ese nombre de host, luego cambie el objeto SSL a ese SSL_CTX con SSL_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?