为什么libcurl不为IP设置SNI?



我刚刚注意到,当我使用IP进行HTTPS调用时,libcurl不会设置SNI字段。我发现了这个:

https://github.com/curl/curl/blame/master/lib/vtls/openssl.c

#ifdef SSL_CTRL_SET_TLSEXT_HOSTNAME
if((0 == Curl_inet_pton(AF_INET, hostname, &addr)) &&
#ifdef ENABLE_IPV6
(0 == Curl_inet_pton(AF_INET6, hostname, &addr)) &&
#endif
sni &&
!SSL_set_tlsext_host_name(BACKEND->handle, hostname))
infof(data, "WARNING: failed to configure server name indication (SNI) "
"TLS extensionn");
#endif

根据Curl_inet_pton文件:

* inet_pton(af, src, dst)
*      convert from presentation format (which usually means ASCII printable)
*      to network format (which is usually some kind of binary format).
* return:
*      1 if the address was valid for the specified address family
*      0 if the address wasn't valid (`dst' is untouched in this case)
*      -1 if some other error occurred (`dst' is untouched in this case, too)

正如预期的那样,它返回IP地址的1(例如192.160.0.1(,因此不调用SSL_set_tlsext_host_name

为什么?

因为这是不允许的。

RFC 3546";传输层安全性(TLS(扩展";第3.1节非常清楚地说明了这一点:

在";主机名";。

最新更新