web-dev-qa-db-fra.com

Comment implémenter l'indication du nom du serveur (SNI)

Comment implémenter l'indication du nom du serveur (SNI) sur OpenSSL en C ou C++?

Y a-t-il des exemples de monde réels disponibles?

38
2.8a8a_G

Sur le côté du client, vous utilisez SSL_set_tlsext_Host_name(ssl, servername) avant d'initier la connexion SSL.

Sur le côté serveur, c'est un peu plus compliqué:

  • Configurez une offre supplémentaire SSL_CTX() pour chaque certificat différent;
  • Ajoutez un rappel du nom de serveur à chaque SSL_CTX() à l'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). Déterminez la droite SSL_CTX Pour aller avec ce nom d'hôte, puis basculez l'objet SSL sur celui-ci SSL_CTX Avec SSL_set_SSL_CTX().

Les fichiers s_client.c Et s_server.c Dans le répertoire apps/ De la distribution de source OpenSSL implémente cette fonctionnalité, de sorte qu'ils sont une bonne ressource pour voir comment cela devrait être fait.

62
caf