On-the-Wire: Network Capture-Tools für API-Entwickler

Lane LiaBraaten, Google Data APIs-Team
Juni 2007

Einführung

Die Entwicklung von Anwendungen, die mit Webdiensten interagieren, stellt eine einzigartige Gruppe von Problemen dar. Oft ist es frustrierend, wenn man nicht genau weiß, welche Nachricht an den Server gesendet wurde oder welche Antwort eingegangen ist. Einige der schwersten Fehler, die wir ausfindig machen können, werden dadurch verursacht, dass eine Trennung zwischen dem, was wir an den Server senden, und dem tatsächlichen Kabel liegt.

In diesem Artikel werden mehrere Tools vorgestellt, mit denen Sie die Daten auf dem Kabel besser sichtbar und nützlicher machen können. Diese Tools werden allgemein als „Paket-Sniffer“ bezeichnet und erfassen alle Netzwerkpakete, die sich über Ihre Netzwerkschnittstelle bewegen. Es kann hilfreich sein, den Inhalt dieser Pakete sowie die Reihenfolge, in der sie gesendet und empfangen wurden, zu prüfen.

Beispiel: Öffentlichen Feed abrufen

Ich stelle ein Radteam für eine Wohltätigkeitsveranstaltung zusammen und habe einen Kalender für Veranstaltungen wie Informationsveranstaltungen, Fundraising und Teamtrainings erstellt. Ich habe diesen Kalender öffentlich gemacht, damit sich Teammitglieder und andere Fahrgäste den Kalender ansehen und an den Terminen teilnehmen können. Ich möchte auch einen Newsletter mit anstehenden Terminen versenden. Anstatt die Informationen von der Google Kalender-Website zu kopieren, kann ich auch die Google Kalender-Daten-API verwenden, um diesen Kalender abzufragen und Termine abzurufen.

In der Dokumentation zur Google Calendar API finden Sie weitere Informationen zur programmatischen Interaktion mit meinem Kalender über die RESTful Google Data API. Hinweis des Herausgebers:Ab Version 3 wird für die Google Calendar API das Google-Datenformat nicht mehr verwendet. Als Erstes rufen Sie die Terminfeed-URL des Kalenders auf, indem Sie auf der Seite mit den Kalendereinstellungen auf die Schaltfläche klicken:

http://www.google.com/calendar/feeds/24vj3m5pl125bh2ijbbneh953s%40group.calendar.google.com/public/basic

In der Google Kalender-Dokumentation kann ich Kalendertermine wie diesen abrufen und anzeigen, wobei PUBLIC_FEED_URL die Ereignisfeed-URL enthält.

CalendarService myService = new CalendarService("exampleCo-fiddlerExample-1");
final String PUBLIC_FEED_URL = "http://www.google.com/calendar/feeds/24vj3m5pl125bh2ijbbneh953s%40group.calendar.google.com/public/basic";
URL feedUrl = new URL(PUBLIC_FEED_URL);
CalendarEventFeed resultFeed = myService.getFeed(feedUrl, CalendarEventFeed.class);

System.out.println("All events on your calendar:");
for (int i = 0; i < resultFeed.getEntries().size(); i++) {
  CalendarEventEntry entry = resultFeed.getEntries().get(i);
  System.out.println("\t" + entry.getTitle().getPlainText());
}
System.out.println();

Dadurch wird eine einfache Liste der Termine in meinem Kalender erstellt:

All events on your calendar:
    MS150 Training ride
    Meeting with Nicole
    MS150 Information session

Das Code-Snippet oben zeigt die Titel der Kalendertermine an. Wie verhält es sich mit den restlichen Daten, die wir vom Server erhalten haben? Die Java-Clientbibliothek macht es nicht einfach, einen Feed oder Eintrag als XML auszugeben. Auch wenn dies der Fall ist, ist XML nicht die ganze Geschichte. Was ist mit den HTTP-Headern der Anfrage? Wurde die Abfrage weitergeleitet oder weitergeleitet? Bei komplexeren Abläufen werden diese Fragen immer wichtiger, insbesondere wenn etwas schiefgeht oder Fehler auftreten. Software zum Schnüffeln von Paketen kann diese Fragen beantworten und dazu den Netzwerkverkehr offenlegen.

