falha de handshake do OpenSSL

3

Recentemente, fomos forçados a migrar nossos servidores em nuvem de produção do GoDaddy para o Azure, porque o GoDaddy está terminando o serviço do servidor em nuvem.

Um dos nossos servidores era um CentOS 5.7 rodando uma pilha JasperReports Bitnami. Durante o processo de migração, atualizo todos os servidores para a distribuição mais recente e reconstruo o Jasper a partir da imagem do Azure Bitnami Jasper no Ubuntu 12.04LTS

A ter o certificado SSL instalado no JasperServer e funcionando corretamente

Todos os novos servidores estão funcionando lindamente, agora é aqui que o problema entra.

Também temos um servidor virtual CentOS 5.8 dedicado no GoDaddy que está hospedado lá (por enquanto), há uma coleção de sites no referido servidor que servem relatórios do Jasper via Soap.

No entanto, está recebendo falhas de handshake ao tentar se conectar

#openssl s_client -connect newjasperserver.com:443
CONNECTED(00000003)
9092:error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure:s23_clnt.c:583:

e:

#openssl version
OpenSSL 0.9.8e-fips-rhel5 01 Jul 2008

o novo servidor está em execução:

#openssl version
OpenSSL 1.0.1c 10 May 2012

Agora, depois de muita pesquisa, parece que há uma incompatibilidade entre o OpenSSL < 0.9.8k e OpenSSL 1.0.1.

As opções que identifiquei são:

  1. Migre o servidor para um servidor CentOS 6.4 no Azure (Ideal, mas politicamente difícil, não pergunte por quê)

  2. Atualize o servidor no local (Não suportado e não quero experimentá-lo em um servidor de produção)

  3. Limpe o servidor e reconstrua-o com 6.4 (possibilidade, se eu fizer isso, forçarei a opção 1)

  4. Remova o OpenSSL do servidor e instale uma versão mais recente (mais uma vez, algo com que não me sinto confortável em um servidor de produção)

  5. Instale uma segunda instância do OpenSSL (minha opção nº 2, mas não tenho certeza de como proceder)

  6. Instale uma alternativa ao OpenSSL (ainda que tenha começado a investigar isso)

  7. Desabilite a criptografia reforçada no Jasper Server e permita conexão via http (essa é a minha melhor correção temporária até que eu possa forçar o servidor a ser migrado para o Azure)

Existe alguma opção que eu perdi? Existe uma maneira no lado do Jasper de permitir conexões do OpenSSL mais antigo?

    
por Matt Bear 10.04.2013 / 04:57

1 resposta

3

A incompatibilidade com a qual você se deparou é esta:

A versão do OpenSSL no RHEL5 (e seus derivados) não anuncia o suporte para o TLS. Só faz SSLv3 e SSLv2.

A versão do OpenSSL no RHEL6 (e suas derivadas) suporta o TLS até o TLSv1.2. Também faz SSLv3, mas quer negociar o TLS.

Eles devem ainda ser capazes de negociar uma sessão, já que há uma (pequena) lista de cifras comuns para ambos, mas dependendo do que você selecionou para configurações de cifra no servidor ( por exemplo, para atenuar o BEAST, eliminar cifras de baixa segurança, etc.) pode não haver nenhuma cifra comum que o cliente e o servidor possam usar para se comunicar.

Os conjuntos de criptografia para o servidor seriam definidos em <Connector ciphers= no seu Tomcat server.xml ou no SSLCipherSuite do Apache se você o estivesse por trás do Apache. O cliente usaria o que foi configurado para usar ou DEFAULT caso contrário.

A resolução é verificar os conjuntos de criptografia no servidor, por exemplo, com openssl ciphers -v STRING , em que STRING é o que você configurou no servidor, repetindo o mesmo no cliente e, em seguida, ajustando um ou ambos até que um conjunto de criptografia esteja disponível e ambos negociarão.

    
por 27.12.2013 / 09:51