Verschlüsselter Zugriff auf Webdatenbank via Web Service

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
burli
User
Beiträge: 1156
Registriert: Dienstag 9. März 2004, 18:22

Hi,
ich hab folgendes Problem: ich programmiere gerade an einem Webshop. Zur Verwaltung der Daten würde ich ganz gerne auf die Datenbank zugreifen können. Derzeit geht das nur direkt auf den MySQL Server ohne Verschlüsselung. Ich suche jetzt nach einer Lösung wie ich das sicherer machen kann.

Ein Zugriff auf MySQL über SSL ist bei dem Provider nicht möglich obwohl ich über einen SSL Proxy verfüge. Eigene Dienste kann ich nicht installieren weil es ein Shared Server ist und der Provider da nicht mitspielt.

Ich möchte mit einen Vserver mieten und dort selbst administrieren. Auf dem Server hab ich aber kein SSL bzw ich müsste mit ein Zertifikat selber malen.

Jetzt meine Frage(n): kann ich in Python einen verschlüsselten Webservice ohne SSL programmieren? Wenn ja, was brauche ich dazu?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Warum greifst du nicht von der Webapp auf den MySQL-Server direkt via localhost zu? Dann verläuft die Verbindung nie über unsichere Netze und solange niemand in deinen Server einbricht ist das die sicherste Möglichkeit.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
burli
User
Beiträge: 1156
Registriert: Dienstag 9. März 2004, 18:22

Hi,
ich glaub du hast mich missverstanden. Ich will nicht von dem Webservice zum MySQL Server verschlüsseln sondern von meinem PC hier zum Webservice. Also sowas wie SOAP. Problem ist das ich nicht SSL nutzen kann. Oder kann ich auf dem Vserver einfach eine SSL Erweiterung zum Apache installieren?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

burli hat geschrieben:Oder kann ich auf dem Vserver einfach eine SSL Erweiterung zum Apache installieren?
Sicher, ``mod_ssl`` existiert.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
burli
User
Beiträge: 1156
Registriert: Dienstag 9. März 2004, 18:22

Ich will es mal anders ausdrücken: ich brauche eine verschlüsselte Verbindung zwischen der MySQL Datenbank auf dem Webserver und meinem PC zu Hause.

Ich dachte ein Webservice via SOAP über eine verschlüsselte Verbindung wäre eine machbare Lösung. Allerdings werde ich aus der ganzen Sache noch nicht so richtig schlau und ich weiß nicht was ich dafür alles benötige.

Oder gibt es eine andere Möglichkeit?
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

Wie wäre es mit einem SSH-Tunnel?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Ich habe ja keine Ahnung wozu man auf Datenbanken remote zugreifen will, wenn es vermeidbar ist aber mit SSH-Tunnel oder mit Stunnel ist das durchaus machbar.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

er möchte keinen lokalen Testserver laufen lassen...warum auch immer.
burli
User
Beiträge: 1156
Registriert: Dienstag 9. März 2004, 18:22

Das ganze soll wie gesagt ein Online Shop werden. Und ich möchte die Bestelldaten direkt aus dem Shop in meine Anwendung übernehmen können und die Artikeldaten direkt aus der Anwendung aktualisieren.

Irgendwelche Imports/Exports via Text Dateien ist einfach zu müßig
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Ok, das Stichwort war dass du neben dem Webshop auch einen Client haben willst, was das ganze Vorgehen etwas ändert. Jetzt ist die Frage: wer nutzt den Client? Leute denen du traust, dass sie nicht irgendwelche ``DROP``-Statements an die Datenbank schicken, oder beliebige Leute. Im ersteren Fall ist es sinnvoll eine data-manipulation-Lib zu haben, die du sowohl online als auch lokal nutzen kannst um das entsprechende SQL zu generieren. Im zweiten fall würdest du eine data-manipulation-API machen (via XML-RPC oder JSON-RPC oder whatever) und die hinter SSL absichern.

Wobei der zweitere Fall etwas universeller ist aber auch mehr Arbeit erfordert.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

ach so war das gemeint! Dann bin ich ja beruhigt :D
burli
User
Beiträge: 1156
Registriert: Dienstag 9. März 2004, 18:22