tcpdump

tcpdump ist ein Befehlszeilentool, das auf Unix-ähnlichen Plattformen funktioniert. Es gibt aber auch einen Windows-Port mit dem Namen WinDump. Wie die meisten Datenpaket-Sniffer versetzt tcpdump Ihre Netzwerkkarte in den promiskuitiven Modus, für den Superuser-Berechtigungen erforderlich sind. Wenn Sie „tcpdump“ verwenden möchten, geben Sie einfach die Netzwerkschnittstelle an, die überwacht werden soll, und der Netzwerkverkehr wird an stdout gesendet:

sudo tcpdump -i eth0

Wenn Sie diesen Befehl ausführen, werden Sie mit verschiedenen Arten von Netzwerk-Traffic bombardiert. Einige davon erkennen Sie nicht. Sie können die Ausgabe einfach später an eine Datei und grep weiterleiten, aber das kann zu sehr großen Dateien führen. Die meisten Pakete enthalten Software, mit der du nur die benötigten Informationen erfassen kannst.

tcpdump unterstützt das Filtern anhand verschiedener Eigenschaften des Netzwerkverkehrs. Sie können „tcpdump“ beispielsweise anweisen, nur den Traffic zu oder von Ihrem Server an Port 80 (HTTP-Nachrichten) zu erfassen. Dazu fügen Sie den Hostnamen Ihres Servers in den folgenden Ausdruck ein:

dst or src host <hostname> and port 80

Für jedes Paket, das dem Filterausdruck entspricht, zeigt „tcpdump“ einen Zeitstempel, die Quelle und das Ziel des Pakets sowie mehrere TCP-Flags an. Diese Informationen können wertvoll sein, da sie die Reihenfolge anzeigen, in der Pakete gesendet und empfangen wurden.

Oft ist es auch hilfreich, sich den Inhalt der Pakete anzusehen. Das Flag „-A“ weist tcpdump an, jedes Paket im ASCII-Format auszugeben, wodurch die HTTP-Header und der Nachrichtentext offengelegt werden. Mit dem Flag „-s“ wird angegeben, wie viele Bytes angezeigt werden sollen. „-s 0“ bedeutet dabei, dass der Nachrichtentext überhaupt nicht abgeschnitten wird.

Wenn wir alles zusammenfügen, erhalten wir den folgenden Befehl:

sudo tcpdump -A -s 0 -i eth0 dst or src host <hostname> and port 80

Wenn Sie diesen Befehl ausführen und dann das kurze Java-Beispiel oben ausführen, sehen Sie die gesamte Netzwerkkommunikation, die an diesem Vorgang beteiligt ist. Unter dem Traffic sehen Sie die HTTP-Anfrage GET:

22:22:30.870771 IP dellalicious.mshome.net.4520 > po-in-f99.google.com.80: P 1:360(359) ack 1 win 65535
E.....@....\...eH..c...P.=.....zP......GET /calendar/feeds/24vj3m5pl125bh2ijbbneh953s%40group.calendar.google.com/public/basic HTTP/1.1
User-Agent: exampleCo-fiddlerExample-1 GCalendar-Java/1.0.6 GData-Java/1.0.10(gzip)
Accept-Encoding: gzip
Cache-Control: no-cache
Pragma: no-cache
Host: www.google.com
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Connection: keep-alive

Außerdem sehen Sie die Antwortnachricht 200 OK, die den Google-Datenfeed enthält. Der Feed ist in vier Pakete unterteilt:

22:22:31.148789 IP po-in-f99.google.com.80 > dellalicious.mshome.net.4520: . 1:1431(1430) ack 360 win 6432
E...1 ..2.I.H..c...e.P.....z.=.:P..M...HTTP/1.1 200 OK
Content-Type: application/atom+xml; charset=UTF-8
Cache-Control: max-age=0, must-revalidate, private
Last-Modified: Mon, 11 Jun 2007 15:11:40 GMT
Transfer-Encoding: chunked
Date: Sun, 24 Jun 2007 02:22:10 GMT
Server: GFE/1.3

