Start · Sprachen · PHP · Referenz · gnupg_deletekey

gnupg_deletekey

Funktion

Löscht einen öffentlichen (und optional privaten) Schlüssel anhand seines Fingerabdrucks aus dem GnuPG-Schlüsselbund.

seit PHP 1.3.0 Kategorie: crypto

Signatur

gnupg_deletekey(resource $identifier, string $fingerprint, int $allow_secret = 0): bool

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

Typ
bool
Beschreibung
Gibt 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);
}
Schlüssel erfolgreich gelöscht.

Ö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;
}
Schlüsselpaar (öffentlich + privat) erfolgreich entfernt.

// 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').