gpt4 book ai didi

php - 将 cURL 与 SNI(服务器名称指示)结合使用

转载 作者:IT王子 更新时间:2023-10-29 00:00:04 26 4
gpt4 key购买 nike

我正在尝试使用 cURL 发布到刚刚开始使用 SNI 的 API(这样他们就可以在 1 个 IP 地址上托管多个 ssl 证书)。

由于迁移到 SNI,我的 cURL 停止工作。他们解释说这是因为 cURL 返回 *.domain-a.com 而不是 *.domain-b.com 所以 SSL 失败。

这似乎是 cURL 中的错误,因为从浏览器访问 API URL 时没有错误。

使用这段代码,它确实有效:

exec('curl -k -d "parameters=here", https://urlhere.com/', $output);
print_r($output);

但是,使用 -k 是不好的,因为它不验证 SSL 证书。

使用此代码不起作用:

exec('curl -d "parameters=here", https://urlhere.com/', $output);
print_r($output);

所以我的问题是,如何将 curl 与 SNI 结合使用并仍然验证 SSL(不必使用 -k)。我可以设置 PHP 中的其他设置或 cURL 选项来解决这个问题吗?

最佳答案

要能够使用 SNI,需要三个条件:

  • 根据 change logs,使用支持它的 Curl 版本至少为 7.18.1 .
  • 使用针对支持 SNI 的库编译的 Curl 版本,例如OpenSSL 0.9.8j(取决于一些旧版本的编译选项)。
  • 至少使用 TLS 1.0(不是 SSLv3)。

注意Curl的调试代码(-v)只显示主版本号(主要是区分SSLv2和SSLv3+类型的消息,见ssl_tls_trace),所以还是会显示“SSLv3 "当您使用 TLS 1.0 或更高版本时(因为它们实际上是 SSL v3.1 或更高版本,所以 3 是相同的主版本号)。

您可以使用 Wireshark 检查您安装的 curl 版本是否可以使用 SNI。如果您使用 curl -1 https://something 建立连接,如果您展开“Client Hello”消息,您应该能够看到“server_name”扩展.

当您使用不带 -1curl(对于 TLS 1.0)时,我不确定默认使用哪个 SSL/TLS 版本(取决于您的编译选项)或 -3(对于 SSLv3),但您可以尝试在您的命令中强制使用 -1,因为无论如何它都不适用于 SSLv3。

关于php - 将 cURL 与 SNI(服务器名称指示)结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12941703/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com