13da
<?xml version='1.0' encoding='UTF-8'?><feed xmlns='http://www.w3.org/2005/Atom'
xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:gCal='http://sc
hemas.google.com/gCal/2005' xmlns:gd='http://schemas.google.com/g/2005'><id>http
://www.google.com/calendar/feeds/24vj3m5pl125bh2ijbbneh953s%40group.calendar.goo
gle.com/public/basic</id><updated>2007-06-11T15:11:40.000Z</updated><category sc
heme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/g/2
005#event'></category><title type='text'>MS150 Training Schedule</title><subtitl
e type='text'>This calendar is public</subtitle><link rel='http://schemas.google
.com/g/2005#feed' type='application/atom+xml' href='http://www.google.com/calend
ar/feeds/24vj3m5pl125bh2ijbbneh953s%40group.calendar.google.com/public/basic'></
link><link rel='self' type='application/atom+xml' href='http://www.google.com/ca
lendar/feeds/24vj3m5pl125bh2ijbbneh953s%40group.calendar.google.com/public/basic
?max-results=25'></link><author><name>Lane LiaBraaten</name><email>api.lliabraa@
gmail.com</email></author><generator version='1.0' uri='http://www.google.com/ca
lendar'>Google Calendar</generator><openSearch:totalRe


22:22:31.151501 IP po-in-f99.google.com.80 > dellalicious.mshome.net.4520: . 1431:2861(1430) ack 360 win 6432
E...1!..2.I.H..c...e.P.......=.:P.. 2...sults>3</openSearch:totalResults><openSe
arch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch
:itemsPerPage><gd:where valueString=''></gd:where><gCal:timezone value='America/
Los_Angeles'></gCal:timezone><entry><id>http://www.google.com/calendar/feeds/24v
j3m5pl125bh2ijbbneh953s%40group.calendar.google.com/public/basic/dgt40022cui2k3j
740hnj46744</id><published>2007-06-11T15:11:05.000Z</published><updated>2007-06-
11T15:11:05.000Z</updated><category scheme='http://schemas.google.com/g/2005#kin
d' term='http://schemas.google.com/g/2005#event'></category><title type='text'>M
S150 Training ride</title><summary type='html'>When: Sat Jun 9, 2007 7am to 10am

&amp;nbsp; PDT&lt;br&gt;   &lt;br&gt;Event Status:     confirmed</summary><conte
nt type='text'>When: Sat Jun 9, 2007 7am to 10am&amp;nbsp; PDT&lt;br&gt;   &lt;b
r&gt;Event Status:     confirmed</content><link rel='alternate' type='text/html'
 href='http://www.google.com/calendar/event?eid=ZGd0NDAwMjJjdWkyazNqNzQwaG5qNDY3
NDQgMjR2ajNtNXBsMTI1YmgyaWpiYm5laDk1M3NAZw' title='alternate'></link><link rel='
self' type='application/atom+xml' href='http://www.google.com/calendar/feeds/24v
j3m5pl125bh2ijbbneh953s%40group.calendar.google.com/public/basic/dgt40022cui2k3j
740hnj46744'></link><author><name>MS150 Training Schedule</name></author><gCal:s
endEventNotifications value='false'></gCal:sendEventNotifications></entry><entry

><id>http://www.google.com/cal

22:22:31.153097 IP po-in-f99.google.com.80 > dellalicious.mshome.net.4520: . 2861:4291(1430) ack 360 win 6432
E...1#..2.I.H..c...e.P.......=.:P.. ....endar/feeds/24vj3m5pl125bh2ijbbneh953s%4
0group.calendar.google.com/public/basic/51d8kh4s3bplqnbf1lp6p0kjp8</id><publishe
d>2007-06-11T15:08:23.000Z</published><updated>2007-06-11T15:10:39.000Z</updated
><category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.g
oogle.com/g/2005#event'></category><title type='text'>Meeting with Nicole</title

><summary type='html'>When: Mon Jun 4, 2007 10am to 11am&amp;nbsp; PDT&lt;br&gt;
  &lt;br&gt;Where: Conference Room B &lt;br&gt;Event Status:     confirmed</summ
