我不确定如何在使用Curl时查看TLS会话详细信息

时间:2017-09-28 07:40:02

标签: c++ ssl curl

我不完全确定我是否正确使用Curl,因为这是我第一次使用它但我需要能够读取我和我连接的任何服务器之间的TLS会话的详细信息。 / p>

我的问题是我用过 " curl_easy_getinfo(curl,CURLINFO_TLS_SESSION,& tls)"

其中tls是curl_tlssessioninfo结构。但实际上我对它的结构一无所知,我无法找到指出它的任何地方,因此无法显示我刚读过的信息。

当然,我可能会以完全错误的方式解决这个问题但是我已经在Curl的手册上倾倒了很长一段时间了。 我使用的语言是C ++,我在Ubuntu环境中,任何帮助都会受到赞赏。

2 个答案:

答案 0 :(得分:1)

LibCURL支持许多不同的SSL实现(后端),从CURLINFO_TLS_SESSION(以及新变体CURLINFO_TLS_SSL_PTR)返回的信息也与实现有关。

正如documentation所解释的那样,返回了指向curl_tlssessioninfo结构的指针,其定义为:

struct curl_tlssessioninfo {
  curl_sslbackend backend;
  void *internals;
};

此处backend是一个枚举,用于指定internals中存储的SSL上下文信息的实际类型:

  • CURLSSLBACKEND_OPENSSL:SSL_CTX*(或SSL*)(docs

  • CURLSSLBACKEND_GNUTLS:gnutls_session_tdocs

  • CURLSSLBACKEND_SCHANNEL:CtxtHandle*(Windows docs

  • CURLSSLBACKEND_DARWINSSL:SSLContext*(Apple docs

  • CURLSSLBACKEND_AXTLS:SSL*

  • CURLSSLBACKEND_MBEDTLS:mbedtls_ssl_context*

  • CURLSSLBACKEND_NSS:PRFileDesc*

为项目构建libcurl时,指定要使用的SSL后端,因此您应该知道使用哪个SSL后端,将internals指针强制转换为正确的类型并使用相应的标头和该后端的API用于进一步提取必要的信息。

答案 1 :(得分:0)

如果您正在寻找代码示例,最好看的地方之一是github。

这个github project是一个面向对象的卷曲C ++包装器。

查看documentation示例,以下是CURLINFO_TLS_SSL_PTR的示例代码,该代码取代了已弃用的CURLINFO_TLS_SESSION

CURL *curl = curl_easy_init();
if(curl) {
  CURLcode res;
  struct curl_tlssessioninfo *tls;
  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
  res = curl_easy_perform(curl);
  curl_easy_getinfo(curl, CURLINFO_TLS_SSL_PTR, &tls);
  curl_easy_cleanup(curl);
}

希望这有帮助。