yanmai
Goto Top

Sicheres Netzwerk

Hallo ihr Administratoren,
da ich mich echt erschreckt habe, wie einfach man die Daten mit einer HTTP Verbindung zum Server mitlesen kann, habe ich meine Website jetzt auf HTTPS umgestellt. Das Geld war es mir echt wert. Da es sich jetzt um HTTPS handelt, werden die Daten ja auf dem Weg zum Server verschlüsselt. Wenn ich die Daten über C# lossende (über die POST Methode) bekomme ich den Fehler, dass das Programm nicht vertrauenswürdig ist und die Verbindung daher vom Server abgebrochen wird.

Nun habe ich den Script umgeschrieben, dass die Daten via $_GET transportiert werden. Das funktioniert, aber ist das nicht unsicher, seine Daten so zu versenden? Ich meine da sieht man ja an der URL schon alle Daten. Oder wird die URL dann über HTTPS auch verschlüsselt? Bzw. wann nutzt man POST oder GET?

Content-Key: 322175

Url: https://administrator.de/contentid/322175

Ausgedruckt am: 19.03.2024 um 06:03 Uhr

Mitglied: cerberus90
cerberus90 27.11.2016 um 01:22:01 Uhr
Goto Top
Hallo,

ich bin der Meinung das du hier eigentlich POST nutzen solltest und könntest....verschlüssel die Daten doch einfach zusätzlich noch selbst bevor du Sie versendest.

Mit dem SSL Fehler könnte es evtl. helfen wenn du deine (selbst erstellte) CA (Stammzertifizierungstelle) in den vertrauenswürdigen Stammzertifizierungsspeicher aufnimmst.
Mitglied: StefanKittel
StefanKittel 27.11.2016 um 09:06:00 Uhr
Goto Top
Moin,

halb und halb.
Ja, der Query-String wird durch SSL auch mit verschlüsselt.
Aber wenn irgendwo ein Proxy an der Kommunikation beteiligt ist, sieht der den Query-String.

Also besser Post.
Ein öffentliches SSL-Zertifikat kostet recht wenig. Da reicht auch ein ganz einfaches von Commodo.
Das sollte es einem Wert sein.

Stefan
Mitglied: BirdyB
BirdyB 27.11.2016 um 09:51:32 Uhr
Goto Top
Mit letsencrypt ginge es sogar kostenlos...
Mitglied: Yanmai
Yanmai 27.11.2016 um 11:54:21 Uhr
Goto Top
Das das auch kostenlos geht, weiß ich. Aber das war mir zu kompliziert und ich hatte keine Möglichkeit das Zertifikat selbst zu installieren. Jetzt hab ich eine vom Comodo gekauft und bin damit auch versichert.

Das Problem bei POST ist, dass das Zertifikate die Verbindung gleich zerstört, weil das Programm unvertraulich ist. Der C# Quelltext sieht ungefähr so aus:

string URL = "https://meinedomain/index.php";  
                        WebClient webClient = new WebClient();

                        NameValueCollection formData = new NameValueCollection();
                        formData["value1"] = "hallo";  
                        formData["value2"] = "tschüss";  

                        byte responseBytes = webClient.UploadValues(URL, "POST", formData);  
                        string responsefromserver = Encoding.UTF8.GetString(responseBytes);
                        webClient.Dispose();

Jetzt kommt aber dieser Fehler: Die zugrunde liegende Verbindung wurde geschlossen: Für den geschützten SSL/TLS-Kanal konnte keine Vertrauensstellung hergestellt werden..
Mitglied: LordGurke
LordGurke 27.11.2016 um 13:24:38 Uhr
Goto Top
Zitat von @StefanKittel:
Aber wenn irgendwo ein Proxy an der Kommunikation beteiligt ist, sieht der den Query-String.

Das ist Quatsch face-wink
HTTPS - also HTTP over SSL - wird vollumfänglich Ende-zu-Ende verschlüsselt. Da kann kein Proxyserver mitlesen, der sieht bei HTTPS nur ein "CONNECT" auf die angeforderte Domain, er kann aber nicht den Datenverkehr lesen.
Der GET-String steht ja im HTTP-Header des Clients drin, der ja nunmal ebenfalls verschlüsselt ist.

Es ist natürlich unschön, dass diese Daten dann im Logfile des HTTPS-Servers drin stehen, aber dazwischen kann keiner mitlesen.
Oder anders: Wenn es jemand schafft per MITM-Proxy und Aufbrechen der HTTPS-Verbindung in Kombination mit Ohne-Sinn-und-Verstand-Wegklicken von Fehlermeldungen des Benutzers oder schlechter Software, die nichtmal warnt...
Also wenn es jemand so schafft die Verbindung mitzulesen, kann er genau wie bei einer HTTP-Verbindung alles mitlesen, da ist es dann auch egal an welcher Stelle im HTTP-Paket die Daten dann stehen face-wink

Die sicherste Methode ist, dass du ein Zertifikat mit deiner eigenen CA erstellst und signierst. Den öffentlichen Schlüssel deiner CA baust du in deine Software mit ein und prüfst darin, ob das vom Server gezeigte Zertifikat gegen die einkompilierte CA vertrauenswürdig ist und falls nicht die Verbindung getrennt wird.
Das nennt sich CA-Pinning bzw. Certificate-Pinning und macht die Verbindung rock solid sicher - auch vor MITM-Proxies.
Allerdings könntest du dabei dann evtl. mit Virenscannern kollidieren, die in die HTTPS-Verbindung hinein hören...