¿Cómo puedo depurar excepciones que no son fácilmente reproducibles y solo ocurren en un entorno de producción?

9

Estoy trabajando en un problema donde la excepción solo ocurre en nuestro entorno de producción. No tengo acceso a estos entornos, ni sé qué significa esta excepción. Mirando la descripción del error, no puedo entender la causa.

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

¿Podría alguien aconsejarme sobre cómo abordar este tipo de problema?

C4CodeE4Exe
fuente
44
¿Debería esto trasladarse a StackOverflow? Creo que obtendrías más respuesta allí.
DXM
10
Una palabra: registro.
quant_dev el
1
@DXM: estaría fuera de tema para Stack Overflow, ya que es demasiado general. El OP busca estrategias y técnicas en lugar de una solución específica. Si se incluyó el código que estaba fallando, entonces tal vez podría funcionar en Stack Overflow.
ChrisF
En mi experiencia, la mayoría de los problemas como este surgen de problemas de configuración de seguridad y pueden ser difíciles de resolver. Como otros han mencionado, un buen registro ayudará a revelarlo.
jfrankcarr

Respuestas:

18

En general, mejor registro de depuración. Averigua lo que quieres saber, agrégalo al código y tenlo en los registros para que puedas resolverlo. Capturar más detalles del entorno en ese momento también ayuda: qué solicitud, cuándo, etc.

Específicamente, buscaría un patrón común en los clientes que golpean esto, y si encuentra uno, optimice, pero luego vaya y capture el tráfico de la capa TCP.

Mirar los mensajes SSL intercambiados debería darle una idea de lo que está mal en el protocolo, o al menos cuáles son las propiedades comunes de la solicitud. Una vez que tenga eso, debería estar más cerca de ser depurado.

Como guía, supongo que esto proviene de una de tres cosas:

  1. Algo que no es SSL habló con el puerto SSL. (los escaneos de puertos son comunes, pero también ocurre HTTP al puerto HTTPS).
  2. El cliente no comparte un conjunto aceptable de cifrados con el servidor.
  3. El cliente ofrece un certificado y el servidor tiene un ajuste sibilante. (Poco frecuente, pero posible).
Daniel Pittman
fuente
1
tal vez el servidor ofrece un
certificado autofirmado
Creo que he visto # 3 suceder cuando una de las partes ha expirado los certificados.
FrustratedWithFormsDesigner
He depurado bastante los sistemas de producción. Nunca he usado un depurador, siempre ha estado registrando o escribiendo valores clave en una parte particular de la pantalla.
Loren Pechtel
gracias a todos por sus consejos. Estoy seguro de que existen formas pragmáticas de resolver un error de producción.
C4CodeE4Exe
4

Recomendaría usar una estrategia de registro con un nivel de registro máximo configurable. Una utilidad como log4j ( http://logging.apache.org/log4j/ , http://en.wikipedia.org/wiki/Log4j ) podría hacer el trabajo.

El nivel de registro configurable (o verbosidad) es importante para poder encontrar la razón de un error, posiblemente sin tener que volver a implementar su software.

Si dicha estrategia no es suficiente para encontrar el error, intente encontrar cómo producir / leer los registros producidos por las aplicaciones con las que se está comunicando el suyo.

También puede implementar algún mecanismo para obtener automáticamente más información sobre errores por correo electrónico.

En términos más generales, puede leer algunos artículos sobre instrumentación, que es un tema más amplio que incluye el registro y el seguimiento.

PL
fuente