我正在尝试将 SNI 添加到我的客户端程序 (C/C++) 中,该程序使用 Microsoft SDK 的 Schannel API for TLS。
我到处搜索,但找不到任何关于 Schannel 如何支持 SNI 扩展的文档。我查找了 的文档 AcquireCredentialsHandle()
,InitializeSecurityContext()
但没有成功。
那么,有人可以帮我提供一些示例代码吗?
SNI被指定为ClientHello 的一部分,由InitializeSecurityContext()
. 具体来说,Schannel 使用该函数的第三个参数进行证书验证,以及 SNI;但并非所有版本的 Windows 都支持 TLS 扩展(包括 SNI)。
TLS 扩展最初是在 Windows Vista 上的 Internet Explorer 7 beta 3 中引入的。另外,即使您的操作系统支持它,TLS 也可能默认关闭。
CodeProject 上有一个工作示例,它显示了来自客户端和服务器端的 SNI。