46

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

有没有可用的真实世界示例?

4

1 回答 1

73

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

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

  • 为每个不同的证书设置一个附加SSL_CTX()
  • SSL_CTX()为每个使用添加服务器名称回调SSL_CTX_set_tlsext_servername_callback()
  • 在回调中,使用 检索客户端提供的服务器名称SSL_get_servername(ssl, TLSEXT_NAMETYPE_host_name)。找出SSL_CTX使用该主机名的权利,然后将SSL对象切换SSL_CTXSSL_set_SSL_CTX().

OpenSSL 源代码分发目录中的s_client.cs_server.c文件apps/实现了此功能,因此它们是了解如何完成此功能的好资源。

于 2011-02-25T04:02:44.307 回答