Signatur
Beschreibung
gnupg_deletekey() entfernt einen Schlüssel aus dem GnuPG-Schlüsselbund, der mit der angegebenen $identifier-Ressource verknüpft ist. Der Schlüssel wird über seinen Fingerabdruck ($fingerprint) eindeutig identifiziert.
Standardmäßig wird nur der öffentliche Schlüssel gelöscht. Soll auch der zugehörige private (geheime) Schlüssel entfernt werden, muss $allow_secret auf 1 gesetzt werden. Beachte, dass GPG beim Vorhandensein eines privaten Schlüssels den öffentlichen Schlüssel nicht löscht, sofern $allow_secret nicht aktiviert ist.
Die Funktion ist nützlich, wenn abgelaufene, kompromittierte oder nicht mehr benötigte Schlüssel aus dem lokalen Schlüsselbund entfernt werden sollen. Sie eignet sich für administrative Werkzeuge, die den Schlüsselbund programmatisch verwalten.
Die gnupg-Erweiterung basiert auf der libgpgme-Bibliothek. Das $identifier-Objekt wird zuvor mit gnupg_init() erstellt.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $identifier Pflicht | resource | Eine GnuPG-Ressource, wie sie von gnupg_init() zurückgegeben wird. Repräsentiert den Kontext, in dem der Schlüsselbund verwaltet wird. |
|
| $fingerprint Pflicht | string | Der vollständige hexadezimale Fingerabdruck des zu löschenden Schlüssels (z. B. 8B8DC2C0F3B01FFC23C8E46F5A0CEB1F5E5FF5D0). Es muss der vollständige Fingerabdruck angegeben werden, nicht nur eine Teil-ID. |
|
| $allow_secret | int | 0 | Gibt an, ob auch der private (geheime) Schlüssel gelöscht werden soll. Wird 1 übergeben, wird sowohl der öffentliche als auch der private Schlüssel entfernt. Standardwert ist 0 (nur öffentlicher Schlüssel). |
Rückgabewert
true zurück, wenn der Schlüssel erfolgreich gelöscht wurde. Gibt false zurück, wenn der Schlüssel nicht gefunden wurde, der Fingerabdruck ungültig ist oder ein privater Schlüssel vorhanden ist und $allow_secret nicht gesetzt wurde.Beispiele
Öffentlichen Schlüssel löschen
<?php
$gpg = gnupg_init();
$fingerprint = '8B8DC2C0F3B01FFC23C8E46F5A0CEB1F5E5FF5D0';
$result = gnupg_deletekey($gpg, $fingerprint);
if ($result) {
echo "Schlüssel erfolgreich gelöscht.";
} else {
echo "Fehler beim Löschen des Schlüssels: " . gnupg_geterror($gpg);
}
Öffentlichen und privaten Schlüssel löschen
<?php
$gpg = gnupg_init();
// Fingerabdruck des zu entfernenden Schlüsselpaares
$fingerprint = '8B8DC2C0F3B01FFC23C8E46F5A0CEB1F5E5FF5D0';
// allow_secret = 1: auch den privaten Schlüssel löschen
$result = gnupg_deletekey($gpg, $fingerprint, 1);
if ($result) {
echo "Schlüsselpaar (öffentlich + privat) erfolgreich entfernt.";
} else {
$error = gnupg_geterror($gpg);
echo "Löschen fehlgeschlagen: " . $error;
}
// Wichtig · Fallstricke
Sicherheitshinweis: Das Löschen eines privaten Schlüssels mit allow_secret = 1 ist unwiderruflich, sofern kein Backup vorhanden ist. Stelle sicher, dass der Schlüssel tatsächlich nicht mehr benötigt wird und dass eine Sicherung existiert, bevor du den privaten Schlüssel löschst.
Randfälle: Wenn ein privater Schlüssel für den angegebenen Fingerabdruck im Schlüsselbund existiert und allow_secret auf 0 steht, schlägt die Funktion fehl, da GnuPG das Löschen eines öffentlichen Schlüssels verhindert, solange ein zugehöriger privater Schlüssel vorhanden ist.
Die Funktion arbeitet im Kontext des GnuPG-Heimatverzeichnisses, das standardmäßig ~/.gnupg ist. Bei Webserver-Prozessen (z. B. www-data) muss ggf. das GNUPGHOME explizit gesetzt werden, zum Beispiel via putenv('GNUPGHOME=/var/www/.gnupg').