curl 7.21 无法在 https 上正确调用带有主机标头的主机

curl 7.21 无法在 https 上正确调用带有主机标头的主机

我们发现使用 curl 7.21 或 7.24 调用类似下面的主机确实会在 apache 配置中产生错误(我们有多个 SSL Vhosts!)。而使用 curl 7.34 及更高版本,相同的命令可以顺利运行。有人知道为什么吗?

命令:curl https://192.168.0.1/version -H "Host: example.domain.com" -k

这应该返回类似“1.2.1”的版本。对于较新的 curl(测试了 7.34 和 7.38/39),它确实会返回,但对于 curl 7.21/7.24,它会返回 400。

当使用较旧的 curl 执行时,apache 返回以下内容:

[error] Hostname 192.168.0.1 provided via SNI and hostname example.domain.com provided via HTTP are different

通常我认为这可能是由于 curl 缺少 SNI 支持而导致的问题,但我读到 SNI 应该已经添加到 curl 7.18 中了。

答案1

所描述的行为是正确的。SNI 基于 URL(192.168.0.1),主机 HTTP 标头由您手动设置(example.domain.com)。

当 Apache 处理此请求时,它会192.168.0.1进入 SNI 并使用该 vhost 的配置(可能是默认配置)。然而,当有效载荷被解密时,它会遇到不同的主机 =>错误

相关内容