Frage von JohnnyBoteus, 46

Was muss ich als Programmierer zu SSL beachten?

Ich habe mir ein 1und1 Domain und Webserver gekauft auf dem ich meine Homepage baue. Ich programmiere mit html,css, Javascript und php. Was SSL angeht hab ich das jetzt so verstanden das alles mit einer Verschlüsselung + Identität geschickt wird usw aber was muss ich beachten wenn ich jetzt programmiere? Muss ich nicht irgendetwas einrichten so das alles encrypted wird? Reicht es einfach das Zertifikat zu kaufen und zu denken das alles verschlüsselt abgeschickt wird in meinen Formularen vom Browser zum Server und wieder zurück? :O Warum schickt der Browser nicht voreingestellt alles verschlüsselt und reicht es wenn ich jetzt ein SSL Zertifikat habe alle Passwörter die eingegeben werden und mit meiner MySQL Datenbank abgeglichen werden einfach mit post zu schicken? Wie sieht der Industrie Standard aus? Wie macht es zb Facebook wenn man sich einloggt ? Geht alles über PHP?

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von shilch, 12

Mit SSL ist heutzutage TLS gemeint (ist aber vom Prinzip her das gleiche mit gemeint).

was muss ich beachten wenn ich jetzt programmiere? Muss ich nicht irgendetwas einrichten so das alles encrypted wird? Reicht es einfach das Zertifikat zu kaufen und zu denken das alles verschlüsselt abgeschickt wird in meinen Formularen vom Browser zum Server und wieder zurück?

Als PHP Programmierer musst du dich nicht darum kümmern, die Verschlüsselung der Antwort, die letzendlich vom Browser empfangen wird, übernimmt die Serversoftware hinter der die PHP Skripte laufen. (Apache, Nginx ...)

Warum schickt der Browser nicht voreingestellt alles verschlüsselt

Ein Browser sendet standardmäßig nicht verschlüsselt, da es damals, als das ARPA-Net (Vorgänger des Internets) entstand, nicht nötig war; man vertraute sich Gegenseitig.
Mit dem Wachsen des Internets nahm auch die Kriminalität zu: Angreifer können sich zwischen die Verbindung von Client und Server setzen, und so die Daten abgreifen und auslesen, aber auch modifizieren (Fachwort: MITM Angriff).
Eine Verschlüsselung hätte aber auch nichts gebracht, da sich der Angreifer als Server ausgeben kann und einfach selbst einen anderen Verschlüsselungsschlüssel (:P) festlegt. Er kann also nach wie vor die Daten klauen.
Deshalb wurden die SSL-Zertifikate eingeführt, die die Identität des Servers bestätigen.
SSL-Zertifikate kosten (bzw. kosteten) aber immer viel Geld, da mit ihnen auch eine große Versicherungssumme verbunden ist. Mit HTTP/2 soll in Zukunft alles verschlüsselt sein.

reicht es wenn ich jetzt ein SSL Zertifikat habe alle Passwörter die eingegeben werden und mit meiner MySQL Datenbank abgeglichen werden einfach mit post zu schicken?

Solange die HTML Seite, auf der sich das Formular befindet, verschlüsselt ankommt (also nicht manipuliert werden kann) und das Formular zu einer verschlüsselten URL zeigt, ist die Verbindung sicher. Die (Session-)Cookies natürlich auch.
Am Rande: Die Passwörter in der Datenbank sollten natürlich auch verschlüsselt sein mit einem Hashverfahren wie bcrypt (https://secure.php.net/manual/de/function.password-hash.php)

Wie sieht der Industrie Standard aus?

Genau so :)

Wie macht es zb Facebook wenn man sich einloggt?

Auf der Facebook Website funktioniert das genauso: Beim Login werden die Daten verschlüsselt übertragen und man erhält entweder einen Fehler oder einen Cookie. Mit dem einzigen Unterschied, dass Facebook kein PHP benutzt ;)

Geht alles über PHP?

Wie gesagt hat PHP damit nichts zu tun, sondern der Webserver. Als Entwickler sollten man allerdings dafür sorgen, das die Verschlüsselung auch genutzt werden kann (wie oben erwähnt: Alle Daten verschlüsselt abrufen, nicht nur einen Teil).


Zusammenfassung: Verschlüsselung hat dich kaum zu kümmern, sorge einfach dafür, dass nicht nur ein Teil, sondern alles verschlüsselt übertragen wird.


