我用wireshark来curl --tlsv1.0
比较--tlsv1.2
对于支持它的服务器,服务器握手会乖乖地使用 TLSv1.0(重点是检查以验证它们不支持):
wget url --no-check-certificate --secure-protocol=TLSv1 behaves the same as --secure-protocol=TLSv1_2: the handshake uses TLS1_2 every time.
显然没有--secure-protocol=TLS1_0
。如何强制 wget 使用 1_0 而不是 1_2 服从?
wget: --secure-protocol: Invalid value ‘TLSv1_0’
GNU Wget 1.17.1 构建于 cygwin。
答案1
阅读源代码,您可以看到可能性。 这片看起来像你想要的:
case secure_protocol_tlsv1:
err = gnutls_priority_set_direct (session, "NORMAL:-VERS-SSL3.0", NULL);
break;
case secure_protocol_tlsv1_1:
err = gnutls_priority_set_direct (session, "NORMAL:-VERS-SSL3.0:-VERS-TLS1.0", NULL);
break;
其中(参见初始化程序) 似乎"tlsv1_1"
:
static bool
cmd_spec_secure_protocol (const char *com, const char *val, void *place)
{
static const struct decode_item choices[] = {
{ "auto", secure_protocol_auto },
{ "sslv2", secure_protocol_sslv2 },
{ "sslv3", secure_protocol_sslv3 },
{ "tlsv1", secure_protocol_tlsv1 },
{ "tlsv1_1", secure_protocol_tlsv1_1 },
{ "tlsv1_2", secure_protocol_tlsv1_2 },
{ "pfs", secure_protocol_pfs },
};
int ok = decode_string (val, choices, countof (choices), place);
if (!ok)
fprintf (stderr, _("%s: %s: Invalid value %s.\n"), exec_name, com, quote (val));
return ok;
}