PGP in mail-Anweisung benutzen
Matthias
- php
Hallo Forum,
gibt es eine Möglichkeit PGP in eine mail()-Anweisung zu implementieren? Folgendes:
Per SSL bestellt ein Kunde etwas. Diese Daten sollen nun per E-Mail an den Versender geschickt werden. Allerdings nützt es wenig wenn der Kunde seine Daten per SSL eingibt und diese anschliessend per E-Mail unverschlüsselt versendet werden. Deshalb möchte ich gerne PGP einbinden.
Hat jemand schon mal damit Erfahrungen sammeln können?
Danke
Hallo!
Per SSL bestellt ein Kunde etwas. Diese Daten sollen nun per E-Mail an den Versender geschickt werden. Allerdings nützt es wenig wenn der Kunde seine Daten per SSL eingibt und diese anschliessend per E-Mail unverschlüsselt versendet werden. Deshalb möchte ich gerne PGP einbinden.
Du mußt auf dem Server PGP installierthaben, damit auf dem Server die den Nachrichtentext mit Deinem öffentlichen Schlüssel verschlüsseln und zu Hause mit Deinem privaten Schlüssel entschlüsseln. Ich habe das mal mit GnuPG und einem verschickten Dateianhang gemacht, ich denke mit dem Body Deiner Mail müßte das genauso gehen.
Wie das mit GPG geht steht hier: http://www.gnupg.org/gph/en/manual.html, zu PGP habe ich auf die schnelle nichts gefunden.
Grüße
Andreas
Hallo, Matthias,
gibt es eine Möglichkeit PGP in eine mail()-Anweisung zu implementieren? Folgendes:
Per SSL bestellt ein Kunde etwas. Diese Daten sollen nun per E-Mail an den Versender geschickt werden. Allerdings nützt es wenig wenn der Kunde seine Daten per SSL eingibt und diese anschliessend per E-Mail unverschlüsselt versendet werden. Deshalb möchte ich gerne PGP einbinden.
Zuerst einmal sollte auf dem Server PGP beziehungsweise GnuPG installiert sein und der Public Key des Versenders im Schlüsselbund vorhanden (importiert) sein.
Hat jemand schon mal damit Erfahrungen sammeln können?
Ich habe einmal ein Remailer-Interface in PHP mit GnuPG gebaut (dabei wird die Nachricht zuerst mit dem Public Key des Empfängers verschlüsselt, dann eingepackt und mit dem Public Key des ersten Remailers verschlüsselt, wenn man eine Kaskade verwendet dann lässt sich letzterer Schritt beliebig oft wiederholen), im Grunde genommen lässt sich GnuPG hochautomatisiert verwenden, dafür gibt es einen Batchmodus. Im Grunde genommen lassen sich Nachricht und Passphrase über das STDIN an GnuPG weitergeben und der Cipher über STDOUT einlesen, aber damit habe ich, vor allem über Apache/PHP/Win32, schlechte Erfahrungen gemacht. Ich würde dir raten, die Nachricht zuerst in einer Datei anzuspeichern, welche GnuPG dann entgegennimmt und GnuPG dazu veranlassen, den Cipher in eine Datei zu schreiben, welche du später einfacher als GnuPGs STDOUT einlesen kannst. Generell sollte mit popen() auch die erste Methode möglich sein, hier will ich aber die zweite beschreiben. Der Kern sähe in etwa folgendermaßen aus:
[... Speichere Nachricht in nachricht.txt ...]
$befehl='gpg --batch --passphrase-fd 0 -o cipher.txt -r '.$empfaenger_adresse.' -sae nachricht.txt';
$fp=popen($befehl, 'w+');
sleep(1); /* Oder etwas mehr */
fwrite($fp, $passphrase."\n"); /* Schreibe Passphrase als STDIN von GnuPG */
pclose($fp);
[... Lese Cipher aus cipher.txt und verschicke es mit mail() ...}
»se« steht für sign und encrypt, »a« bedeutet ASCII armored, »batch« schaltet den Batchmodus an, »passphrase-fd 0« heißt, dass die passphrase (das Mantra) vom STDIN gelesen wird. Dies müsste auch über eine Datei möglich sein: »Read the passphrase from file descriptor n. If you use 0 for n, the passphrase will be read from stdin.« Was mit »file descriptor gemeint ist, ist mir unklar, wenn du mit Shellscripten vertraut bist, weißt du es vielleicht.
Nach »r« folgt die Empfängeradresse oder der Schlüsselname des Empfängers, »o« bedeutet Output (in eine Datei). Eventuell wäre »--no-version --comment "" -q« interessant, das würde ich aber in der Datei options festlegen.
Die PGP-Version dürfte im Grunde genommen ähnlich aussehen, ich verwende jedoch nur GnuPG, weshalb ich über die PGP-Version nichts sagen kann.
Eventuell könnte das obige in einem Shellscript untergebracht werden, sodass das Einlesen der Dateien überflüssig wird - »There is more than one way to do it«.
Die manpage hat Andreas bereits verlinkt.
Grüße,
Mathias
Hallo Mathias!
2 Fragen:
---------
1. Kann man dann eine so erstellte txt-Datei einfach in einen String lesen und als Body mit mail() verschiecken, so dass die mailprogramme mit entsprechendem Plugin das erkennen udn damit umgehen können?
2. Was ist mit der deutschen manpage, die hat es mir durchaus erleichtert, nur die ist zumindest für mich nicht erreichbar, ist vermutlich ein Fehler der beim Neuschreiben der Seite passiert ist, oder?
Viele Grüße
Andreas
PS: man beachte auch die mini Howto's, da steht das für den Anfang erstmal schön kompakt drin, was einen aber nicht vom Studieren des Manuals befreit, es sei denn man kennst sich mit sowas eh aus.
Moin,
- Kann man dann eine so erstellte txt-Datei einfach in einen String lesen und als Body mit mail() verschiecken, so dass die mailprogramme mit entsprechendem Plugin das erkennen udn damit umgehen können?
Jein, du musst vorher noch ein bisschen mit dem zu verschlüsselnden Text rummachen (unter anderem MIME-Header anfügen) und das dann korrekt markiert verschicken. Ausführlichst ist das in http://www.faqs.org/rfcs/rfc3156.html beschrieben und jeder Mailclient der damit umgehen kann, sollte die Mail dann transparent entschlüsseln und anzeigen können. Nein, Outlook Express gehört leider nicht in diese Kategorie (die haben es noch nicht mal geschafft den mittlerweile 7 Jahre alten RFC 1847 zu implementieren) und für Mozilla brauchst du das Enigmail-Plugin (meine Distribution installiert das zum Beispiel automatisch mit).
Hallo!
Jein, du musst vorher noch ein bisschen mit dem zu verschlüsselnden Text rummachen (unter anderem MIME-Header anfügen) und das dann korrekt markiert verschicken. Ausführlichst ist das in http://www.faqs.org/rfcs/rfc3156.html beschrieben
und jeder Mailclient der damit umgehen kann, sollte die Mail dann transparent entschlüsseln und anzeigen können. Nein, Outlook Express gehört leider nicht in diese Kategorie
http://www.winpt.org/gpgoe.html hat zumindest bei mir bisher prima funkitniert.
(die haben es noch nicht mal geschafft den mittlerweile 7 Jahre alten RFC 1847 zu implementieren) und für Mozilla brauchst du das Enigmail-Plugin (meine Distribution installiert das zum Beispiel automatisch mit).
Für mich gibt es bisher keine Alternative zu OutlookExpress, mag ja sein das es viel Mist erzeugt, aber nur aus solch idiellen Gründern verzichte ich nicht auf die Funktionalität/Ergonomie die mir kein anderes Mailprogram bietet. Vor allem Mozilla Mail hat mich da enttäuscht, mit einer Mailadresse ja ganz nett, aber ich habe ca. 10 Adressen die ich zu verwalten und zu überwachen habe, das ist eine Zumutung mit Mozilla Mail.
Unter Linux sieht das anders aus, da habe ich eine sehr gute Alternative(xitami... oder so ähnlich), welche wirklich super funktioniert.
Viele Grüße
Andreas
Moin,
Was mit »file descriptor gemeint ist, ist mir unklar, wenn du mit Shellscripten vertraut bist, weißt du es vielleicht.
Wenn du eine Datei öffnest, bekommst du einen Integerwert als File Deskriptor mit dem du die Datei später ansprechen kannst. Die Deskriptoren 0, 1 und 2 sind fest mit stdin, stdout und stderr verknüpft.
Beim Forken eines Prozesses (und das ist nunmal die einzige Methode wie man einen neuen Prozess kriegt) werden die offenen Dateideskriptoren des Vaterprozesses an das Kind weitergegeben. Daher die Bedeutung: Wenn du dem Parameter eine 0 gibst, liest er von der Standardeingabe, wenn du eine andere Quelle aufgemacht hast (zum Beispiel mit pipe(2)) dann kannst du ihm auch den dazu gehörigen Deskriptor übergeben und er wird daraus lesen.