1

根据this,在 libcurl 中,CURLOPT_SSL_ENABLE_ALPN默认情况下启用该选项。对于一个项目,我正在尝试禁用 ALPN 扩展,如下所示:

CURLcode res = CURLE_OK;
res = curl_easy_setopt(curl_, CURLOPT_SSL_ENABLE_ALPN, 0L);
if(res == CURLE_OK){
    cout<<"Set CURLOPT_SSL_ENABLE_ALPN to 0L res = "<<res;
}else{
    cout<<"Set CURLOPT_SSL_ENABLE_ALPN to 1L  res = "<<res<<"\t"<<curl_easy_strerror(res);
}

这给我一个错误:

Set CURLOPT_SSL_ENABLE_ALPN to 1L  res = 48   An unknown option was passed in to libcurl

而且,我可以看到 TLS 握手中存在 ALPN 扩展,可以通过 Wireshark 看到它。如何禁用 ALPN 扩展? Openssl 版本:OpenSSL 1.1.0k 卷曲版本:7.67.0

4

2 回答 2

1

在 libcurl 中,所有可能的选项都#define在标头中,但这并不意味着所有选项都受支持。

看起来您libcurl不是使用 HTTP2 支持 (libnghttp2) 构建的。

要使 ALPN 或 NPN 实际工作,curl_version_info()应包括CURL_VERSION_HTTP2.

于 2019-12-02T14:07:15.783 回答
0

显然,如果您不使用支持 HTTP2 的 libcurl (libnghttp2) 进行编译,它会将CURLOPT_SSL_ENABLE_ALPNCURLOPT_SSL_ENABLE_NPN视为未知选项,尽管 ALPN 和 NPN 独立于 HTTP2。这是 libcurl 中的一个错误。我已经在 libcurl github repo 报告了这种行为他们修复了它,修复将在下一个版本中提供。

于 2019-12-04T11:50:47.100 回答