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
Moving, watching, working, sleeping, driving, walking, talking, smiling
Moving, watching, working, sleeping, driving, walking, talking, smiling
Moving, watching, working, sleeping, driving, walking, talking, smiling
Moving, watching, working, sleeping, ... (Air - People In The City)