Comment implémenter une indication de nom de serveur (SNI)

Comment implémenter SNI (Server Name Indication) sur OpenSSL en C ou C ++?

Existe-t-il des exemples du monde réel disponibles?

Du côté client, vous utilisez SSL_set_tlsext_host_name(ssl, servername) avant d’établir la connexion SSL.

Côté serveur, c’est un peu plus compliqué:

  • Configurez SSL_CTX() supplémentaire pour chaque certificate différent;
  • Ajoutez un rappel de nom de SSL_CTX() à chaque SSL_CTX() aide de SSL_CTX_set_tlsext_servername_callback() ;
  • Dans le rappel, récupérez le nom de serveur fourni par le client avec SSL_get_servername(ssl, TLSEXT_NAMETYPE_host_name) . SSL_CTX le bon SSL_CTX pour qu’il corresponde à ce nom d’hôte, puis basculez l’object SSL sur cet SSL_CTX avec SSL_set_SSL_CTX() .

Les fichiers s_client.c et s_server.c répertoire apps/ de la dissortingbution source OpenSSL implémentent cette fonctionnalité. Ils constituent donc une bonne ressource pour savoir comment procéder.