Primeiro, estou ciente do SSL Library Error: error:0A000126:SSL routines::unexpected eof while reading
erro decorrente do OpenSSL 3 reintroduzir um recurso para evitar ataques de truncamento.
A pergunta que tenho é por que estou vendo esse erro quando estou fazendo uma chamada curl via PHP do mesmo servidor que está relatando o erro?
Estou executando Rocky Linux 9.1, PHP 8.0.27 e OpenSSL 3.0.1 (últimas versões disponíveis). Ainda não consigo atualizar para o PHP8.1 por meio do módulo dnf devido à falta de bibliotecas ainda não disponíveis para esse lançamento.
Como estou fazendo uma chamada curl do servidor para ele mesmo, alguém poderia pensar que, se estiver atualizado o suficiente para reconhecer o erro, ele estaria emitindo as solicitações corretamente. Os relatórios de "bug" indicam que isso geralmente é de servidores não compatíveis que emitem as solicitações, portanto, onde devo procurar em meu sistema para corrigir o formato da solicitação para que eu possa entrar em conformidade e fazer com que minhas solicitações curl funcionem novamente?
Aqui estão as opções de curl atuais que estou usando com minha solicitação ...
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
E aqui estão as opções relacionadas a SSL/TLS de httpd.conf
...
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
Obrigado por qualquer ajuda que você pode oferecer!
EDIT: Solução abaixo, tldr; teve que especificar a versão TLS e a cifra na solicitação do cliente.
Uma mensagem de erro útil teria sido útil, mas essencialmente isso se resumia a enrolar não negociar uma das cifras limitadas (mas disponíveis) e, portanto, falhar durante o aperto de mão. Tive que forçar manualmente o curl para utilizar TLS1.2 e uma cifra específica à qual o servidor está limitado. Aqui está o que eu adicionei à lista curlopt ...
Não há mais erros. Espero que ajude alguém a evitar os 2 dias que perdi com isso.