网站适用于 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 可以通过运行时配置来控制它:
要么在 openssl version -d
标识的目录中编辑系统范围的配置文件 openssl.cnf
(影响所有程序和进程),要么在任何合适的地方创建自己的文件并指向它环境变量 OPENSSL_CONF
。请参阅系统上 config(5) 的手册页 or the web。
在默认部分(文件的开头到方括号中的第一行)添加(如果不存在)项目 openssl_conf = sect1
其中 sect1 通常是 openssl_init
但是可以是文件中任何 section-name 唯一的。
如果 sect1 不存在则创建,如果不存在则添加项目 ssl_conf = sect2
其中 sect2 通常是 ssl_configuration
但同上。
如果 sect2 不存在则创建,如果不存在则添加一个项目 client = sect3
其中 sect3 通常是 client_tls_config
但同上。
如果不存在则创建 sect3,如果不存在则添加 Options =
的项目,其值为(或 comma-separated 列表包括)UnsafeLegacyServerConnect
.在您的系统 or the web.
上查看 SSL_CONF_cmd(3) 的手册页
错误是这样的:
* 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 可以通过运行时配置来控制它:
要么在
openssl version -d
标识的目录中编辑系统范围的配置文件openssl.cnf
(影响所有程序和进程),要么在任何合适的地方创建自己的文件并指向它环境变量OPENSSL_CONF
。请参阅系统上 config(5) 的手册页 or the web。在默认部分(文件的开头到方括号中的第一行)添加(如果不存在)项目
openssl_conf = sect1
其中 sect1 通常是openssl_init
但是可以是文件中任何 section-name 唯一的。如果 sect1 不存在则创建,如果不存在则添加项目
ssl_conf = sect2
其中 sect2 通常是ssl_configuration
但同上。如果 sect2 不存在则创建,如果不存在则添加一个项目
client = sect3
其中 sect3 通常是client_tls_config
但同上。如果不存在则创建 sect3,如果不存在则添加
上查看 SSL_CONF_cmd(3) 的手册页Options =
的项目,其值为(或 comma-separated 列表包括)UnsafeLegacyServerConnect
.在您的系统 or the web.