HI Uwe, ich mache das so, wie du schreibst: $gpgHdl: das gnupg-objekt $listFP: Fingerprint des privater schlüssel (liste) $listPass: passwort zum privaten schlüssel (liste) $enc: verschlüsselter text $plain: klartext > function decrypt_gpg($gpgHdl, $listFP, $listPass, $enc) { > $result = $gpgHdl->adddecryptkey($listFP, $listPass); > $msg_plain = $gpgHdl->decrypt($enc); > $result = $gpgHdl->cleardecryptkeys(); > if($result) { return $msg_plain; } > else { echo $gpgHdl->geterror(); } > } > function encrypt_gpg($gpgHdl, $plain, $fp) { > $result = $gpgHdl->addencryptkey($fp); > $msg_enc = $gpgHdl->encrypt($plain); > $result = $gpgHdl->clearencryptkeys(); > if($result) { return $msg_enc; } > else { echo $gpgHdl->geterror(); } > } Die Ergebnisse (var_dump) sind true: für $gpgHdl->adddecryptkey($listFP, $listPass); Leerer String: für $msg_plain = $gpgHdl->decrypt($enc); false: für $result = $gpgHdl->cleardecryptkeys(); und decrypt failed: für "echo $gpgHdl->geterror();" Der Fehlermeldung kann ich nichts entnehmen, außer dass das Decrypt fehlgeschlagen ist: > object(Exception)#3 (7) > { ["message":protected]=> string(14) "decrypt failed" > ["string":"Exception":private]=> string(0) "" > ["code":protected]=> int(0) > ["file":protected]=> string(32) "/var/www/html/myList/testGPG.php" > ["line":protected]=> int(233) > ["trace":"Exception":private]=> array(2) > { [0]=> array(6) > { ["file"]=> string(32) "/var/www/html/myList/testGPG.php" > ["line"]=> int(233) > ["function"]=> string(7) "decrypt" > ["class"]=> string(5) "gnupg" > ["type"]=> string(2) "->" > ["args"]=> array(1) > { [0]=> string(541) "-----BEGIN PGP MESSAGE----- [...] > -----END PGP MESSAGE----- " > } > } [1]=> array(4) > { ["file"]=> string(32) "/var/www/html/myList/testGPG.php" > ["line"]=> int(144) > ["function"]=> string(11) "decrypt_gpg" > ["args"]=> array(4) > { [0]=> object(gnupg)#2 (0) { } > [1]=> string(40) "<fingerprint>" > [2]=> string(16) "<pw>" > [3]=> string(541) "-----BEGIN PGP MESSAGE----- [...] > -----END PGP MESSAGE----- " > } > } > } ["previous":"Exception":private]=> NULL > } Wenn ich public keys über PHP hinzufüge oder lösche und über das Terminal die Liste der Keys abfrage, dann sehe ich jeweils das Ergebnis der Aktionen (umgekehrt klappt das auch). Ich habe dein Snipplet dem Code hinzugefügt, das hat leider auch nicht geholfen. Ich habe ein Homeverzeichnis für www-data unter "/home/www-data" und unter "/home/www-data/.gnupg" das GnuPG-Home. Die Rechte sollten passen: > ls -alh /home/www-data/.gnupg > > drwx------ 4 www-data www-data 4,0K Sep 3 01:35 . > drwxr-xr-x 3 www-data www-data 4,0K Aug 26 18:18 .. > drwx------ 2 www-data www-data 4,0K Mai 4 23:37 openpgp-revocs.d > drwx------ 2 www-data www-data 4,0K Aug 26 16:15 private-keys-v1.d > -rw-r--r-- 1 www-data www-data 39K Aug 26 17:56 pubring.kbx > -rw-r--r-- 1 www-data www-data 39K Aug 26 17:55 pubring.kbx~ > -rw------- 1 www-data www-data 600 Sep 3 02:31 random_seed > srwx------ 1 www-data www-data 0 Sep 3 02:31 S.gpg-agent > srwx------ 1 www-data www-data 0 Sep 3 01:35 S.gpg-agent.browser > srwx------ 1 www-data www-data 0 Sep 3 01:35 S.gpg-agent.extra > srwx------ 1 www-data www-data 0 Sep 3 01:35 S.gpg-agent.ssh > -rw-r--r-- 1 www-data www-data 48K Aug 26 00:41 tofu.db > -rwx------ 1 www-data www-data 1,3K Aug 25 14:48 trustdb.gpg Wenn ich über das Terminal "sudo -u www-data gpg --delete-secret-key <fingerprint>" ausführe kommt folgendes (www-data hat aber auch keine shell mehr) > sudo -u www-data gpg --delete-secret-key <fingerprint> > > gpg (GnuPG) 2.2.12; Copyright (C) 2018 Free Software Foundation, Inc. > This is free software: you are free to change and redistribute it. > There is NO WARRANTY, to the extent permitted by law. > > > sec ed25519/xxxxxxxxxxx 2020-08-26 MyList (Schlüsselpaar von MyList. > 2 Jahre bis 26.08.2022) <mail@list.de> > > Diesen Schlüssel aus dem Schlüsselbund löschen? (j/N) j > Dies ist ein privater Schlüssel! - Wirklich löschen? (j/N) j > gpg: Fehler beim Löschen des privaten Schlüssels: Keine Berechtigung > gpg: Fehler beim Löschen des privaten Unterschlüssels: Keine > Berechtigung > gpg: <fingerprint>: delete key failed: Keine Berechtigung Ich glaub nicht, dass mein Problem das PHP ist, sondern die Berechtigungen für den User. Evtl. liegt es auch an der Konfiguration des Apache oder von GnuPG. Kann es an dem Passwort für den Schlüssel liegen und dass über PHP bzw. im Batch die Abfrage nicht umgangen wird? Johannes Am 02.09.2020 um 21:18 schrieb Uwe Kerstan: > * Johannes Lintner [01-09-2020 23:57]: > >> Ich scheitere damit, den gpg-agent durch den User www-data ausführen lassen zu können. > > Im Prinzip reicht das gnupg-modul aus. Das gnupg-home-Verzeichnis > muss dafür vorhanden und beschreibbar für www-data sein. > Ich lege das meist im Skript fest, etwa so: > > $this->GNUPG_HOMEDIR='/var/www/web/htdocs/privat/gnupg'; > putenv("GNUPGHOME=$this->GNUPG_HOMEDIR"); > >> Was nicht funktioniert: Entschlüsseln von Texten, Erzeugen von privaten Schlüsseln, Löschen von privaten Schlüsseln. > > Entschlüsseln von Texten sollte per $gpg->adddecryptkey und > $gpg->decrypt kein Problem sein. Die anderen Aktionen brauchen > teilweise Interaktion des Users. > > Die Frage wäre, ob du das brauchst. Eigentlich würde genau ein > privater Key reichen, um die eingehenden Mails zu entschlüsseln und > dann verschlüsselt mit den Public-Keys der User weiter zu verteilen. > > Das nur als Anregung! :-) > > Gruß Uwe > -- -------------------------- Using pgp email encryption My public key is attached.
Attachment:
0xB1B6FDD3ECD78C94.asc
Description: application/pgp-keys
Attachment:
signature.asc
Description: OpenPGP digital signature