Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 对具有非默认SSL服务器名称指示(sni)的客户端使用winhttp_Windows_Ssl_Winapi_Winhttp_Sni - Fatal编程技术网

Windows 对具有非默认SSL服务器名称指示(sni)的客户端使用winhttp

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握手是在调用

我使用winhttp在端口443上与我的远程设备建立https连接。但是,运行此服务的服务器在同一https端口(443)上还包含更多服务,因此它使用SNI来解析请求的会话

但是,服务器不希望将主机名作为SNI获取,因为它对所有服务使用单个URL。相反,SNI地址不是根据URL选择的,而是根据一些其他字符串表示法(即
服务\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
where
sni
url
可能不同这与您的有什么不同?你问同一个问题只是换了个角度way@RemyLebeau,前面的问题更深入到一起使用ip和sni的具体案例中。这里我想问一下SNI的一般概念,以及它是否与dns名称有任何不同。也许我的措辞不够清楚