# https:// - wie macht man eine sichere Website?



## Marco7757 (6. Januar 2011)

Ein Kunde von mir arbeitet im Bereich Psychiatrie und will nun mit seinen Patienten online komunizieren. Da natürlich alles der ärztlichen Schweigepflicht unterliegt, muss die Seite, über die diese Kommunikation stattfindet, gesichert sein.

Seiten, die man über https erreicht, sind ja verschlüsselt und dadurch sicher. Aber wie realisiere ich nun meinerseits, dass meine Seite über https erreichbar ist und dadurch auch sicher?


----------



## timestamp (6. Januar 2011)

Was für ein Server liegt denn vor? Bei google findest du Tonnen an Einträgen zu deinem Anliegen


----------



## Marco7757 (6. Januar 2011)

Also ich habe einfach einen normalen Webserver von einem professionellen Anbieter.

Ich habe schon zahlreiche Seiten programmiert, nur war es noch nie notwendig, die Seite mit mehr als einem Passwort für den Benutzer zu schützen.

Was meinst du denn mit "Was für ein Server liegt vor?"


----------



## timestamp (6. Januar 2011)

Linux/Windows/...?


----------



## Dr Dau (6. Januar 2011)

Hallo!



timestamp hat gesagt.:


> Linux/Windows/...?


Apache/IIS/...? 

HTTPS ist "nur" ein Übertragungsprotokoll, hat mit Deiner Seite als solches also erstmal nichts zu tun.

Spreche mit Deinem Hoster dass Du ein Zertifikat für SSL benötigst, welches von einer zertifizierten Zertifizierungsstelle signiert wurde.
Ausserdem muss der Server für HTTPS konfiguriert werden (was leider nicht bei allen Hostern der Fall ist).
Prinzipiell könnte man für HTTPS auch ein "selbstsigniertes" Zertifikat nutzen, allerdings würde ich dazu nur in unkritischen Bereichen raten.

Wie findet denn die Kommunikation statt?
Wird diese irgendwo auf den Server (z.B. in einer Datenbank) hinterlegt?
Da dürftes Du auch Probleme mit der ärztlichen Schweigepflicht haben (zumindest der Hoster bzw. dessen Mitarbeiter haben Zugriff auf die Datenbank --> Stichwort: "root darf alles").

Gruss Dr Dau


----------



## Marco7757 (8. Januar 2011)

Also ich arbeite auf Windows, aber das tut ja nichts zur Sache. Womit mein Anbieter arbeitet, weiss ich nicht.

Der Kunde wünscht, dass die Daten in Form einer PDF-Datei auf dem Server gespeichert werden. Mir ist allerdings nicht klar, ob er dem Kunden zumuten will, die ausgefüllten Papiere einzuscannen. Von dem her wäre ein Formular mit anschliessender Speicherung in einer Datenbank nicht die schlechteste Idee. Allerdings hast du recht, dass dann der Hoster auf alles Zugriff hat.

Von dem her sollte ich dem Kunden eher davon abraten, wegen der Sicherheit?

Wie muss ich mir das Zertifikat für SSL vorstellen? Ist das ein Papier oder irgendetwas anderes?

Den Server für HTTPS konfigurieren wäre sehr wahrscheinlich kein Problem, bisher wurde auf meine Anfragen immer prompt geantwortet und die nötigen Serverupdates o. ä. schnell ausgeführt.


----------



## Sprint (8. Januar 2011)

Seiten, die über https aufgerufen werden, sind nicht automatisch verschlüsselt. Nur die Datenübertragung selbst vom Client zum Server ist verschlüsselt.

Das Zertifikat wird von verschiedenen Firmen ausgestellt. Das ist ein elektronisches Zertifikat, anhand dessen der Browser erkennt, daß der Inhaber überprüft wurde. Die Qualität dieser Prüfung bestimmt auch die Kosten des Zertifikats. Die billigsten starten schon bei ca. 40€ jährlich und gehen rauf bis über 1000 €. Es sollte aber schon ein Zertifikat sein, bei dem auch der Name des Domaininhabers genannt wird. Die kosten so ca. 100 € jährlich. 
Die Speicherung in einer Datenbank ist wohl die bessere Lösung. Ich halte die Wahrscheinlichkeit, daß einer der Admins beim Hoster die Datenbank durchforstet, für relativgering, aber verschlüsseln sollte man solche Daten auf jeden Fall. Wenn die Datenübermittlung in beide Richtungen verläuft, könnte man die Verschlüsselung über ein individuelles Kennwort laufen, das beiden bekannt ist. Das darf natürlich nicht in der Datenbank gespeichert sein. Wenn die Daten nur vom Patienten zum Arzt laufen, könnte man es auch über einen Public / Private Key machen, wie z.B. auch die PGP Verschlüsselung arbeitet, oder auch die SSL Zertifikate.