Also das ganze soll ein komplettes Warenwirtschaftssystem werden mit Kundenverwaltung, Artikelverwaltung usw und eben dem Onlineshop. Die User, egal ob vertrauenswürdig oder nicht, können keine SQL Befehle absetzen sondern nur das nutzen können was die Software freigibt.

Statt XML-RPC würde ich aber SOAP verwenden. Soweit ich weiß ist SOAP eine Weiterentwicklung von XML-RPC und W3C standartisiert. Oder gibt es Gründe für XML-RPC und gegen SOAP?

Ich denke eine unverschlüsselte Verbindung, egal ob XML-RPC oder SOAP, kriege ich auf die Reihe. Aber was brauch ich für SSL auf dem Server und beim Client?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

burli hat geschrieben:Statt XML-RPC würde ich aber SOAP verwenden. Soweit ich weiß ist SOAP eine Weiterentwicklung von XML-RPC und W3C standartisiert. Oder gibt es Gründe für XML-RPC und gegen SOAP?
Überspezifiziert, überkompliziert, überhyped, schlechter Python-Support, keine richtigen Vorteile gegenüber XML-RPC.
burli hat geschrieben:Aber was brauch ich für SSL auf dem Server und beim Client?
Wenn es über Apache läuft, dann außer einer IP und mod_ssl nichts, auf dem Client brauchst du ein Python mit ``socket.ssl()``. Ich muss zugeben, dass ich aber bisher kein RPC über SSL gemacht habe.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
burli
User
Beiträge: 1156
Registriert: Dienstag 9. März 2004, 18:22

Hm, ok danke, dann werde ich mal versuchen das erstmal lokal zu installieren. Wenn das läuft kann man weiter sehen
burli
User
Beiträge: 1156
Registriert: Dienstag 9. März 2004, 18:22

Ich hatte gerade eine Idee für eine andere Lösung. Man kann die Daten ja einfach im XML Format über das normale HTTP Protokoll übertragen. Also man ruft zb eine Seite auf und bekommt statt einer Webseite XML Daten. Und Hochladen kann man über POST.

Damit könnte man sich den Webservice und den damit verbundenen Aufwand sparen. Das müsste doch funktionieren, oder?
lunar

burli hat geschrieben:Ich hatte gerade eine Idee für eine andere Lösung. Man kann die Daten ja einfach im XML Format über das normale HTTP Protokoll übertragen. Also man ruft zb eine Seite auf und bekommt statt einer Webseite XML Daten. Und Hochladen kann man über POST.

Damit könnte man sich den Webservice und den damit verbundenen Aufwand sparen. Das müsste doch funktionieren, oder?
Im Prinzip ist das dann auch ein Webservice, irgendwas REST-mäßiges. Aber es ist wohl weniger aufwendig als RPC, weil man große Teile des Codes für die HTML-Ausgabe wiederverwenden kann. Im Prinzip musst du ja nur die Templates neu schreiben.
burli
User
Beiträge: 1156
Registriert: Dienstag 9. März 2004, 18:22

lunar hat geschrieben:Im Prinzip musst du ja nur die Templates neu schreiben.
Eigentlich gar nicht mal. Ich brauch dafür ja keine Templates. Ich rufe eine URL auf mit den Parametern die ich gerne hätte und das Webscript spuckt mit statt HTML eben XML Daten aus.


Genauso müsste es umgekehrt gehen. Ich rufe von meinem Python Programm ein Formular auf, fülle ein Textfeld mit XML Daten und sende es ab

Ich muss dafür allerdings mein Python Programm als Web Browser programmieren weil ich keine Copy & Paste Aktionen oder Imports/Exports über Dateien machen will. Das sollte ja gehen, oder?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

burli hat geschrieben:Ich hatte gerade eine Idee für eine andere Lösung. Man kann die Daten ja einfach im XML Format über das normale HTTP Protokoll übertragen. Also man ruft zb eine Seite auf und bekommt statt einer Webseite XML Daten. Und Hochladen kann man über POST.
Inzwischen nutzt man für sowas nun öfter JSON, weil man das in anderen Sprachen recht einfach lesen kann und weil es aus JavaScript recht gut nutzbar ist.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten