【发布时间】:2019-10-20 12:40:59
【问题描述】:
我使用 OpenSSL 后端构建了 libcurl。我想将 SNI 设置为某个指定的字符串。我能找到的方法是使用函数SSL_set_tlsext_host_name,它接受SSL * 实例和一个字符串,然后设置它。 (见https://stackoverflow.com/a/5113466/3754125)
但是 curl_easy 没有回调来检索 SSL* 实例。有其他方法吗?
更多上下文:
在我的环境中,我必须使用CURLOPT_RESOLVE 将 FQDN 解析为 IPv4。
有 FQDN:const char *fqdn
IPv4 fqdn 应解析为:uint32_t ipv4
假 SNI:const char *sni
要点如下:
CURL *ez;
char buf[ENOUGH];
struct curl_slist *resolver;
/* ... */
snprintf(buf, sizeof(buf), "%s:%d:%d.%d.%d.%d", fqdn, port, IP(IPv4));
resolver = curl_slist_append(NULL, buf);
curl_easy_setopt(ez, CURLOPT_RESOLVE, resolver);
在此之后,我需要在不接触解析器的情况下将 SNI 设置为假 SNI。
【问题讨论】:
-
SSL_CTX_set_tlsext_servername_callback可能会起作用。如果它有效,我会更新。 -
如果可行,请自己回答问题:)
-
@AnttiHaapala,不幸的是,我的解决方案不起作用。它仅适用于服务器,但在我的情况下,我是客户端。