ary><content type='text'>When: Mon Jun 4, 2007 10am to 11am&amp;nbsp; PDT&lt;br&
gt;  &lt;br&gt;Where: Conference Room B &lt;br&gt;Event Status:     confirmed

&lt;br&gt;Event Description: Discuss building cycling team for MS150</content><l
ink rel='alternate' type='text/html' href='http://www.google.com/calendar/event?
eid=NTFkOGtoNHMzYnBscW5iZjFscDZwMGtqcDggMjR2ajNtNXBsMTI1YmgyaWpiYm5laDk1M3NAZw'
title='alternate'></link><link rel='self' type='application/atom+xml' href='http
://www.google.com/calendar/feeds/24vj3m5pl125bh2ijbbneh953s%40group.calendar.goo
gle.com/public/basic/51d8kh4s3bplqnbf1lp6p0kjp8'></link><author><name>MS150 Trai
ning Schedule</name></author><gCal:sendEventNotifications value='false'></gCal:s
endEventNotifications></entry><entry><id>http://www.google.com/calendar/feeds/24
vj3m5pl125bh2ijbbneh953s%40group.calendar.google.com/public/basic/va41amq3r08dhh
kpm3lc1abs2o</id><published>20


22:22:31.190244 IP po-in-f99.google.com.80 > dellalicious.mshome.net.4520: P 4291:5346(1055) ack 360 win 6432
E..G1$..2.K.H..c...e.P.....<.=.:P.. ....07-06-11T15:10:08.000Z</published><updat
ed>2007-06-11T15:10:08.000Z</updated><category scheme='http://schemas.google.com
/g/2005#kind' term='http://schemas.google.com/g/2005#event'></category><title ty
pe='text'>MS150 Information session</title><summary type='html'>When: Wed Jun 6,
 2007 4pm to Wed Jun 6, 2007 5pm&amp;nbsp; PDT&lt;br&gt;   &lt;br&gt;Event Statu
s:     confirmed</summary><content type='text'>When: Wed Jun 6, 2007 4pm to Wed
Jun 6, 2007 5pm&amp;nbsp; PDT&lt;br&gt;   &lt;br&gt;Event Status:     confirmed<

/content><link rel='alternate' type='text/html' href='http://www.google.com/cale
ndar/event?eid=dmE0MWFtcTNyMDhkaGhrcG0zbGMxYWJzMm8gMjR2ajNtNXBsMTI1YmgyaWpiYm5la
Dk1M3NAZw' title='alternate'></link><link rel='self' type='application/atom+xml'
 href='http://www.google.com/calendar/feeds/24vj3m5pl125bh2ijbbneh953s%40group.c
alendar.google.com/public/basic/va41amq3r08dhhkpm3lc1abs2o'></link><author><name
>MS150 Training Schedule</name></author><gCal:sendEventNotifications value='fals
e'></gCal:sendEventNotifications></entry></feed>

Diese Ausgabe enthält alle HTTP-Header und -Inhalte sowie mehrere kryptische TCP-Flags. Alle Daten sind hier vorhanden, aber schwer zu lesen und zu verstehen. Es gibt mehrere grafische Tools, die das Anzeigen dieser Daten erleichtern.

WireShark (früher Ethereal)

Screenshot von Wireshark
WireShark zeigt den Netzwerkverkehr auf verschiedene Arten an.

WireShark ist ein grafisches Tool mit libpcap, derselben Bibliothek, auf der tcpdump basiert. Es ist unter Linux, Mac OS X und Windows verfügbar. Das GUI von WireShark bietet mehrere neue Möglichkeiten zur Interpretation und Interaktion mit Paketerfassungsdaten. Wenn Pakete über Ihre Netzwerkschnittstelle erfasst werden, werden sie je nach verwendetem Protokoll in verschiedenen Farben angezeigt. Sie können den Traffic auch nach Zeitstempel, Quelle, Ziel und Protokoll sortieren.

Wenn Sie eine Zeile in der Liste der Pakete auswählen, werden in Wireshark IP-, TCP- und andere protokollspezifische Informationen in den Paketheadern in einer für Menschen lesbaren Baumstruktur angezeigt. Die Daten werden außerdem unten auf dem Bildschirm in HEX und ASCII angezeigt.

