TLS版本设置不正确,无法提取会话信息

时间:2018-01-24 17:34:34

标签: c++ openssl libcurl

分辨

构建配置错误。

官方"祝福"我们系统上的curl和OpenSSL实现可悲过时(OpenSSL 0.9.8)。我与之通信的所有应用程序都不接受TLS v1.2以下的任何内容,因此我在我的主目录下下载并构建了OpenSSL 1.1和Curl 7.48。

但是,即使我在--with-ssl=/my/tools/ssl命令中指定configure来构建Curl,它仍然在/ etc / lib下获取旧版本的libssl。

我必须执行以下操作才能正确构建Curl:

#
# make sure prefix in /my/tools/lib/pkgconfig/libcurl.pc is set to
# /my/tools
#
CFG_PACKAGE_PATH=/my/tools/lib/pkgconfig:$CFG_PACKAGE_PATH
CPPFLAGS="-I/my/tools/include"
LDFLAGS="-L/my/tools/lib/"

./configure --prefix=/my/local --with-ssl

之后,Curl正确链接到我的本地OpenSSL构建并正常工作。

ORIGINAL

资料 -

OS: SLES 10
Compiler: g++ 4.1.2
libcurl: 7.48.0
OpenSSL: 1.0.21

我们有一个C ++应用程序,它使用libcurl通过OpenSSL连接到URL。我收到了SSL连接错误,因为根据远程站点的管理员,我们正在尝试连接已禁用的TLS 1.0。但是,我在我的代码中明确地将协议设置为TLS版本1.2,如下所示:

if ( curl_easy_setopt( m_curlHandle, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2 ) != CURLE_OK)
  m_log.logv( LOG_ERR, "%s - Cannot set SSL version to TLS 1.2!", __PRETTY_FUNCTION__ );

我没有收到错误消息,因此SSL版本设置为TLS 1.2,但由于某种原因,它会以TLS 1.0的形式发送出去。

我试图提取会话信息以尝试验证事情的设置方式,因此我使用curl_easy_getinfo函数,但它返回错误CURLE_BAD_FUNCTION_ARGUMENT的代码。我已经完成了对CURL文档的调用,据我所知,我已经通过了预期的事情。

以下是代码的内容(而不是完全代码,但操作顺序和调用本身就能准确反映出来):

CURL *m_curlHandle;
...
curl_global_init( CURL_GLOBAL_ALL );
m_curlHandle = curl_easy_init( ) ;

curl_easy_setopt( m_curlHandle, CURLOPT_USERAGENT, "libcurl-agent/1.0" );
curl_easy_setopt( m_curlHandle, CURLOPT_SSL_VERIFYPEER, 1 );
curl_easy_setopt( m_curlHandle, CURLOPT_SSL_VERIFYHOST, 2 );
curl_easy_setopt( m_curlHandle, CURLOPT_POST, 1L );
curl_easy_setopt( m_curlHandle, CURLOPT_TIMEOUT, 60 );
curl_easy_setopt( m_curlHandle, CURLOPT_NOPROGRESS, 1L );
curl_easy_setopt( m_curlHandle, CURLOPT_ERRORBUFFER, &m_curlErrBuffer );
curl_easy_setopt( m_curlHandle, CURLOPT_WRITEFUNCTION, write_data );
curl_easy_setopt( m_curlHandle, CURLOPT_READFUNCTION, read_data );
curl_easy_setopt( m_curlHandle, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1 );
...
if ( curl_easy_setopt( m_curlHandle, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2 ) != CURLE_OK)
  m_log.logv( LOG_ERR, "%s - Cannot set SSL version to TLS 1.2!", __PRETTY_FUNCTION__ );
...
struct curl_tlssessioninfo *session;
CURLcode result;

result = curl_easy_getinfo( m_curlHandle, CURLINFO_TLS_SSL_PTR, &session );

根据文档here,我将正确的参数传递给curl_easy_getinfo,因此这变得特别令人沮丧。

任何人都有任何想法a)我如何验证我是否在传出消息上使用TLS 1.2,以及2)如何正确提取会话信息?

提前致谢。

0 个答案:

没有答案