{"id":69054,"date":"2026-06-30T08:59:04","date_gmt":"2026-06-30T06:59:04","guid":{"rendered":"https:\/\/www.herr-rau.de\/wordpress\/?p=69054"},"modified":"2026-06-30T09:08:51","modified_gmt":"2026-06-30T07:08:51","slug":"client-und-server-tcp-und-tls-2","status":"publish","type":"post","link":"https:\/\/www.herr-rau.de\/wordpress\/2026\/06\/client-und-server-tcp-und-tls-2.htm","title":{"rendered":"Client und Server, TCP und TLS (2)"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/www.herr-rau.de\/wordpress\/2026\/06\/client-und-server-tcp-und-tls-1.htm\">(Fortsetzung von hier.)<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">8. TLS<\/h2>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>Aufgabe:<\/strong> Schalte den Client auf den Modus \u201eVerschl\u00fcsselt\u201c, und probiere die Beispiele aus.<br>Auf dem Verbindungsbutton steht jetzt \u201eVerbindung herstellen! (TLS)\u201c, das hei\u00dft, dass die Verbindung verschl\u00fcsselt wird. Auf der HTTP-Ebene bleibt alles gleich. Damit erh\u00e4ltst auf Port 443 Antworten von den meisten Webservern. Probiere auch andere Adressen aus, auf Port 443 und mit TLS sollten die meisten funktionieren.<\/p>\n<\/blockquote>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1061\" height=\"609\" src=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/tcp-tls-http_3.png\" alt=\"\" class=\"wp-image-69039\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Das Problem ist: TCP-Verbindungen sind nicht verschl\u00fcsselt. Alle Anfragen an den Server k\u00f6nnen mitgelesen werden. Das betrifft die die Anfragen, die auf Port 80 geschickt werden, und deren URL mit \u201ehttp:\/\/\u201c beginnt. Auf \u201ehttp:\/\/\u201c reagieren aber fast alle Webseiten zwar mit einer Webseite, aber in der steht nur, dass man nach \u201ehttps\u201c umgezogen ist. Das hei\u00dft: da gibt es nicht mehr viel zu sehen. Eine Ausnahme sind unsere eigenen Web-Adressen zum Experimentieren und ein paar andere, etwa <code>httpforever.com<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dieses \u201ehttps\u201c hei\u00dft eigentlich \u201eHTTP \u00fcber TLS\u201c; die HTTP-Anfragen sind exakt die gleichen.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Wie TLS funktioniert (optional)<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\"><small>Aber auf der Ebene darunter geschieht etwas, einem bestimmten Protokoll folgend, das TLS (Transport Layer Security) hei\u00dft. Zuerst wird eine TCP-Verbindung erzeugt; dann l\u00e4sst man sich den \u00f6ffentlichen Teil des Public-Private-Schl\u00fcsselpaars des Servers schicken. In der einfachsten Fassung denkt sich der Client einen Schl\u00fcssel f\u00fcr eine symmetrische Verschl\u00fcsselung aus, verschl\u00fcsselt diesen mit dem \u00f6ffentlichen Schl\u00fcssel des Servers, und schickt diesem das Ergebnis. Der Server ist dann ja auch der einzige, der diese Nachricht mit seinem privaten Schl\u00fcssel entschl\u00fcsseln kann, womit sowohl Client als auch Server und sonst niemand im Besitz des Schl\u00fcssels f\u00fcr die symmetrische Verschl\u00fcsselung sind und demnach alles weitere nach Herzenslust verschl\u00fcsseln k\u00f6nnen.<\/small><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><small>Einziger Schwachpunkt: Wenn sich der Client am Anfang den \u00f6ffentlichen Schl\u00fcssel des Servers holt, verpackt in einem Zertifikat, dann muss der ich darauf verlassen, dass dieser \u00f6ffentliche Schl\u00fcssel wirklich zum Server geh\u00f6rt. Es k\u00f6nnte sich ja auch ein Man-in-the-Middle dazwischengeschaltet haben und seinen eigenen Schl\u00fcssel f\u00fcr den des Servers ausgeben, die Nachrichten des Clients dadurch entschl\u00fcsseln, und danach neu verschl\u00fcsselt an den Server schicken. Deshalb gibt es Institutionen, die solche Zertifikate verwalten und best\u00e4tigen. Oder man klickt einfach im Browser auf &#8222;Unsigniertes Zertifikat trotzdem akzeptieren&#8220; oder so \u00e4hnlich.<\/small><\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Die Zertifikate<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">In allen Beispielen sind die Zertifikate f\u00fcr Host-Namen ausgestellt, also etwa <code>herr-rau.de<\/code>und nicht f\u00fcr IP-Adressen. Bei dem Erstellen der Verbindung \u00fcber TLS kannst du also keine IP-Adresse mehr eingeben, sondern musst den Host-Namen benutzen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">9. Content mitschicken: HTTP GET (eigene Server)<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Man kann in einer HTTP-GET-Anfrage auch Parameter mitschicken. Das sieht dann etwa so aus:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>GET \/gedicht.php?autor=droste HTTP\/1.1\nHost: dailyimage.php<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Dabei h\u00e4ngt man an die angefordertere Ressource mit einem Fragezeichen Paare von Parametern und Werten an. Das mit diesem <code>?<\/code> sieht man so bei vielen Seiten im Browser in der Adresszeile.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Was die Ressource, hier <code>gedicht.php<\/code>, mit dem \u00fcbergebenen Parameter macht, das h\u00e4ngt von ihr ab. Es ist sehr leicht, eine HTML- oder Text-Datei mit Code de Programmiersprache PHP anzureichern, die auf vielen Servern zur Verf\u00fcgung steht. Damit kann man eine Datei erzeugen, die je nach \u00fcbergebenem Wert (hier: <code>droste<\/code>) des Parameters (hier: <code>autor<\/code>) unterschiedliche Ergebnisse erzeugt, die dann zur\u00fcckgeschickt werden.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>Aufgabe:<\/strong> Schalte auf den Modus \u201eTCP mit Parametern\u201c und probiere die Beispiele aus. Teste das mit \u201edroste\u201c, \u201egoethe\u201c und \u201eschiller&#8220; als Autor.<\/p>\n<\/blockquote>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1061\" height=\"609\" src=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/tcp-tls-http_4.png\" alt=\"\" class=\"wp-image-69040\"\/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">10. Content mitschicken: HTTP-GET (fremde Server)<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Nachdem fremde Server meist nur \u00fcber TCP erreichbar sind, findest du alle Beispiele daf\u00fcr im Modus \u201eTCP GET mit Parametern\u201c.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">11. Content mitschicken: HTTP-POST (eigene Server)<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Man k\u00f6nnte auf die Idee kommen, auf diese Art Benutzer und Passwort mitzuschicken:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>GET \/anmeldung1.php?user=millie&amp;passwort=1234 HTTP\/1.1<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Das funktioniert auch, allerdings sind diese so angereicherten Adressen \u00f6ffentlich sichtbar, etwa in der Browser-Geschichte. Wenn es geheimer bleiben soll, bietet das Hypertext Transfer Protocol eine andere M\u00f6glichkeit, Information als Inhalt mitzuschicken, n\u00e4mlich POST statt GET.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">(Im Beispiel geht es nur um kurze Texte, aber HTTP erm\u00f6glicht auch, ganze und gr\u00f6\u00dfere Dateien der Server-Request beizuf\u00fcgen. Was der Server dann damit macht, h\u00e4ngt nat\u00fcrlich von diesem ab.)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Eine POST-Anfrage sieht so aus:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>POST \/anmeldung2.php HTTP\/1.1\nHost: dailyimage.php\nContent-Type: application\/x-www-form-urlencoded\nConnection: disconnect\nContent-Length: 25\n\nuser=millie&amp;passwort=1234<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Allerdings muss man dabei angeben, wie gro\u00df die Nachricht ist, etwa durch <code>Content-Length<\/code>, in diesem Fall: 25 Zeichen. (Es gibt noch andere M\u00f6glichkeiten, das zu tun, die besonders f\u00fcr sehr langen Content verwendet werden. Aber ausrechnen muss man immer etwas.)<br>Deshalb gibt es die M\u00f6glichkeit, die Parameter und Werte in eine Extrazeile zu schreiben, deren Inhalt dann mit \u201eLade HTTP-Post\u201c in der korrekten Form \u00fcbernommen wird. Wenn du eigene Beispiele willst, musst du die Ressource von Hand nachtragen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Der Content ist hier die letzte Zeile, also das mit den beiden Parameter\/Wert-Paaren. Der <code>Content-Type<\/code> ist der gleiche wie bei dem GET-Beispiel; es gibt auch noch weitere.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>Aufgabe:<\/strong> Schalte in den Modus \u201eEinfach mit POST\u201c. Probiere die POST-Anfrage im Beispiel mit verschiedenen Werten f\u00fcr die Parameter aus, oder lass einen oder beide Parameter weg oder f\u00fcge neue hinzu.<\/p>\n<\/blockquote>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1061\" height=\"609\" src=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/tcp-tls-http_6.png\" alt=\"\" class=\"wp-image-69041\"\/><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\">Projektidee: Einkaufsliste<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Man k\u00f6nnte eine Adresse anlegen, die folgende Parameter akzeptiert, hier mit Beispielwerten:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>zeige=unerledigt<\/code>zeigt alle unerledigten Punkte auf der Einkaufsliste<\/li>\n\n\n\n<li><code>neu=Milch<\/code> setzt Milch auf die Liste der unerledigten Punkte<\/li>\n\n\n\n<li><code>erledigt=Kaffee<\/code> entfernt Kaffee von der Liste<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Man m\u00fcsste sich jetzt nur noch die Authentifizierung \u00fcberlegen und dem Server erm\u00f6glichen, die Liste irgendwo zu speichern, entweder in einer Datei oder in einer SQL-Datenbank. Das ist dann aber eine Aufgabe, mit der der Client nichts zu tun hat.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Au\u00dferdem m\u00fcsste man sich \u00fcberlegen, in welchem Format die Liste heruntergeladen wird. Das kann eine Reihe von Textzeilen sein oder etwas in einem standardisierten Format wie JSON<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">12. Content mitschicken: HTTP-POST (fremde Server)<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Dazu gibt es noch keine Beispiele.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">13. DoS und DDoS<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Jede Verbindung und jede Anfrage besch\u00e4ftigt den Server und kostet ihn Rechenzeit. Wenn man so viele Anfragen sendet, dass der Server \u00fcberlastet ist, hei\u00dft das Denial-of-Service-Angriff (DoS).<br>Wenn dieser Angriff nicht nur von einem Rechner ausgeht, sondern von vielen gleichzeitig, hei\u00dft der Angriff Distributed Denial of Servicer (DDoS). Diese Rechner geh\u00f6ren dann meist zu einem Botnet, das hei\u00dft, sie sind alle mit Schadsoftware infiziert, die es erm\u00f6glicht, sie zentral und auf einmal fernzusteuern. Das merkt man als Besitzer dieser Rechner nicht unbedingt, zumal zu solchen f\u00fcr Botnets anf\u00e4lligen Rechnern alle m\u00f6glichen Ger\u00e4te im Internet of Things (IoT) geh\u00f6ren: K\u00fchlschr\u00e4nke, \u00dcberwachungskameras, Temperatursensoren, alles, was irgendwie im Internet ist.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Viele Server werden misstrauisch, wenn fehlerhafte oder nicht standardisierte Anfragen an den Server geschickt werden. Du darfst also experimentieren, solltest dich aber zur\u00fcckhalten, damit der Server nicht verd\u00e4chtiges Verhalten von deiner IP-Adresse aus vermutet.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Das bewusste Suchen nach L\u00fccken zur Vorbereitung des Aussp\u00e4hens von Daten ist in Deutschland strafbar.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/www.herr-rau.de\/wordpress\/2026\/06\/client-und-server-tcp-und-tls-3.htm\">(Letzter Teil hier.)<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>(Fortsetzung von hier.) 8. TLS Aufgabe: Schalte den Client auf den Modus \u201eVerschl\u00fcsselt\u201c, und probiere die Beispiele aus.Auf dem Verbindungsbutton steht jetzt \u201eVerbindung herstellen! (TLS)\u201c, das hei\u00dft, dass die Verbindung verschl\u00fcsselt wird. Auf der HTTP-Ebene bleibt alles gleich. Damit erh\u00e4ltst auf Port 443 Antworten von den meisten Webservern. Probiere auch andere Adressen aus, auf Port [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":69039,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false},"categories":[25],"tags":[227,233],"class_list":["post-69054","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-informatik","tag-informatik","tag-programmierprojekte"],"jetpack_featured_media_url":"https:\/\/www.herr-rau.de\/wordpress\/archiv\/tcp-tls-http_3.png","jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/posts\/69054","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/comments?post=69054"}],"version-history":[{"count":3,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/posts\/69054\/revisions"}],"predecessor-version":[{"id":69086,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/posts\/69054\/revisions\/69086"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/media\/69039"}],"wp:attachment":[{"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/media?parent=69054"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/categories?post=69054"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/tags?post=69054"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}