Mit WireShark ist der Netzwerkverkehr zwar einfacher zu verstehen, in den meisten Fällen ist es aber dennoch sinnvoll. WireShark bietet robuste Filterfunktionen, darunter Unterstützung für Hunderte von Protokollen.

Tipp: Wenn Sie sich die verfügbaren Protokolle ansehen und komplexe Filter erstellen möchten, klicken Sie oben im WireShark-Fenster auf die Schaltfläche .

Wenn Sie den oben im Beispiel zu „tcpdump“ verwendeten Filter neu erstellen möchten, können Sie den folgenden Ausdruck in das Filterfeld „WireShark“ einfügen:

ip.addr==<your IP address> && tcp.port==80

Oder nutzen Sie das Wissen von WireShark zu HTTP:

ip.addr==<your IP address> && http

Dadurch werden die Ergebnisse der Erfassung nur auf die Pakete gefiltert, die an dieser Interaktion mit dem Google Kalender-Server beteiligt sind. Sie können auf die einzelnen Pakete klicken, um den Inhalt aufzurufen und die Transaktion zusammenzufassen.

Tipp: Sie können mit der rechten Maustaste auf eines der Pakete klicken und „TCP-Stream folgen“ auswählen, um die Anfragen und Antworten nacheinander in einem einzigen Fenster aufzurufen.

WireShark bietet verschiedene Möglichkeiten zum Speichern von Informationen zu Aufnahmen. Sie können ein, einige oder alle Pakete speichern. Wenn Sie einen TCP-Stream aufrufen, können Sie einfach auf „Speichern unter“ klicken, um nur die relevanten Pakete zu speichern. Sie können die Ausgabe auch aus einer tcpdump-Erfassung importieren und in WireShark ansehen.

Ein Problem: SSL und Verschlüsselung

Ein häufiger Nachteil von Paketerfassungstools ist die Unfähigkeit, über eine SSL-Verbindung verschlüsselte Daten anzuzeigen. Im Beispiel oben wird auf einen öffentlichen Feed zugegriffen, sodass SSL nicht erforderlich ist. Wenn das Beispiel jedoch auf einen privaten Feed zugegriffen hat, muss sich der Client beim Google-Authentifizierungsdienst authentifizieren, da hierfür eine SSL-Verbindung erforderlich ist.

Das folgende Snippet ähnelt dem vorherigen Beispiel, aber hier fordert CalendarService den Kalender-Metafeed des Nutzers an. Dabei handelt es sich um einen privaten Feed, der eine Authentifizierung erfordert. Rufen Sie zur Authentifizierung einfach die Methode setUserCredentials auf. Diese Methode löst eine HTTPS-Anfrage an den ClientLogin-Dienst aus und ruft das Authentifizierungstoken aus der Antwort ab. Das Objekt CalendarService enthält dann in allen nachfolgenden Anfragen das Authentifizierungstoken.

CalendarService myService = new CalendarService("exampleCo-fiddlerSslExample-1");
myService.setUserCredentials(username, userPassword);
final String METAFEED_URL = "http://www.google.com/calendar/feeds/default";
URL feedUrl = new URL(METAFEED_URL);
CalendarFeed resultFeed = myService.getFeed(feedUrl, CalendarFeed.class);

System.out.println("Your calendars:");
for (int i = 0; i < resultFeed.getEntries().size(); i++) {
  CalendarEntry entry = resultFeed.getEntries().get(i);
  System.out.println("\t" + entry.getTitle().getPlainText());
}
System.out.println();

