【问题标题】:cURL displays SSLv3 instead of TLSv1cURL 显示 SSLv3 而不是 TLSv1
【发布时间】:2025-12-09 01:55:01
【问题描述】:

如果 SSL 被 curl_easy_setopt 函数禁用,为什么 cURL 7.19 会在握手期间显示 SSLv3?

curl_easy_setopt(m_curl, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1);

cURL 输出:

CURL Info: SSLv3, TLS handshake, Client hello (1):
CURL Info: SSLv3, TLS handshake, Server hello (2):
CURL Info: SSLv3, TLS handshake, CERT (11):
CURL Info: SSLv3, TLS handshake, Server finished (14):
CURL Info: SSLv3, TLS handshake, Client key exchange (16):
CURL Info: SSLv3, TLS change cipher, Client hello (1):
CURL Info: SSLv3, TLS handshake, Finished (20):
CURL Info: SSLv3, TLS handshake, Unknown (4):
CURL Info: SSLv3, TLS change cipher, Client hello (1):
CURL Info: SSLv3, TLS handshake, Finished (20):
CURL Info: SSL connection using DES-CBC3-SHA

cURL显示“SSLv3”可以吗?

【问题讨论】:

    标签: c++ ssl curl


    【解决方案1】:

    我会引用my own answer(针对不同的问题):

    Curl 的调试代码 (-v) 只显示主版本号 (主要是区分 SSLv2 和 SSLv3+ 类型的消息,见 ssl_tls_trace), 因此,当您使用 TLS 1.0 或更高版本时,它仍会显示“SSLv3” (因为它们实际上是 SSL v3.1 或更高版本,所以 3 是同一个专业 版本号)。

    如果你想确保你使用的是正确的版本,你应该检查return value from setopt

    此外,您可以使用 trace 选项详细查看握手:

    == Info: SSLv3, TLS handshake, Client hello (1):
    => Send SSL data, 512 bytes (0x200)
    0000: 01 00 01 fc 03 03
    

    第 5 个字节是主要版本号(这里是 03),第 6 个字节是次要版本号。

    • (03, 00) 是 SSLv3
    • (03, 01) 是 TLSv1.0
    • (03, 02) 是 TLSv1.1
    • (03, 03) 是 TLSv1.2

    【讨论】:

    • 布鲁诺,谢谢你的回答。除了 curl 使用 TLS 显示 SSLv3 之外,还有什么官方说明吗?
    • 我不知道除此源代码之外的任何文档。如果这确实是一个问题,那么提供一个指示完整版本(带有次要编号)的补丁应该不会太难。