错误是这样的:
* 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
Run Code Online (Sandbox Code Playgroud)
相同的 URL 在 chrome 上打开得很好。我尝试从 chrome 复制为curl并使用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
Run Code Online (Sandbox Code Playgroud)
小智 14
升级到 ubutun22 和 openssl 3.0.2 后我遇到了同样的问题。
使用 dave_thompson_085 的步骤并通过client新选项指向一个教派对我来说不起作用。但是将Options = UnsafeLegacyRenegotiation行添加到system_default_sect文件底部确实:
openssl_conf = openssl_init
[openssl_init]
ssl_conf = ssl_configuration
[ssl_configuration]
system_default = system_default_sect
[system_default_sect]
CipherString = DEFAULT:@SECLEVEL=2
Options = UnsafeLegacyRenegotiation
Run Code Online (Sandbox Code Playgroud)
Meta:这并不是真正的编程或开发;而是真正的编程或开发。如有必要,我会删除,但我认为超级用户是合适的,并对此进行了投票(但我们会看看其他人的想法)。我可以看到 apple.SX 或 security.SX 同样有很好的论据,但是(AFAIK)这些需要 mod。
虽然 Steffen 是正确的,但服务器要么严重过时,要么配置错误,应该修复,低于 3.0.0(去年)的 OpenSSL 默认情况下将连接到非 RFC5746 服务器,只要服务器实际上不使用不安全的服务器“遗留”(RFC5246 等)重新协商。
因此,如果您可以使用较旧的 OpenSSL 获取/使用curl,它应该可以工作。我不确定 Mac 的情况如何,例如,brew 或 fink 或类似的软件是否有此功能。最糟糕的情况是,OpenSSL 和curl 都是开源的,因此您可以构建自己的旧版本——这将是SO 的主题,但需要相当多的工作。
或者,只要curl 不会弄乱它(我没想到,但不确定),OpenSSL 1.1.0 up 就可以通过运行时配置来控制它:
openssl.cnf在由(影响所有程序和进程)标识的目录中编辑系统范围的配置文件openssl version -d,或者在任何合适的位置创建您自己的文件并使用环境变量指向它OPENSSL_CONF。请参阅您的系统或网络上的 config(5) 手册页。
在默认部分(文件开头到用方括号括起来的第一行)中,如果尚未存在则添加一个项目openssl_conf = sect1,其中 sect1 通常为 sect1 openssl_init,但可以是文件中唯一的任何部分名称。
如果 sect1 尚不存在,则创建;如果尚不存在,则添加ssl_conf = sect2sect2 通常所在的项目ssl_configuration,但如上所述。
如果尚不存在,则创建 sect2;如果尚不存在,则添加client = sect3sect3 通常所在的项目client_tls_config,但如上所述。
如果尚不存在,则创建 sect3;如果尚不存在,则添加值为Options =(或者是逗号分隔列表,包括)的项目UnsafeLegacyServerConnect。请参阅您的系统或 Web上的 SSL_CONF_cmd(3) 手册页。
| 归档时间: |
|
| 查看次数: |
12818 次 |
| 最近记录: |