为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C
紫衣仙女 2019-12-27 15:32:24
如何在C或C ++中的OpenSSL上实现服务器名称指示(SNI)?有没有现实世界的例子?
查看完整描述

3 回答

?
慕斯709654

TA贡献1840条经验 获得超5个赞

在客户端,您需要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()

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


查看完整回答
反对 回复 2019-12-27
?
婷婷同学_

TA贡献1844条经验 获得超8个赞

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

查看完整回答
反对 回复 2019-12-27
  • 3 回答
  • 0 关注
  • 845 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信