如何在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_CTX
同SSL_set_SSL_CTX()
。
该s_client.c
和s_server.c
中的文件apps/
OpenSSL的源代码发布的目录实现此功能,所以他们是一个很好的资源,看看它应该怎么做。
婷婷同学_
TA贡献1844条经验 获得超8个赞
这是一个非常好的高级写作,谢谢!jww在另一个答案中通过代码示例精确地说明了这种方法。你们中的一个或两个都可以用关于多线程的注释中提出的问题来补充这些答案吗?例如,SSL_set_SSL_CTX
天生不是线程安全的?它似乎只影响第一个参数中指定的SSL连接。
- 3 回答
- 0 关注
- 845 浏览
添加回答
举报
0/150
提交
取消