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