Hallo zusammen!
Ich möchte gerne einen eigenen e-Mail Server in JAVA realisieren (SMTP & POP. Vorerst kein IMAP).
Bevor jetzt die Rufe "Da gibt es doch genug Programme für!!" kommen, etwas zu meiner Motivation.
Der Grund dafür, dass ich den Server selber schreiben möchte ist, dass ich eine bzw. mehrere PGP Funktionen einbauen möchte.
Die Idee kam mir als ich vor einigen Tagen als ich Enigmail für Thunderbird installieren wollte.
Ich studiere zur Zeit (Medien-)informatik im 7. Semester an der Uni Ulm und mir ist bei der Installation und Konfiguration aufgefallen, dass beides nicht so ganz trivial war. Auch frage ich mich, wie denn Outlook-Nutzer und besonders Anwender exotischer Mailprogramme ihre Mails verschlüsseln.
Im Klartext heisst das, dass ich mit der Bedienbarkeit von Enigmail und der mangelnden Unterstützung für PGP bei alternativen Mailprogrammen unzufrieden war, denn wenn ich als Informatikstudent eine Weile brauche um Enigmail so zu konfigurieren, so dass es das macht, was ich will, wie soll das dann meine Oma hinbekommen?
Das Problem bei PGP ist ja, das es ein asymetrischen Schlüsselaustauschverfahren verwendet. Das heisst, nutzt der Empfänger meiner e-Mail kein PGP so hab ich logischerweise auch keinen öffentlichen Schlüssel von ihm und kam ihm keine verschlüsselte e-Mail schicken. Für mich persönlich wäre es wünschenswert, wenn die ganze Welt PGP nutzen würde, so wäre theoretisch jeglicher e-Mailverkehr in zukunft sicher verschlüsselt und signiert. - Utopisch, ich weiss, aber wenn nur 80% aller Mailschreiber PGP nutzen würden, wäre es bereits ein Erfolg.
Diesem Ziel steht aber die Komplexität von PGP samt der Idee des TrustedWeb gegenüber. Selbst wenn ein eMail-Programm oder Plugin eine einfache Bedienung garantieren würden, bringt dies relativ wenig, wenn der User keine Ahnung von PGP an sich hat (Und das wird wohl leider sehr häufig der Fall sein).
Ich würde also hingehen und den User so wenig davon mitkriegen lassen. Ich würde ihn einmal nach einem (sicheren) Passwort fragen und anschließend alles andere dem Programm überlasssen:
1) Schlüsselpaar generieren
2) Kontakte im Mailprogramm durchsuchen und mit einem Keyserver abgleichen und möglichst viele öffentliche Schlüssel herunterladen
3) Ausgehende e-Mails immer signieren und den eigenen öffentlichen Schlüssel noch "dran kleben"
4) Ausgehende e-Mails möglichst verschlüsseln sofern ein öffentlicher Schlüssel des Empfängers bekannt ist
5) Ankommende e-Mails gegebenfalls automatisch entschlüsseln und die Signatur prüfen
Der Anwender selber soll davon so wenig wie möglich mitbekommen. Alles was er weiss ist: "Meine eMails werden verschlüsselt" und mehr nicht.
Jetzt war meine erste Idee eine total einfach Version von Enigmail zu schreiben und dies als Plugin realiseren.
Dann habe ich aber das Problem, dass ich für jedes existierende Programm ein Plugin schreiben müsste und das möchte ich nicht. Einige wenige dieser tools können ja noch nicht mal Erweiterungen wie Plugins nutzen (Autluck Äckzpräss *hust*).
Die Idee vom Plugin scheidet also aus.
Anschließend habe ich mir überlegt einfach einen Daemon zu schreiben der den SMTP- und POP bzw. IMAP - Strom bzw. Port überwacht, diesen abfängt und die Operationen automatisch ausführt. - Irgendwie nicht so elegant und auch nicht sehr einfach glaube ich.
Dann kam mit die Idee mit dem Mailserver und sie funktioniet wie folgt:
Nehmen wir an, Alice möchte Bob eine eMail schreiben.
Alice installiert meinen tollen Mailserver (Nennen wir ihn mal ezPGP - Ja, ich habe schon einen Namen dafür ;-)) und lässt ihn im Hintergrund als Daemon laufen. Bei der Installation des Servers wird ein Wizard gestartet, der ein (sicheres) Passwort abfragt und die oben genannten Schritte 1) - 2) ausführt.
Nehmen wir nun an, Alice hätte einen eMail account bei GMX mit dem Loginnamen alice@gmx.de und dem Passwort "123".
Alice trägt nun diese Daten, den SMTP- und POP server von GMX ein.
Nun öffnet sie ihr standartmäßiges eMailprogramm und trägt dort als Mailserver nicht GMX sondern den lokalen Server auf ihrem Rechner ein.
Von nun an werden eMails nicht mehr direkt an GMX sondern an ihren lokalen Mailserver geschickt. Dieser Server verwaltet die gesamte PGP-Arbeit wie in den Schritten 3) - 5) beschrieben ohne dass Alice groß etwas davon mitbekommt.
Herinkommende eMails fängt ezPGP ab und speichert sie lokal. Alice kann diese eMails ganz normal mit zum Beispiel Thunderbird mit POP oder IMAP abrufen.
Das ist so die Idee.
Nun habe ich schon einige Erfahrungen mit JAVA aber ich konnte trotz fleissigem Googlen keinen Ansatz finden um einen Mailserver zu schreiben (Noch nie gemacht).
Wie gesagt, ich studiere im 7. Semester Informatik und habe auch einige grundlegende Kentnisse von SMTP und POP. Trotzdem will mir kein so richtier Ansatz einfallen. Ich denke das Problem ist nicht so ganz trivial?
JavaMail bringt mir hierbei ja herzlich wenig. Das ist ja nur für Clientsoftware.
Ich vermute ich muss als Mailserver ständig an einem bestimmten Port "lauschen" falls Mails reinkommen und auch einen Socket reservieren/wählen?
Für eine Idee zu einem Ansatz wäre ich sehr dankbar.
Auch ein paar Klassen, die ich dabei verwenden könnte würden helfen.
Gruß
Timo
Ps.: Sorry, für den langen Text
Ich möchte gerne einen eigenen e-Mail Server in JAVA realisieren (SMTP & POP. Vorerst kein IMAP).
Bevor jetzt die Rufe "Da gibt es doch genug Programme für!!" kommen, etwas zu meiner Motivation.
Der Grund dafür, dass ich den Server selber schreiben möchte ist, dass ich eine bzw. mehrere PGP Funktionen einbauen möchte.
Die Idee kam mir als ich vor einigen Tagen als ich Enigmail für Thunderbird installieren wollte.
Ich studiere zur Zeit (Medien-)informatik im 7. Semester an der Uni Ulm und mir ist bei der Installation und Konfiguration aufgefallen, dass beides nicht so ganz trivial war. Auch frage ich mich, wie denn Outlook-Nutzer und besonders Anwender exotischer Mailprogramme ihre Mails verschlüsseln.
Im Klartext heisst das, dass ich mit der Bedienbarkeit von Enigmail und der mangelnden Unterstützung für PGP bei alternativen Mailprogrammen unzufrieden war, denn wenn ich als Informatikstudent eine Weile brauche um Enigmail so zu konfigurieren, so dass es das macht, was ich will, wie soll das dann meine Oma hinbekommen?
Das Problem bei PGP ist ja, das es ein asymetrischen Schlüsselaustauschverfahren verwendet. Das heisst, nutzt der Empfänger meiner e-Mail kein PGP so hab ich logischerweise auch keinen öffentlichen Schlüssel von ihm und kam ihm keine verschlüsselte e-Mail schicken. Für mich persönlich wäre es wünschenswert, wenn die ganze Welt PGP nutzen würde, so wäre theoretisch jeglicher e-Mailverkehr in zukunft sicher verschlüsselt und signiert. - Utopisch, ich weiss, aber wenn nur 80% aller Mailschreiber PGP nutzen würden, wäre es bereits ein Erfolg.
Diesem Ziel steht aber die Komplexität von PGP samt der Idee des TrustedWeb gegenüber. Selbst wenn ein eMail-Programm oder Plugin eine einfache Bedienung garantieren würden, bringt dies relativ wenig, wenn der User keine Ahnung von PGP an sich hat (Und das wird wohl leider sehr häufig der Fall sein).
Ich würde also hingehen und den User so wenig davon mitkriegen lassen. Ich würde ihn einmal nach einem (sicheren) Passwort fragen und anschließend alles andere dem Programm überlasssen:
1) Schlüsselpaar generieren
2) Kontakte im Mailprogramm durchsuchen und mit einem Keyserver abgleichen und möglichst viele öffentliche Schlüssel herunterladen
3) Ausgehende e-Mails immer signieren und den eigenen öffentlichen Schlüssel noch "dran kleben"
4) Ausgehende e-Mails möglichst verschlüsseln sofern ein öffentlicher Schlüssel des Empfängers bekannt ist
5) Ankommende e-Mails gegebenfalls automatisch entschlüsseln und die Signatur prüfen
Der Anwender selber soll davon so wenig wie möglich mitbekommen. Alles was er weiss ist: "Meine eMails werden verschlüsselt" und mehr nicht.
Jetzt war meine erste Idee eine total einfach Version von Enigmail zu schreiben und dies als Plugin realiseren.
Dann habe ich aber das Problem, dass ich für jedes existierende Programm ein Plugin schreiben müsste und das möchte ich nicht. Einige wenige dieser tools können ja noch nicht mal Erweiterungen wie Plugins nutzen (Autluck Äckzpräss *hust*).
Die Idee vom Plugin scheidet also aus.
Anschließend habe ich mir überlegt einfach einen Daemon zu schreiben der den SMTP- und POP bzw. IMAP - Strom bzw. Port überwacht, diesen abfängt und die Operationen automatisch ausführt. - Irgendwie nicht so elegant und auch nicht sehr einfach glaube ich.
Dann kam mit die Idee mit dem Mailserver und sie funktioniet wie folgt:
Nehmen wir an, Alice möchte Bob eine eMail schreiben.
Alice installiert meinen tollen Mailserver (Nennen wir ihn mal ezPGP - Ja, ich habe schon einen Namen dafür ;-)) und lässt ihn im Hintergrund als Daemon laufen. Bei der Installation des Servers wird ein Wizard gestartet, der ein (sicheres) Passwort abfragt und die oben genannten Schritte 1) - 2) ausführt.
Nehmen wir nun an, Alice hätte einen eMail account bei GMX mit dem Loginnamen alice@gmx.de und dem Passwort "123".
Alice trägt nun diese Daten, den SMTP- und POP server von GMX ein.
Nun öffnet sie ihr standartmäßiges eMailprogramm und trägt dort als Mailserver nicht GMX sondern den lokalen Server auf ihrem Rechner ein.
Von nun an werden eMails nicht mehr direkt an GMX sondern an ihren lokalen Mailserver geschickt. Dieser Server verwaltet die gesamte PGP-Arbeit wie in den Schritten 3) - 5) beschrieben ohne dass Alice groß etwas davon mitbekommt.
Herinkommende eMails fängt ezPGP ab und speichert sie lokal. Alice kann diese eMails ganz normal mit zum Beispiel Thunderbird mit POP oder IMAP abrufen.
Das ist so die Idee.
Nun habe ich schon einige Erfahrungen mit JAVA aber ich konnte trotz fleissigem Googlen keinen Ansatz finden um einen Mailserver zu schreiben (Noch nie gemacht).
Wie gesagt, ich studiere im 7. Semester Informatik und habe auch einige grundlegende Kentnisse von SMTP und POP. Trotzdem will mir kein so richtier Ansatz einfallen. Ich denke das Problem ist nicht so ganz trivial?
JavaMail bringt mir hierbei ja herzlich wenig. Das ist ja nur für Clientsoftware.
Ich vermute ich muss als Mailserver ständig an einem bestimmten Port "lauschen" falls Mails reinkommen und auch einen Socket reservieren/wählen?
Für eine Idee zu einem Ansatz wäre ich sehr dankbar.
Auch ein paar Klassen, die ich dabei verwenden könnte würden helfen.
Gruß
Timo
Ps.: Sorry, für den langen Text