Wie kann ich Ausnahmen debuggen, die nicht leicht reproduzierbar sind und nur in einer Produktionsumgebung auftreten?

9

Ich arbeite an einem Problem, bei dem die Ausnahme nur in unserer Produktionsumgebung auftritt. Ich habe keinen Zugriff auf diese Umgebungen und weiß auch nicht, was diese Ausnahme bedeutet. Wenn ich mir die Fehlerbeschreibung ansehe, kann ich die Ursache nicht verstehen.

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

Würde mich bitte jemand beraten, wie ich mit dieser Art von Problem umgehen soll?

C4CodeE4Exe
quelle
4
sollte dies auf StackOverflow verschoben werden? Ich denke, Sie würden dort mehr Antwort bekommen.
DXM
10
Ein Wort: Protokollierung.
quant_dev
1
@DXM - es wäre kein Thema für Stack Overflow, da es zu allgemein ist. Das OP verfolgt eher Strategien und Techniken als eine spezifische Lösung. Wenn der fehlerhafte Code enthalten war, funktioniert er möglicherweise bei Stack Overflow.
ChrisF
Nach meiner Erfahrung ergeben sich die meisten derartigen Probleme aus Sicherheitskonfigurationsproblemen und können schwer herauszufinden sein. Wie andere bereits erwähnt haben, hilft eine gute Protokollierung dabei, dies aufzudecken.
Jfrankcarr

Antworten:

18

Im Allgemeinen bessere Debug-Protokollierung. Finden Sie heraus, was Sie wissen möchten, fügen Sie es dem Code hinzu und speichern Sie es in den Protokollen, damit Sie es herausfinden können. Es hilft auch, mehr Details der Umgebung zu erfassen - welche Anfrage, wann usw.

Insbesondere würde ich nach einem gemeinsamen Muster für Clients suchen, die dies treffen - und wenn Sie eines finden, das optimiert wird -, aber dann den TCP-Layer-Verkehr erfassen.

Wenn Sie sich die ausgetauschten SSL-Nachrichten ansehen, sollten Sie eine Vorstellung davon bekommen, was im Protokoll falsch läuft oder zumindest die allgemeinen Eigenschaften der Anforderung. Sobald Sie das haben, sollte es näher am Debuggen sein.

Als Leitfaden würde ich vermuten, dass dies von einem von drei Dingen herrührt:

  1. Etwas, das nicht SSL ist, hat mit dem SSL-Port gesprochen. (Port-Scans sind häufig, aber es findet auch HTTP zum HTTPS-Port statt.)
  2. Der Client teilt dem Server keine akzeptablen Chiffren mit.
  3. Der Client bietet ein Zertifikat an, und der Server hat eine zischende Passform. (Gelegentlich, aber möglich.)
Daniel Pittman
quelle
1
Vielleicht bietet der Server ein selbstsigniertes Zertifikat an oder wird von einer Zertifizierungsstelle signiert, die der Client nicht kennt / dem er nicht vertraut
Carlos Campderrós
Ich glaube, ich habe # 3 gesehen, als eine der Parteien Zertifikate abgelaufen ist.
FrustratedWithFormsDesigner
Ich habe ziemlich viel auf Produktionssystemen debuggt. Ich habe noch nie einen Debugger verwendet, er hat immer entweder Schlüsselwerte protokolliert oder in einen bestimmten Teil des Bildschirms geschrieben.
Loren Pechtel
Vielen Dank für Ihren Rat. Ich bin sicher, dass es pragmatische Möglichkeiten gibt, einen Produktionsfehler zu beheben.
C4CodeE4Exe
4

Ich würde empfehlen, eine Protokollierungsstrategie mit einer konfigurierbaren maximalen Protokollierungsstufe zu verwenden. Ein Dienstprogramm wie log4j ( http://logging.apache.org/log4j/ , http://en.wikipedia.org/wiki/Log4j ) könnte den Job erledigen.

Die konfigurierbare Protokollstufe (oder Ausführlichkeit) ist wichtig, um den Grund für einen Fehler ermitteln zu können, möglicherweise ohne dass Sie Ihre Software erneut bereitstellen müssen.

Wenn eine solche Strategie nicht ausreicht, um den Fehler zu finden, versuchen Sie herauszufinden, wie die Protokolle erstellt / gelesen werden, die von den Anwendungen erstellt wurden, mit denen Ihre kommuniziert.

Sie können auch einen Mechanismus implementieren, um automatisch weitere Informationen zu Fehlern per E-Mail zu erhalten.

Im Allgemeinen können Sie einige Artikel über Instrumentierung lesen. Dies ist ein größeres Thema, das Protokollierung und Nachverfolgung umfasst.

PL
quelle