----------



## Dr Dau (8. Januar 2011)

Wenn ich mich recht erinner, kann man ein PDF auch mit einem Passwort versehen.
Hängt aber wohl auch von der verwendeten Software ab.
Allerdings ist es fraglich was man mit einem passwortgeschützten PDF z.B. noch in einem HEX-Editor anfangen könnte.

einscannen.....
Das reine einscannen dürfte nicht sooo das Problem sein (bei modernen Scannern funktioniert es oft ja schon durch einen einfachen Knopfdruck).
Allerdings könnte es sein dass die Dateien, was den Upload betrifft, eine bestimmte Dateigrösse nicht überschreiten dürfen.
Der Patient müsste die Datei also ggf. entsprechend ändern.
Damit könnten einige Patienten dann aber doch überfordert sein.



Sprint hat gesagt.:


> Ich halte die Wahrscheinlichkeit, daß einer der Admins beim Hoster die Datenbank durchforstet, für relativgering, [...]


Relativ gering wohl schon, aber halt auch nicht unmöglich.
Und darauf kommt es doch schliesslich an.
Wenn ein Psychologe gegen sein Schweigepflicht verstösst, kann er nicht nur eine Geldstrafe oder Haftstrafe bekommen, sondern auch ein Berufsverbot.
Die möglichen Schadenersatzansprüche möchte ich mir da lieber nicht vorstellen. 
Also, auf keinen Fall Patientendaten "unverschlossen" auf einem Server ablegen, denn dadurch macht man sie Dritten zugänglich und verstösst somit gegen die Schweigepflicht.

Ich würde mich mal mit einem Datenschutzbeauftragen in Verbindung setzen.
Evtl. hat er mit solchen Fällen ja schon Erfahrungen und kann entsprechende Tipps geben.

Auf jeden Fall aber würde ich mir die ganze Geschichte von einem Rechtsanwalt, welcher mit dem Datenschutz und der ärztlichen Schweigepflicht vertraut ist (welches Fachgebiet wäre hier denn hier das Richtige?), absegnen lassen.
Schliesslich geht es hier ggf. ja auch um die Haftung.
Oder hast Du eine sehr sehr sehr gute Betriebshaftpflichtversicherung, welche auch bei grober Fahrlässigkeit und ggf. auch bei Vorsatz für Dich einspringt?!


----------



## Marco7757 (9. Januar 2011)

> [...] aber verschlüsseln sollte man solche Daten auf jeden Fall. Wenn die Datenübermittlung in beide Richtungen verläuft, könnte man die Verschlüsselung über ein individuelles Kennwort laufen, das beiden bekannt ist. Das darf natürlich nicht in der Datenbank gespeichert sein. [...]



Das finde ich eine gute Idee. Wenn ich die Daten in eine Datenbank schreibe und dann mit einem zuvor gewählten Passwort, welches nur dem Arzt und dem Patienten bekannt ist, verschlüssle (gibt es da Algorithmen oder sollte ich zur Sicherheit besser einen selber schreiben?), muss ich dann überhaupt noch irgendeine Verbindung sichern?

Wenn ich die Daten verschlüsselt übertrage und erst auf dem Server des Patienten / Arztes umwandle, per JavaScript oder so, dann sollte es doch eigentlich nicht möglich sein, an die Daten in unverschlüsselter Form heranzukommen. Oder sehe ich da was falsch?

Bequemer wäre es natürlich, wenn ich alles mit PHP machen könnte, aber PHP wird ja nicht auf dem Server des Anwenders ausgeführt ...


----------



## saftmeister (9. Januar 2011)

Du willst deine Kommunikation nicht mit JavaScript verschlüsseln. Denn die wäre nur synchron. Sprich es gebe nur einen geheimen Schlüssel, wenn den jemand in die Hände bekommt ist Ebbe.

Du bist auf dem richtigen Weg, das über HTTPS zu machen. Fangen wir noch mal von vorne an:

1. Du brauchst Informationen, welcher Webserver auf deinem Hoster läuft. Vermutlich ist das Apache aber das ist nicht sicher gestellt. Wenn du nicht weißt, wie du heraus bekommen kannst, welche Webserver-Software du hast, frage deinen Hoster. Wenn da PHP unterstützt wird, kannst du mittels phpinfo()-Script herausfinden, welche Software verwendet wird, das steht in den ersten Zeilen der Ausgabe.

