Como depurar exceções que não são facilmente reproduzíveis e ocorrem apenas em um ambiente de produção?

9

Estou trabalhando em um problema em que a exceção ocorre apenas em nosso ambiente de produção. Não tenho acesso a esses ambientes nem sei o que essa exceção significa. Observando a descrição do erro, não consigo entender a causa.

javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure

Alguém poderia me aconselhar sobre como abordar esse tipo de problema?

C4CodeE4Exe
fonte
4
isso deve ser movido para StackOverflow? Eu acho que você obteria mais resposta lá.
DXM
10
Uma palavra: registro.
quant_dev
11
@ DXM - seria um tópico fora do Stack Overflow, pois é muito geral. O OP está atrás de estratégias e técnicas, em vez de uma solução específica. Se o código que estava falhando foi incluído, talvez ele funcione no estouro de pilha.
ChrisF
Na minha experiência, muitos problemas como esse surgem de problemas de configuração de segurança e podem ser difíceis de descobrir. Como outros já mencionaram, um bom registro ajudará a revelá-lo.
precisa saber é o seguinte

Respostas:

18

Em geral, melhor registro de depuração. Descubra o que você quer saber, adicione-o ao código e coloque-o nos logs para que você possa trabalhar com isso. Capturar mais detalhes do ambiente na época também ajuda - qual solicitação, quando, etc.

Especificamente, eu procuraria um padrão comum nos clientes que atingissem esse objetivo - e se você encontrasse um otimizado -, mas capturaria o tráfego da camada TCP.

Observar as mensagens SSL trocadas deve ter uma idéia do que está errado no protocolo ou, pelo menos, quais são as propriedades comuns da solicitação. Depois de ter isso, deve estar mais perto de ser depurado.

Como guia, eu acho que isso vem de uma das três coisas:

  1. Algo que não é SSL falou com a porta SSL. (as verificações de porta são comuns, mas também ocorre HTTP para a porta HTTPS.)
  2. O cliente não compartilha um conjunto aceitável de cifras com o servidor.
  3. O cliente oferece um certificado e o servidor tem um chiado. (Incomum, mas possível.)
Daniel Pittman
fonte
11
talvez os Server oferece um certificado auto-assinado ou assinado por uma CA que o cliente não sabe / Confiança
Carlos Campderrós
Acho que já vi o número 3 acontecer quando uma das partes expirou.
FrustratedWithFormsDesigner
Eu já depurei bastante nos sistemas de produção. Nunca usei um depurador, ele sempre registrou ou gravou valores-chave em uma parte específica da tela.
Loren Pechtel
obrigado a todos pelo seu conselho. Tenho certeza de que existem maneiras pragmáticas de resolver um bug de produção.
C4CodeE4Exe
4

Eu recomendaria usar uma estratégia de log com um nível máximo configurável de log. Um utilitário como o log4j ( http://logging.apache.org/log4j/ , http://en.wikipedia.org/wiki/Log4j ) pode fazer o trabalho.

O nível de log configurável (ou verbosidade) é importante para encontrar o motivo de um erro, possivelmente sem ter que reimplementar seu software.

Se essa estratégia não for suficiente para encontrar o erro, tente descobrir como produzir / ler os logs produzidos pelos aplicativos com os quais o seu está se comunicando.

Você também pode implementar algum mecanismo para obter automaticamente mais informações sobre erros por email.

De maneira mais geral, você pode ler alguns artigos sobre instrumentação, que é um tópico maior que inclui criação de log e rastreio.

PL
fonte