Signatur
Beschreibung
rnp_key_export_revocation ist Teil der RNP-Bibliothek (eine OpenPGP-Implementierung für PHP) und ermöglicht es, ein Widerrufszertifikat für einen bestimmten OpenPGP-Hauptschlüssel zu erzeugen und zu exportieren. Das resultierende Zertifikat kann anschließend auf Schlüsselserver hochgeladen oder an Kommunikationspartner verteilt werden, um den Schlüssel als ungültig zu markieren.
Ein Widerrufszertifikat ist besonders wichtig, wenn ein privater Schlüssel kompromittiert wurde, verloren gegangen ist oder nicht mehr verwendet werden soll. Durch das Verteilen des Zertifikats können andere Benutzer erkennen, dass der öffentliche Schlüssel nicht mehr vertrauenswürdig ist.
Der Parameter flags steuert das Ausgabeformat (z. B. ASCII-Armor), hash gibt den verwendeten Hash-Algorithmus an (z. B. "SHA256"), code gibt den Widerrufsgrund als standardisierten Code an (z. B. "superseded", "compromised", "retired", "no") und reason enthält eine optionale menschenlesbare Begründung als Freitext.
Die Funktion gibt die exportierten Daten als string zurück oder false im Fehlerfall. Die RNP-Erweiterung muss dafür installiert und geladen sein (ext-rnp).
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $ffi Pflicht | RnpFFI | Eine gültige RNP-FFI-Instanz, die zuvor mit rnp_ffi_create() erstellt wurde. |
|
| $handle Pflicht | string | Ein Schlüssel-Handle (Key-Handle-String), der den Hauptschlüssel identifiziert, für den das Widerrufszertifikat erzeugt werden soll. Das Handle wird z. B. über rnp_locate_key() ermittelt. |
|
| $flags Pflicht | int | Bitmaske zur Steuerung der Ausgabe. Mit RNP_KEY_EXPORT_ARMORED wird ASCII-Armor aktiviert, andernfalls wird binäres Format verwendet. |
|
| $hash Pflicht | string | Name des Hash-Algorithmus, der für die Widerrufssignatur verwendet wird, z. B. "SHA256" oder "SHA512". |
|
| $code Pflicht | string | Standardisierter Widerrufsgrund-Code. Mögliche Werte: "no" (kein Grund angegeben), "superseded" (Schlüssel ersetzt), "compromised" (Schlüssel kompromittiert), "retired" (Schlüssel nicht mehr in Verwendung). |
|
| $reason Pflicht | string | Optionaler Freitext mit einer menschenlesbaren Begründung für den Widerruf. Kann ein leerer String sein. |
Rückgabewert
string zurück (ASCII-armored oder binär, je nach flags). Im Fehlerfall wird false zurückgegeben.Beispiele
Widerrufszertifikat für einen kompromittierten Schlüssel erzeugen
<?php
// RNP-FFI-Instanz erzeugen
$ffi = rnp_ffi_create('GPG', 'GPG');
// Schlüsselring aus Datei laden
rnp_load_keys($ffi, 'GPG', file_get_contents('/pfad/zu/secring.gpg'), RNP_LOAD_SAVE_SECRET_KEYS);
// Schlüssel anhand der Fingerprint-ID lokalisieren
$key = rnp_locate_key($ffi, 'fingerprint', 'ABCDEF1234567890ABCDEF1234567890ABCDEF12');
if ($key === false) {
die('Schlüssel nicht gefunden.');
}
// Widerrufszertifikat erzeugen (ASCII-armored, SHA256, kompromittiert)
$revocation = rnp_key_export_revocation(
$ffi,
$key,
RNP_KEY_EXPORT_ARMORED,
'SHA256',
'compromised',
'Der private Schlüssel wurde auf einem kompromittierten System gespeichert.'
);
if ($revocation === false) {
die('Fehler beim Erzeugen des Widerrufszertifikats.');
}
// Zertifikat in Datei speichern
file_put_contents('revocation.asc', $revocation);
echo "Widerrufszertifikat erfolgreich gespeichert.\n";
echo $revocation;
rnp_key_handle_destroy($key);
rnp_ffi_destroy($ffi);
Widerrufszertifikat ohne Grund erzeugen und ausgeben
<?php
$ffi = rnp_ffi_create('GPG', 'GPG');
// Öffentlichen und privaten Schlüssel laden
rnp_load_keys($ffi, 'GPG', file_get_contents('pubring.gpg'), RNP_LOAD_SAVE_PUBLIC_KEYS);
rnp_load_keys($ffi, 'GPG', file_get_contents('secring.gpg'), RNP_LOAD_SAVE_SECRET_KEYS);
$key = rnp_locate_key($ffi, 'userid', 'Alice <alice@example.com>');
if ($key) {
$cert = rnp_key_export_revocation(
$ffi,
$key,
RNP_KEY_EXPORT_ARMORED,
'SHA256',
'no', // kein spezifischer Grund
'' // kein Freitext
);
if ($cert !== false) {
header('Content-Type: application/pgp-keys');
header('Content-Disposition: attachment; filename="revoke.asc"');
echo $cert;
}
rnp_key_handle_destroy($key);
}
rnp_ffi_destroy($ffi);
// Wichtig · Fallstricke
Sicherheitshinweis: Ein Widerrufszertifikat gewährt die Möglichkeit, einen Schlüssel dauerhaft ungültig zu erklären. Es sollte daher sicher aufbewahrt und niemals versehentlich veröffentlicht werden, bevor ein tatsächlicher Widerrufsgrund vorliegt.
Der Schlüssel-Handle muss einen Hauptschlüssel (Primary Key) referenzieren – Unterschlüssel (Subkeys) können nicht direkt widerrufen werden. Außerdem muss der zugehörige private Schlüssel im Schlüsselring geladen sein, da die Widerrufssignatur kryptografisch signiert werden muss.
Die Funktion ist Teil der PHP-RNP-Erweiterung (ext-rnp), die separat installiert werden muss und auf der RNP-Bibliothek basiert. Sie ist nicht Teil der PHP-Standardinstallation.