Viel Spaß beim Verschlüsseln! :P


Fast hätte ich es vergessen: Die Website sollte natürlich überhaupt nicht mehr unverschlüsselt (über http) erreichbar sein. Frage am Besten sogar nach, ob bei dir HSTS aktiviert werden kann. Das sorgt nochmal für deutlich mehr Sicherheit.

Antwort
von zasch, 21

Also SSL wird am Webserver terminiert. Du kommst mit http auf Port 80 an un der Webserver redirected dich dann nach 443. Beide Ports mussen also schon mal offen sein.

Wie ssl am Webserver eingerichtet wird hängt von der Syntax ab und du musst natürlich den Key und dein Zertifikat hinterlegen.

Zuerst generierst du den request .csr und dein Key. Der request geht dann an eine certificate authority kurz CA und die signen dann dein request wenn du dich authentifiziert hast gegenüber der ca. Sofern geschehen bekommst du dann dein .crt oder .pem zB von der CA zurück.

Desweiteren musst du cipher suits und die tls Versionen angeben. Da gibts sichere aber auch unsichere Kombination. Ich hatte bspw Probleme mit Firefox und bestimmten suits.

Welches certificate du brauchst hängt von den Domains ab die du damit signen willst. Also mehrere Domainnamen im Zertifikat oder hast du zB viele subdomains? Hinzu kommt wie lange das cert gültig sein soll.

Letsencrypt benutze ich seit ein paar Monaten, damit kannst du kostenlos browservalide Zertifikate mit ausstellen, die zwar nur 90tage gültig sind, aber mit nem cron kann man das reibungslos immer weiter verlängern. Dazu brauchst du aber root auf deinem Server.

Wie gesagt du musst nicht unbedingt Geld dafür ausgeben aber dazu Brauch es mehr Expertise und die technischen Voraussetzungen mit entsprechenden Userrechten.

Ich hoffe du kannst damit was anfangen.

Cheers

Kommentar von zasch ,

Also deine Applikation weiß nix vom TLS deswegen musst du beim coden erst mal nichts beachten

Antwort
von LeonardM, 24

Zuerst einmal rate ich von der nutzung von ssl ab. Lieber tls. Selbst dann sind noch nicht alle cipher suites "gut". Da solltest du später auchnochmal am webserver nachstellen welche erlaubt werden sollen (cipher suites). Wenn du ein zertifikat willst das als vertrauenswürdig anerkannt wird von den gängigen browsern kaufst du dir eins für deine domain meist mit ner laufzeit von einem jahr von ner vertrauenswürdigen zertifizierungsstelle. Nen selbstsigniertes würde es aber von der sicherheit her auch tun bzw wäre sicherer wenn du längere schlüssel verwendest. Das zertifikat(inkl öffentlichen Schlüssel) inkl privatem schlüssel und evtl (wozu ich rate..) noch die dhparams gibst du dann in der webserverconfig an und der regelt vom schlüsselaustausch bis hin zum eigentlichen application data exchange alles für dich. Da du ja scheinbar keinen webserver entwickelst hast du was deine programmierung mit js,html,css,php angeht nichts spezielles zu beachten (y)

Antwort
von fiwaldi, 28

Das Zertifikat, nichtb gerade billig, betrifft nur die selbst installierten Programme auf dem Server

Im Browser mit anderen Programmen ändert sich nichts

Kommentar von JohnnyBoteus ,

Mein SSL Zertifikat war inklusive in mein Webhosting Paket und für mich spielt der Preis keine rolle wenn meine zukünftigen User sich sicher fühlen :) Also hilft SSL mir nicht beim verschlüsseln von zb. <form></form> Daten? bzw Formulardaten die mit der Post Methode geschickt werden? (von Klient zu Server)

Kommentar von LeonardM ,

wenn du dir nen x509 Zertifikat besorgst das fürs webhosting geeignet ist zahlst du ca 10-20€ pro jahr je nach anbieter und hast den gesamttraffic via https für deine domain (ausgenommen wildcard) abgedeckt.. also ich finde im vergleich zb zu den serverkosten dann das zertifikat so gut wie geschenkt

Kommentar von zasch ,

Mit entsprechenden Userrechten kann man sich mit letsencrypt kostenlose valide Zertifikate ausstellen. 90tage gültig, zwar kein Wildcard aber so viele Domains wie man will. Per cron reibungslos erneuerbar.

Keine passende Antwort gefunden?

Fragen Sie die Community