网站适用于 chrome 但不适用于 curl

site works on chrome but not on curl

错误是这样的:

* Connected to www.****.com (213.74.254.54) port 443 (#0)
* ALPN, offering http/1.1
* TLSv1.0 (OUT), TLS header, Certificate Status (22):
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.2 (IN), TLS header, Certificate Status (22):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.2 (OUT), TLS header, Unknown (21):
* TLSv1.2 (OUT), TLS alert, handshake failure (552):
* error:0A000152:SSL routines::unsafe legacy renegotiation disabled
* Closing connection 0
curl: (35) error:0A000152:SSL routines::unsafe legacy renegotiation disabled

相同的 URL 在 chrome 上打开得很好。我也尝试使用 curl 从 chrome 和 运行 复制为 curl,同样的错误。因此,也许 chrome 在 SSL 协商上更加宽松。我怎样才能使 curl 的行为相同?

卷曲版本:

curl --version
curl 7.80.0 (x86_64-apple-darwin19.6.0) libcurl/7.80.0 OpenSSL/3.0.1 zlib/1.2.11 zstd/1.5.2 libidn2/2.3.2 libpsl/0.21.1 (+libidn2/2.3.2)
Release-Date: 2021-11-10
Protocols: dict file ftp ftps gopher gophers http https imap imaps mqtt pop3 pop3s rtsp smb smbs smtp smtps telnet tftp
Features: alt-svc AsynchDNS HSTS HTTPS-proxy IDN IPv6 Largefile libz NTLM NTLM_WB PSL SSL TLS-SRP UnixSockets zstd

Meta:这不是真正的编程或开发;如有必要,我会删除,但我认为超级用户是合适的,并且已经投票赞成(但我们会看看其他人的想法)。我可以看到 apple.SX 或 security.SX 同样好的论据,但是(AFAIK)那些需要 mod.

虽然 Steffen 是正确的,但服务器严重过时或配置错误并且应该被修复,默认情况下低于 3.0.0(仅去年)的 OpenSSL 将连接到非 RFC5746 服务器,只要服务器连接实际上 使用 不安全的 'legacy' (RFC5246 et pred) 重新协商。

因此,如果您可以 get/use 使用较旧的 OpenSSL 进行卷曲,它应该可以正常工作。我不确定 Mac 在这方面的情况如何,例如 brew 或 fink 或类似软件是否提供此功能。最坏的情况是,OpenSSL 和 curl 都是开源的,因此您可以构建自己的旧版本——并且 成为 SO 的主题,但需要做一些工作。

或者,只要 curl 不会把它弄乱(我不希望,但不确定),OpenSSL 1.1.0 up 可以通过运行时配置来控制它:

  1. 要么在 openssl version -d 标识的目录中编辑系统范围的配置文件 openssl.cnf(影响所有程序和进程),要么在任何合适的地方创建自己的文件并指向它环境变量 OPENSSL_CONF。请参阅系统上 config(5) 的手册页 or the web

  2. 在默认部分(文件的开头到方括号中的第一行)添加(如果不存在)项目 openssl_conf = sect1 其中 sect1 通常是 openssl_init 但是可以是文件中任何 section-name 唯一的。

  3. 如果 sect1 不存在则创建,如果不存在则添加项目 ssl_conf = sect2 其中 sect2 通常是 ssl_configuration 但同上。

  4. 如果 sect2 不存在则创建,如果不存在则添加一个项目 client = sect3 其中 sect3 通常是 client_tls_config 但同上。

  5. 如果不存在则创建 sect3,如果不存在则添加 Options = 的项目,其值为(或 comma-separated 列表包括)UnsafeLegacyServerConnect.在您的系统 or the web.

    上查看 SSL_CONF_cmd(3) 的手册页