Erros de Handshake do Windows 8 IE 10 TLS para o Apache 2.2 no Centos 6.6

2

Estamos realmente perplexos com isso. Durante uma atualização para um ambiente Apache mais recente em execução no CentOS 6.6, encontramos problemas estranhos com conexões TLS de máquinas com Windows 8. A primeira dica sobre o erro foi que os usuários do IE10 estavam reclamando, assim como os aplicativos .NET em execução no Windows 8, chamando nossos serviços da Web.

Instalamos uma VM do modern.ie do Windows 8 executando o IE 10 e o Fiddler 4. Notamos que no Fiddler 4 o comando de túnel mostrava periodicamente a saída:

HTTP/1.1 200 Connection Established
FiddlerGateway: Direct
StartTime: 14:59:42.679
Connection: close

fiddler.network.https> HTTPS handshake to hostname.com failed. System.Security.Authentication.AuthenticationException A call to SSPI failed, see inner exception. < The logon attempt failed

Quando analisamos o visualizador de eventos do Windows na máquina, vemos o evento 36887 do Windows e a mensagem.

A fatal alert was received from the remote endpoint.  The TLS protocol defined fatal alert code is 49.

Então, passamos para o servidor da web. O servidor está executando:

httpd.x86_64        2.2.15-39.el6.centos
httpd-tools.x86_64  2.2.15-39.el6.centos
mod_ssl.x86_64      1:2.2.15-39.el6.centos
openssl.x86_64      1.0.1e-30.el6_6.7   @updates

Nós configuramos um log DEBUG para coletar informações sobre o tráfego. O que normalmente veríamos na saída é isso:

[Tue Mar 24 17:38:08 2015] [debug] ssl_engine_io.c(1935): OpenSSL: I/O error, 5 bytes expected to read on BIO#31854001770 [mem: 3187c0110c3]
[Tue Mar 24 17:38:08 2015] [debug] ssl_engine_kernel.c(1882): OpenSSL: Exit: error in SSLv3 read finished A
[Tue Mar 24 17:38:08 2015] [debug] ssl_engine_kernel.c(1882): OpenSSL: Exit: error in SSLv3 read finished A
[Tue Mar 24 17:38:08 2015] [info] [client 123.125.71.101] (70007)The timeout specified has expired: SSL handshake interrupted by system [Hint: Stop button pressed in browser?!]

Agora, outros navegadores como o IE11 e o Chrome no Windows 8 também geram os mesmos erros nos registros do servidor, mas é como se eles tivessem uma nova lógica incorporada e passassem a funcionar. Nós tentamos tudo o que podíamos pensar:

  • Alterando o SSLCipherSuite para uma variedade de strings.
  • Desativar o TLS v1.1 e v1.2
  • Distribua conteúdo local do apache em vez de conteúdo do servidor de aplicativos de back-end acessado via mod_proxy.
  • Desligue o KeepAlive

Quando analisamos o servidor com o Qualys SSL Lab, ele mostra compatibilidade com tudo, exceto o IE6 / XP e o Java 6, e obtém um A

.

É quase como se o Windows estivesse tendo problemas para reutilizar uma conexão SSL ou algo assim. Não vendo erros do FireFox no Windows 8 porque ele usa sua própria biblioteca em vez de SChannel.

Qualquer ajuda é muito apreciada!

Obrigado Jonathan

Atualização 1 - 25/03/2015

Decidimos que alguns dos problemas podem ser causados pelo trabalho de criptografia feito pelo RedHat e por uma incompatibilidade com algo no Apache 2.2 ou no Mod_SSL. Muitas partes móveis. Decidimos usar o bullet e criar um CentOS 7 no Apache 2.4, pois ele atualizou as bibliotecas Mod_SSL e OpenSSL em comparação com a ramificação 6.6. Isso parece ter corrigido todos os erros do SChannel do Windows 8 que estávamos vendo. Eu suspeito que isso acabará por chamar a atenção da RedHat e uma correção será eventualmente emitida para o problema.

Atualização 2 - 25/03/2015 Não é possível fazer com que o IE10 tenha o erro SChannel com o servidor CentOS 7, mas alguns clientes .NET ainda estavam relatando erros como este:

[Fiddler] A conexão com o secure.hot.com 'falhou.
System.Security.SecurityException Falha ao negociar conexão HTTPS com server.fiddler.network.https > Aperto de mão HTTPS para secure.ultracart.com falhou. System.Security.Authentication.AuthenticationException Uma chamada para SSPI falhou, consulte exceção interna. < A tentativa de logon falhou

Update3 - 27/03/2015 Acontece que um firewall na frente do servidor da Web que faz a inspeção de protocolo não gostou de algo sobre os pacotes TLS sendo enviados pelo Windows 8 e estava encerrando o tráfego.

    
por JonathanT 24.03.2015 / 23:28

0 respostas