Uau, esse foi um desafio.
Parece que é um problema com o OpenSSL 1.0.1, onde a tentativa de negociar automaticamente com o TLS1.1 (ou 1.2 ???) com alguns servidores (edit: BigIP servers executando firmware < 10.2.4) faz com que esses servidores descartem a conexão e rejeitem a solicitação. Veja:
Estou tentando conectar-me ao gateway de cartão de crédito "Payflow Pro" do Paypal, e o Paypal foi um dos principais culpados na lista, originalmente.
De acordo com o ticket do bug, eles dizem que é "fixo" para o Paypal no 1.0.1b, mas eu estou rodando o 1.0.1c-3 e ainda sinto o problema. Eu não sei se isso significa que é fixo para www.paypal.com
mas não payflowpro.paypal.com
, ou o quê.
WORKAROUND: Configurar $ENV{HTTPS_VERSION} = 3
para forçar o SSL3 parece corrigir o problema, pelo menos para Crypt :: SSLeay .
Presumivelmente, isso funciona porque ele não tenta negociar o TLS1.1 e apenas usa o SSL3.
Testando com o openssl s_client, ele funciona com as opções -ssl3
, -tls1
e -no_tls1
, então deve ser um problema de negociação, na minha opinião.
De qualquer forma, isso é uma solução alternativa, pelo menos.
O problema real é causado por um bug no firmware dos balanceadores de carga F5 BigIP com firmware menor que 10.2.4. Isso faz com que as conexões TLS 1.1 ou 1.2 não respondam adequadamente às solicitações longas do ClientHello e, portanto, interrompam.
A correção real é atualizar o firmware no balanceador de carga BigIP para > = 10.2.4.
É claro que o Paypal / Payflow culpou o OpenSSL por isso ...