如何禁用 ALPN 扩展?
How to disable ALPN extension?
根据 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
在 libcurl 中,所有可能的选项都在 header 中 #define
,但这并不意味着所有选项都受支持。
您的 libcurl
似乎不是使用 HTTP2 支持 (libnghttp2) 构建的。
要使 ALPN 或 NPN 实际起作用,curl_version_info()
应包括 CURL_VERSION_HTTP2
。
显然,如果您不使用支持 HTTP2 的 libcurl (libnghttp2) 进行编译,它会将 CURLOPT_SSL_ENABLE_ALPN
和 CURLOPT_SSL_ENABLE_NPN
视为未知选项,尽管 ALPN 和 NPN 独立于 HTTP2。这是 libcurl 中的错误。
我在 libcurl github repo here 报告了这种行为,他们修复了它,修复将在下一个版本中提供。
根据 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
在 libcurl 中,所有可能的选项都在 header 中 #define
,但这并不意味着所有选项都受支持。
您的 libcurl
似乎不是使用 HTTP2 支持 (libnghttp2) 构建的。
要使 ALPN 或 NPN 实际起作用,curl_version_info()
应包括 CURL_VERSION_HTTP2
。
显然,如果您不使用支持 HTTP2 的 libcurl (libnghttp2) 进行编译,它会将 CURLOPT_SSL_ENABLE_ALPN
和 CURLOPT_SSL_ENABLE_NPN
视为未知选项,尽管 ALPN 和 NPN 独立于 HTTP2。这是 libcurl 中的错误。
我在 libcurl github repo here 报告了这种行为,他们修复了它,修复将在下一个版本中提供。