如何实现服务器名称指示(SNI)

2.8*_*a_G 38 c ssl openssl sni

如何在C或C++中的OpenSSL上实现服务器名称指示(SNI)?

有没有现实世界的例子?

caf*_*caf 60

在客户端,您SSL_set_tlsext_host_name(ssl, servername)在启动SSL连接之前使用.

在服务器端,它有点复杂:

  • SSL_CTX()为每个不同的证书设置一个额外的;
  • 为每个SSL_CTX()使用添加servername回调SSL_CTX_set_tlsext_servername_callback();
  • 在回调中,使用检索客户端提供的servername SSL_get_servername(ssl, TLSEXT_NAMETYPE_host_name).找出正确的SSL_CTX去与该主机名,然后切换SSL对象来表示SSL_CTXSSL_set_SSL_CTX().

s_client.cs_server.c中的文件apps/OpenSSL的源代码发布的目录实现此功能,所以他们是一个很好的资源,看看它应该怎么做.