我们发现使用 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 的配置(可能是默认配置)。然而,当有效载荷被解密时,它会遇到不同的主机 =>错误。