Como acelerar o SSLHandshake?

2

Eu tenho um aplicativo java que faz uma conexão SSL com um servidor remoto.

Quando executo o aplicativo da minha máquina de desenvolvimento ( que está geograficamente mais próxima do servidor remoto, em uma rede diferente e está executando o Win7 ), a conexão leva menos de um segundo para ser concluída. / p>

Quando executo o aplicativo a partir de uma máquina de produção ( Solaris ), a conexão SSL leva mais de 10 segundos para ser concluída.

Eu gostaria de entender o que posso fazer para acelerar esse tempo de conexão.

Eu mudei o rastreamento de depuração (com um printstream estendido que registra o tempo decorrido):

-Djavax.net.debug=all

Posso ver que a maior parte do tempo perdido ocorre depois que o cliente concluiu a Especificação de Cifra de Alteração do Cliente, entre uma gravação e uma leitura.

<Elapsed  [4249]ms>    *** Finished
<Elapsed  [4251]ms>    ***
<Elapsed  [4251]ms>    [write] MD5 and SHA1 hashes:  len = 16
<Elapsed  [4254]ms>    Padded plaintext before ENCRYPTION:  len = 48
<Elapsed  [4258]ms>    main, WRITE: TLSv1 Handshake, length = 48
<Elapsed [11230]ms>    main, READ: TLSv1 Change Cipher Spec, length = 1
<Elapsed [11231]ms>    JsseJce: Using cipher AES/CBC/NoPadding from provider SunJCE
<Elapsed [11360]ms>    main, READ: TLSv1 Handshake, length = 48
<Elapsed [11360]ms>    Padded plaintext after DECRYPTION:  len = 48
<Elapsed [11364]ms>    *** Finished

Que opções posso considerar para ajudar a acelerar o aperto de mão?

  • Atualizando o JRE? O servidor está atualmente em execução no 1.4.2.
  • DNS reverso? Eu vi algumas recomendações que o DNS reverso pode ajudar a acelerar um handshake SSL. Nem meu servidor de desenvolvimento do servidor de produção atualmente está usando o DNS reverso.
  • Solução de problemas de rede - Indicação da equipe de rede é que a rede está bem?
  • Aumentar CPU / Memória - O monitoramento indicou que não estamos atingindo 100% da memória ou da CPU durante o handshake?
  • / dev / random? Já vi referências que acessam / dev / random enquanto os dados aleatórios usados no handshake no solaris podem ser lentos?

-
Referências :
Este artigo descreve detalhadamente o handshake SSL - role para baixo até a seção Protocolo SSL que tem no diagrama uma nota explicando o processo de 15 passos do aperto de mão:
link

Este artigo descreve o handshake SSL completo com as mensagens de depuração para referência:
link

- Editar
Testar em uma máquina diferente dentro da rede de problemas mostrou alguns resultados interessantes. Os primeiros 10 passos do handshake SSL aconteceram duas vezes mais rápido, mas o atraso na gravação durante a fase 'terminada' levou 80% do tempo total de handshake decorrido.

<Elapsed  [1816]ms>    main, WRITE: TLSv1 Handshake, length = 48
<Elapsed [10078]ms>    main, READ: TLSv1 Change Cipher Spec, length = 1
    
por Sival Dot 23.02.2012 / 22:40

2 respostas

0

A causa dessa instância específica desse problema foi uma pesquisa inversa de DNS no servidor que estava falhando.

Isso foi desencadeado por uma alteração nos servidores de nomes DNS no lado do cliente que não estavam sendo apanhados no servidor.

Esse problema pôde ser isolado usando o Wireshark nas máquinas cliente e servidor, e pôde ser confirmado usando: dig

dig @namserverURL -x serverIP +trace

Depois que os problemas de DNS foram resolvidos, a velocidade do handshake SSL foi amplamente melhorada.

    
por 16.03.2012 / 02:34
1

Você já tentou se conectar a partir de outra máquina no mesmo site? Ainda está lento? A máquina remota Solaris também está?

Eu diria que tente atualizar a JVM, se você puder testar em uma máquina idêntica primeiro.

Para dns reversos, colocar uma entrada em / etc / hosts deve ser suficiente.

Qual modelo e versão do sistema operacional é a máquina Solaris? Alguns têm chips criptográficos que você pode tentar e ver se está habilitado ou não.

    
por 23.02.2012 / 23:26