我不完全确定我是否正确使用了 Curl,因为这是我第一次使用它,但我需要能够读取我和我连接的任何服务器之间的 TLS session 的详细信息。
我的问题是我用过 “curl_easy_getinfo(curl,CURLINFO_TLS_SESSION,&tls)”
其中 tls 是一个 curl_tlssessioninfo 结构。但实际上我对它的结构一无所知,也找不到任何指出它的地方,因此无法显示我刚刚阅读的信息。
当然,我可能会以完全错误的方式解决这个问题,但我已经仔细研究了 Curl 的手册很长一段时间了。 我使用的语言是 C++,我在 Ubuntu 环境中,任何帮助将不胜感激。
最佳答案
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_t
( docs )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
指针转换为正确的类型并使用该后端的相应 header 和 API,以进一步提取必要的信息。
关于c++ - 我不确定在使用 Curl 时如何查看 TLS session 详细信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46463580/