首先,我知道由于SSL Library Error: error:0A000126:SSL routines::unexpected eof while reading
3重新引入了一个防止截断攻击的特性而产生的OpenSSL错误。
我的问题是,当我通过PHP从报告错误的服务器进行curl调用时,为什么会看到这个错误?
我正在运行RockyLinux9.1,PHP8.0.27,并拥有OpenSSL 3.0.1 (最新版本可用)。我还不能通过dnf模块升级到PHP8.1,因为还没有为该版本提供的库。
由于我正在从服务器发出一个curl调用到它自己,人们会认为,如果它已经足够及时地识别错误,那么它将正确地发出请求。"bug“报告指出,这通常是来自发出请求的不兼容服务器,那么我应该在系统中查看哪些地方来更正请求格式,以便使自己符合要求并使自己的curl请求再次工作?
这是我现在使用的卷发选项.
CURLOPT_HTTPGET => TRUE,
CURLOPT_HEADER => FALSE,
CURLOPT_FAILONERROR => FALSE,
CURLOPT_RETURNTRANSFER => TRUE,
CURLOPT_CONNECTTIMEOUT => 10,
CURLOPT_TIMEOUT => 60,
CURLOPT_SSL_CIPHER_LIST => NULL,
CURLOPT_CAINFO => '/path/to/ca-certs.pem',
CURLOPT_SSL_VERIFYPEER => TRUE,
CURLOPT_SSL_VERIFYHOST => 2
以下是来自httpd.conf
的SSL/TLS相关选项.
SSLProtocol -all +TLSv1.3 +TLSv1.2
SSLProxyProtocol -all +TLSv1.3 +TLSv1.2
SSLCipherSuite TLSv1.3 TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256
SSLCipherSuite SSL AES256+EECDH:AES256+EDH:!SHA1:!SHA256:!SHA384
SSLHonorCipherOrder on
SSLCompression off
SSLSessionTickets off
SSLOpenSSLConfCmd Curves X25519:secp521r1:prime256v1
感谢您提供的任何帮助!
编辑:下面的解决方案,tldr;必须在客户端请求中指定TLS版本和密码。
发布于 2023-03-20 00:19:56
一条有用的错误信息可能会很有帮助,但本质上这可以归结为不协商有限的(但可用的)密码,因此在握手过程中失败了。我不得不手动强制curl使用TLS1.2,以及服务器受限的特定密码。我把它加到了清单上..。
CURLOPT_SSLVERSION = CURL_SSLVERSION_TLSv1_2,
CURLOPT_SSL_CIPHER_LIST = 'AES256+EECDH:AES256+EDH'
不要再犯错误。希望这能帮助别人避免我在这上面浪费的两天。
https://serverfault.com/questions/1126612
复制相似问题