如何使用 C 或 C++ 在 OpenSSL 上实现服务器名称指示 (SNI)?
是否有任何现实世界的例子可用?
最佳答案
在客户端,您使用 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 源代码分发的目录实现了这个功能,因此它们是了解应该如何完成的一个很好的资源。
关于c - 如何实现服务器名称指示(SNI),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5113333/