Windows 对具有非默认SSL服务器名称指示(sni)的客户端使用winhttp
我使用winhttp在端口443上与我的远程设备建立https连接。但是,运行此服务的服务器在同一https端口(443)上还包含更多服务,因此它使用SNI来解析请求的会话 但是,服务器不希望将主机名作为SNI获取,因为它对所有服务使用单个URL。相反,SNI地址不是根据URL选择的,而是根据一些其他字符串表示法(即Windows 对具有非默认SSL服务器名称指示(sni)的客户端使用winhttp,windows,ssl,winapi,winhttp,sni,Windows,Ssl,Winapi,Winhttp,Sni,我使用winhttp在端口443上与我的远程设备建立https连接。但是,运行此服务的服务器在同一https端口(443)上还包含更多服务,因此它使用SNI来解析请求的会话 但是,服务器不希望将主机名作为SNI获取,因为它对所有服务使用单个URL。相反,SNI地址不是根据URL选择的,而是根据一些其他字符串表示法(即服务\u api或服务\u web\u如果…) 在我的客户端连接流中,我在方法WinHttpConnect中设置了URL,该方法也相应地设置了SNI,实际的SSL/TLS握手是在调用
服务\u api或服务\u web\u如果…
)
在我的客户端连接流中,我在方法WinHttpConnect
中设置了URL,该方法也相应地设置了SNI,实际的SSL/TLS握手是在调用WinHttpSentRequest
时进行的。
我想知道在调用WinHttpConnect
之后,如何从默认URL值更改SNI值
到目前为止,在研究可能的解决方案时,我了解了HTTP\u SERVICE\u CONFIG\u SSL\u SNI\u KEY
结构,该结构由方法HttpSetServiceConfiguration
以及此SNI的匹配证书设置,但这似乎与服务器端配置有关。除此之外,不幸的是,我还没有找到任何关于这种行为的参考资料
也许有人曾经使用过使用winhttp
API的非默认SNI,并能告诉我怎么做?这样做的唯一选择是使用一些较低级别的API(如schannel)进行SSL握手,而不是切换回winhttp
如果不可能,也许可以选择使用扩展主机名和目录树,以便在单个url上获得多个sni…在sni中,明确定义为给定内容的主机名。如果某些TLS堆栈的工作方式不同,则它不符合TLS标准。您确定您的服务器使用SNI扩展而不是其他东西来提供非主机名的其他信息吗?“主机名”包含客户端理解的服务器的完全限定DNS主机名。主机名表示为使用ASCII编码的字节字符串,不带尾随点。“@PatrickMevzek,幸运的是我还控制服务器端(不是我个人,而是我可以影响的人:-)。。该规范明确指出,在未来,SNI还将支持其他名称,而不是虚拟hotstname,对吗?但现在,情况似乎是这样的。。。也许避免购买多个dns地址并在单个dns地址上使用多个主机名是可选的?@PatrickMevzek,还有一件事。。。我第一次提出这个架构的原因是因为openSSL允许这个规范异常,使用以下命令
openSSL s_client-servername-connect
wheresni
和url
可能不同这与您的有什么不同?你问同一个问题只是换了个角度way@RemyLebeau,前面的问题更深入到一起使用ip和sni的具体案例中。这里我想问一下SNI的一般概念,以及它是否与dns名称有任何不同。也许我的措辞不够清楚