Berücksichtigen Sie den Netzwerkverkehr, der für die Authentifizierung und den Zugriff auf einen privaten Google Data API-Feed erforderlich ist:

  1. Nutzeranmeldedaten an ClientLogin-Dienst senden
    • Senden Sie eine HTTP-POST an https://www.google.com/accounts/ClientLogin mit den folgenden Parametern im Nachrichtentext:
      • E-Mail: die E-Mail-Adresse des Nutzers.
      • Passwd: Das Passwort des Nutzers.
      • source: Die Clientanwendung. Sollte das Format „companyName-applicationName-versionID“ haben. Die Beispiele verwenden den Namen ExampleCo-FiddlerSSLExample-1.
      • Dienst: Der Google Kalender-Dienstname ist „cl“.
  2. Autorisierungstoken erhalten
    • Wenn die Authentifizierungsanfrage fehlschlägt, erhalten Sie den Statuscode „HTTP 403 Forbidden“.
    • Ist die Anfrage erfolgreich, besteht die Antwort des Dienstes aus dem HTTP-Statuscode „200 OK“, gefolgt von drei langen alphanumerischen Codes im Antworttext: SID, LSID und Auth. Der Wert Auth ist das Autorisierungstoken.
  3. Metafeed für privaten Kalender anfordern
    • Senden Sie eine HTTP-GET-Anfrage mit folgendem Header an http://www.google.com/calendar/feeds/default:
    • Authorization: GoogleLogin auth=<yourAuthToken>
      

Versuchen Sie, dieses Snippet auszuführen und den Netzwerkverkehr in WireShark anzuzeigen (mit 'http || ssl' als Filter). Sie sehen die an der Transaktion beteiligten SSL- und TLS-Pakete, aber die ClientLogin-Anfrage- und -Antwortpakete sind in den Anwendungsdatenpaketen verschlüsselt. Keine Sorge, wir sehen uns als Nächstes ein Tool an, mit dem Sie diese verschlüsselten Informationen ermitteln können.

Fiddler

Fiddler ist ein weiteres grafisches Sniffing-Tool, das sich jedoch erheblich von den bisher bereitgestellten Tools unterscheidet. Fiddler fungiert als Proxy zwischen Ihrer Anwendung und den Remote-Diensten, mit denen Sie interagieren, und wird praktisch zu einem Man-in-the-Middle. Fiddler stellt eine SSL-Verbindung zu Ihrer Anwendung und dem Remote-Webdienst her, entschlüsselt den Traffic von einem Endpunkt, erfasst den Klartext und verschlüsselt den Traffic erneut, bevor er ihn sendet. Leider ist Fiddler nur für Windows-Programme verfügbar, die alle Mac- und Linux-Nutzer verwenden.

Hinweis: Für die SSL-Unterstützung sind Fiddler-Version 2 und .NET Framework Version 2.0 erforderlich.

Das Anzeigen des Netzwerkverkehrs in Fiddler erfolgt hauptsächlich über den Tab "Sitzungsprüfung". Die folgenden untergeordneten Tabs sind bei Problemen mit den Google Data APIs am hilfreichsten:

  • Headers: Zeigt die HTTP-Header in einem minimierbaren Baumformat an.
  • Auth: Es werden die Header der Authentifizierung angezeigt.
  • Roh: zeigt den Inhalt von Netzwerkpaketen in ASCII-Text an

TIPP: Klicken Sie links unten im Fiddler-Fenster auf das Symbol , um die Erfassung zu aktivieren oder zu deaktivieren.

Fiddler verwendet das .NET Framework, um Netzwerkverbindungen so zu konfigurieren, dass Fiddler als Proxy verwendet wird. Das bedeutet, dass alle Verbindungen, die Sie mit Internet Explorer oder mit .NET-Code herstellen, standardmäßig in Fiddler erscheinen. Der Traffic aus dem obigen Java-Beispiel wird jedoch nicht angezeigt, da Java eine andere Möglichkeit hat, HTTP-Proxys einzurichten.

In Java können Sie den HTTP-Proxy mit Systemeigenschaften festlegen. Fiddler wird auf Port 8888 ausgeführt. Für eine lokale Installation können Sie Java-Code so konfigurieren, dass Fiddler als Proxy für HTTP und HTTPS verwendet wird. Fügen Sie dazu die folgenden Zeilen hinzu:

System.setProperty("http.proxyHost", "localhost");
System.setProperty("http.proxyPort", "8888");
System.setProperty("https.proxyHost", "localhost");
System.setProperty("https.proxyPort", "8888");

Wenn Sie das Beispiel mit diesen Zeilen ausführen, erhalten Sie ein schädliches Stacktrace aus dem Java-Sicherheitspaket:

[java] Caused by:
  sun.security.validator.ValidatorException: PKIX path building failed:
  sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
Screenshot von Fiddler
Fiddler kann SSL-Traffic entschlüsseln und anzeigen.

Dieser Fehler tritt auf, wenn das vom Server in einer SSL-Verbindung zurückgegebene Zertifikat nicht verifiziert werden kann. In diesem Fall stammt das fehlerhafte Zertifikat von Fiddler und fungiert als Man-in-the-Middle. Fiddler erstellt spontan Zertifikate und da Fiddler kein vertrauenswürdiger Aussteller ist, führen diese Zertifikate dazu, dass Java beim Einrichten der SSL-Verbindung fehlschlägt.

Hinweis:Wenn Fiddler ausgeführt wird, löst jede SSL-Verbindung, die Sie in Internet Explorer herstellen, eine Sicherheitswarnung aus. In dieser werden Sie gefragt, ob Sie das Zertifikat trotzdem verwenden möchten. Sie können auf „Zertifikat anzeigen“ klicken, um das von Fiddler generierte Zertifikat anzuzeigen.

Wie können Sie diese Sicherheitsausnahme umgehen? Im Grunde müssen Sie das Sicherheitsframework von Java neu konfigurieren, um allen Zertifikaten zu vertrauen. Glücklicherweise müssen Sie das Rad nicht hier neu erfinden. Sehen Sie sich die Lösung von Franz Labrie an und fügen Sie die SSLUtilities.trustAllHttpsCertificates()-Methode zum Beispiel oben hinzu.

Nachdem Sie Java für die Verwendung von Fiddler als Proxy konfiguriert und die Standardzertifikatüberprüfung deaktiviert haben, können Sie das Beispiel ausführen und alle Zugriffe sehen, die im Klartext über das Kabel gesendet werden. Stiehl nicht mein Passwort!

Denken Sie daran, dass diese Authentifizierungstransaktion nur ein kleines Beispiel für SSL-Traffic ist. Einige Webanwendungen verwenden ausschließlich SSL-Verbindungen. Daher ist das Debugging von HTTP-Traffic nicht möglich, ohne dass die Daten entschlüsselt werden können.

Fazit

„tcpdump“ ist für Linux, Mac OS X und Windows verfügbar und ein hervorragendes Tool, wenn Sie wissen möchten, wonach Sie suchen, und nur eine kurze Aufnahme benötigen. Es gibt jedoch einige grafische Tools, die den Netzwerkverkehr in Formaten darstellen, die leichter verständlich sind. tcpdump bietet viel mehr Optionen und Filterfunktionen als die hier beschriebenen. Wenn Sie eine vollständige Beschreibung der tcpdump-Funktion erhalten möchten, geben Sie „man tcpdump“ ein oder besuchen Sie die tcpdump-Manpage online.

WireShark ist auch für Linux, Mac OS X und Windows verfügbar. Dank der integrierten Unterstützung für Hunderte von Protokollen ist WireShark ein nützliches Tool für viele Anwendungen, nicht nur für die HTTP-Fehlerbehebung. In dieser Einführung werden die zahlreichen Funktionen von WireShark kaum vorgestellt. Weitere Informationen finden Sie auf der Website von WireShark.

Fiddler hat auch viele tolle Funktionen, aber das Besondere ist die Fähigkeit, SSL-Traffic zu entschlüsseln. Weitere Informationen finden Sie auf der Fiddler2-Website.

Diese Sniffing-Anwendungen sind hervorragende Tools für Ihren Werkzeuggürtel, und Beobachter werden bemerken, dass sie alle kostenlos sind. Wenn Sie das nächste Mal mit den Google APIs arbeiten und etwas Verdächtiges feststellen, sehen Sie sich die Netzwerkanalyse genauer an. Wenn Sie das Problem nicht finden können, posten Sie eine Frage in unserer Diskussionsgruppe. Wenn Sie die relevanten Netzwerknachrichten angeben, können andere Ihr Problem besser verstehen und diagnostizieren.

Viel Erfolg beim Schnarchen!

Ressourcen