2. Du brauchst, wie schon erwähnt, ein Zertifikat. Dieses Zertifikat kannst du
  - selbst erstellen (Zertifikat-Anfrage => Certificate Request = CR) und anschließend
  - selbst unterschreiben => dann kommt bei Verbindungsanfrage eine Warnung, dass das Zertifikat von keiner vertrauenswürden Stelle unterschrieben wurde, oder
  - von einer allgemein vertrauten Zertifizierungsstelle wie Verisign (ganz gut) oder z.B. von Comodo (http://www.instantssl.com/), was dann natürlich Geld kostet.

3. Du konfigurierst den Webserver, das Zertifikat zu verwenden, dafür gibts tatsächlich sehr viele Tutorials, ein gutes deutsches findest du hier: http://www.net-cry.de/apache/apache-ssl-zertifikat-erstellen, dort wird auch gezeigt, wie du ein Zertifikat selbst erstellst und unterschreibst. Wie schon erwähnt bekommst du dann aber eine Warnung, die so https://ssl.cms.fu-berlin.de/cedis-all/cedis/cms/doc/faq/_media/zertifikatswarnung.jpg oder auch so http://www.tu-harburg.de/rzt/it-sic...ages/ie7_unbekannte_Zertifizierungsstelle.png aussehen kann.

4. Du müsstest nun den Webserver so konfigurieren, das er für bestimmte Domains nur SSL akzeptiert, das kann man mit mod_rewrite machen, ist aber nur die letzte Option und hat erstmal nichts mit dem Thema zu tun. Wollte es nur erwähnen.

Anmerkung: Die Seite wird dadurch nicht per se sicher. Lediglich die Verbindung zwischen Browser und Webserver wird verschlüsselt. Wenn du die Daten auch auf dem Server gespeichert verschlüsseln möchtest, solltest du dann eine server-seitige Script-Sprache (PHP in diesem Fall) verwenden, un die Daten verschlüsselt und mit Passwort ablegen.

All das kann NICHT mit JavaScript realisiert werden, den JavaScript kennt die Technologie Public-Private-Key nicht. Auch auf dem Server kann man die Daten übrigens mit einem PPK-Verfahren verschlüsseln. Das server-seitige Script verschlüsselt alles mit einem Öffentlichen Schlüsselteil und der Psychater hat den privaten Key und kann das dann entschlüsseln, außer ihm aber niemand anders, auch der Patient nicht mehr.


----------



## Sprint (9. Januar 2011)

Selbst schreiben rentiert sich nicht. Inzwischen gibt es für fast alles irgendwelche Funktionen und Klassen. Such z.B. mal bei phpclasses.org. Da könntest du fündig werden und auch Google wird bestimmt was finden.
Ansonsten scheinst du da irgendwas zu verwechseln. Javascript läuft i.d.R. nur auf dem Client Rechner, während PHP ausschließlich auf dem Server läuft. Ohne PHP kannst du dabei gar nichts anfangen, denn wie willst du sonst die DB ansprechen?


----------



## Dr Dau (9. Januar 2011)

saftmeister hat gesagt.:


> 2. Du brauchst, wie schon erwähnt, ein Zertifikat. Dieses Zertifikat kannst du
> - selbst erstellen (Zertifikat-Anfrage => Certificate Request = CR) und anschließend
> - selbst unterschreiben => dann kommt bei Verbindungsanfrage eine Warnung, dass das Zertifikat von keiner vertrauenswürden Stelle unterschrieben wurde, [...]


Allerdings ist zu bedenken dass jeder ein selbst "unterschriebenes" Zertifikat erstellen kann.
Dem Anwender ist es nicht möglich die Echtheit eines solchen Zertifikats zu prüfen.
Da es sich bei der Schweigepflicht zweifellos um ein sensibles Thema handelt, könnte ich mir vorstellen dass ein Richter ggf. grobe Fahrlässigkeit bei der verwendung eines selbst unterschriebenen Zertifikats vorwerfen wird.
Ich kenne mich mit dem Steuerrecht zwar nicht aus, aber evtl. kann der Arzt die Kosten für das Zertifikat ja auch als Betriebskosten von den Steuern absetzen.
Ein Steuerberater sollte dazu kompetente Auskunft geben können.


----------



## Marco7757 (9. Januar 2011)

Beim Java Script habt ihr mich falsch verstanden. Ich wollte die Daten mit PHP aus der Datenbank auslesen (verschlüsselt) und sie erst im Browser des Benutzers entschlüsseln. Aber wahrscheinlich ist das keine gute Idee.

Wenn ich denn jetzt eine sichere Verbindung habe (HTTPS), dann ist die Datenübertragung abhörsicher? Also nur der Endnutzer kann die Daten sehen, sowie alle, die ein Passwort entweder zur Datenbank (der Arzt, der Hoster und ich) oder zum Benutzerbereich des Programmes (Arzt, Patient) haben.
Wäre es dennoch sinnvoll, die Daten in der Datenbank zu verschlüsseln UND eine gesicherte Datenübertragung zu haben?


----------



## Sprint (9. Januar 2011)

Eine gesicherte DatenÜBERTRAGUNG ist, wie der Name schon sagt, nur für die ÜBERTRAGUNG zuständig. Ansonsten könnte jeder, der Zugriff auf die Datenbank hat, also Systemfuzzies beim Provider, böse Jungs (Hacker) usw., die Daten auslesen******

Du läßt ja auch nicht den Safe offen, nur weil die Haustür abgeschlossen ist.


----------



## saftmeister (9. Januar 2011)

Marco7757 hat gesagt.:


> Beim Java Script habt ihr mich falsch verstanden. Ich wollte die Daten mit PHP aus der Datenbank auslesen (verschlüsselt) und sie erst im Browser des Benutzers entschlüsseln. Aber wahrscheinlich ist das keine gute Idee.



Definitiv nein, das ist keine gute 



Marco7757 hat gesagt.:


> Wenn ich denn jetzt eine sichere Verbindung habe (HTTPS), dann ist die Datenübertragung abhörsicher? Also nur der Endnutzer kann die Daten sehen, sowie alle, die ein Passwort entweder zur Datenbank (der Arzt, der Hoster und ich) oder zum Benutzerbereich des Programmes (Arzt, Patient) haben.



Ich sag mal ja, aber das hängt natürlich davon ab, wie groß die Bittiefe des Schlüssels ist. RSA256 ist IMHO geknackt. Er sollte mindestens 1024 besser 2048 Bit sein. Je geringer die Bittiefe, um so höher die Wahrscheinlichkeit, das jemand den Datenstrom mitlesen kann. Aber lass dich jetzt nicht verwirren, RSA ist sehr sicher  - zu mindest so lange, bis einer eine geniale Idee zur Primzahl-Faktorisierung hat. Falls dich das näher interessiert: ISBN10 3423330716.



Marco7757 hat gesagt.:


> Wäre es dennoch sinnvoll, die Daten in der Datenbank zu verschlüsseln UND eine gesicherte Datenübertragung zu haben?


 
Ja in deinem speziellen Falle UND ja. Wenn du noch einen Schritt weiter gehen willst, kannst du auch das Logging abschalten, damit die Patienten selbst auch anonym bleiben.


----------



## Dr Dau (9. Januar 2011)

Marco7757 hat gesagt.:


> Wäre es dennoch sinnvoll, die Daten in der Datenbank zu verschlüsseln UND eine gesicherte Datenübertragung zu haben?


Ich will es mal so sagen: solange Du keine gesicherte Verbindung nutzt, kannst Du Dir genausogut jegliche weitere Sicherheitsmassnahme ersparen.
Oder um es mal mit Sprints Worten zu formulieren: wenn Du HTTPS nicht nutzt, hast Du zwar die Haustür verschlossen, aber irgendein Dummbatz hat den Notausgang offen stehen gelassen. 
Schliesslich gehe ich davon aus dass der Arzt bzw. der Patient sich zur Einsicht der Daten bzw. zum anlegen der Daten vorher identifizieren muss.
Z.B. in dem ein Benutzername und Passwort eingegeben werden müssen (Login).
Ohne HTTPS werden Benutzername und Passwort unverschlüsselt übertragen und können "abgehört" werden.
Was dann geschehen kann, brauche ich wohl nicht weiter zu erwähnen?! 

Grundsätzlich gilt: zuviel Sicherheit gibt es nicht, nur zu wenig.

[edit]
Was das Logging betrifft, meint Saftmeister sicherlich die Loggingfunktion die per default jeder Webserver durchführt.
Zur Scheigepflicht eines Arztes gehört es auch keine Auskunft darüber zu geben wer bei ihm in Behandlung ist.
Die IP ist zwar nicht zwangsweise einer bestimmten Person zuzuordnen, jedoch zumindest dem jeweiligen Anschlussinhaber..... und darüber könnte u.U. eine bestimmte Person ermittelt werden.
Aus Datenschutz- und Schweigepflichtrechtlicher Sicht könnte es also möglicherweise ein Problem sein die Zugriffe vom Server mitloggen zu lassen.
Aber..... im Zweifel muss auch nachgewiesen werden können wer sich mit welchem Benutzernamen, welchem Passwort, an welchem Datum, zu welcher Uhrzeit und natürlich mit welcher IP eingelogt hat.
Daher würde ich mir eine eigene Loggingfunktion erstellen, welche (nur für den Arzt einsehbar) in der Datenbank gespeichert wird.
Diese Loggingfunktion würde ich sogar soweit ausdehnen, dass auch fehlgeschlagene Loginversuche festgehalten werden (schliesslich könnten sich dahinter ja auch böse Absichten verbergen ).
[/edit]


----------



## Marco7757 (11. Januar 2011)

Okay, vielen Dank für die vielen Antworten!

Ich werde mir eine solche Zertifizierung/Lizenz besorgen und den Datenbankinhalt verschlüsseln.


----------

