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

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

有没有现实世界的例子?


紫衣仙女
浏览 846回答 3
3回答

慕斯709654

在客户端,您需要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_CTX同SSL_set_SSL_CTX()。该s_client.c和s_server.c中的文件apps/OpenSSL的源代码发布的目录实现此功能,所以他们是一个很好的资源,看看它应该怎么做。

婷婷同学_

这是一个非常好的高级写作,谢谢!jww在另一个答案中通过代码示例精确地说明了这种方法。你们中的一个或两个都可以用关于多线程的注释中提出的问题来补充这些答案吗?例如,SSL_set_SSL_CTX天生不是线程安全的?它似乎只影响第一个参数中指定的SSL连接。
打开App,查看更多内容
随时随地看视频慕课网APP