Signatur
Beschreibung
rnp_key_get_info() ist Teil der RNP-Erweiterung für PHP und gibt ein assoziatives Array mit allen verfügbaren Metadaten eines OpenPGP-Schlüssels zurück. Dazu gehören unter anderem Algorithmus, Schlüssellänge, Fingerabdruck, Key-ID, Erstellungsdatum, Ablaufdatum sowie Angaben darüber, ob der Schlüssel ein primärer Schlüssel, ein Unterschlüssel (Subkey), ein geheimer Schlüssel oder ob er widerrufen ist.
Die Funktion eignet sich besonders für Anwendungen, die OpenPGP-Schlüssel verwalten, analysieren oder anzeigen müssen – etwa in Schlüsselbund-Verwaltungen, E-Mail-Verschlüsselungssystemen oder Werkzeugen zur Schlüsselinspektion. Mit den zurückgegebenen Daten lassen sich beispielsweise Ablaufdaten überwachen oder Schlüsseleigenschaften validieren.
Der RnpKey-Parameter wird typischerweise über Funktionen wie rnp_locate_key(), rnp_key_get_primary_uid() oder aus einem iterierten Schlüsselbund gewonnen. Im Fehlerfall gibt die Funktion false zurück, etwa wenn der übergebene Schlüssel ungültig ist.
- fingerprint: Hexadezimaler Fingerabdruck des Schlüssels
- keyid: Kurz-ID des Schlüssels (16 Hex-Zeichen)
- alg: Algorithmus (z. B.
RSA,ECDSA) - bits: Schlüssellänge in Bit
- creation: Unix-Timestamp der Erstellung
- expiration: Unix-Timestamp des Ablaufs (0 = kein Ablauf)
- is_secret: Ob der geheime Schlüsselanteil vorhanden ist
- is_primary: Ob es ein Primärschlüssel ist
- is_sub: Ob es ein Unterschlüssel ist
- is_valid: Ob der Schlüssel gültig ist
- is_revoked: Ob der Schlüssel widerrufen wurde
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $key Pflicht | RnpKey | Ein gültiges RnpKey-Objekt, zu dem die Informationen abgerufen werden sollen. Wird typischerweise über rnp_locate_key() oder eine Schlüsselbund-Iteration erhalten. |
Rückgabewert
fingerprint, keyid, alg, bits, creation, expiration, is_secret, is_primary, is_sub, is_valid, is_revoked). Im Fehlerfall wird false zurückgegeben.Beispiele
Schlüsselinformationen ausgeben
<?php
// RNP-Kontext erstellen und Schlüsselbund laden
$ffi = rnp_ffi_create('GPG', 'GPG');
rnp_load_keys($ffi, 'GPG', file_get_contents('/pfad/zu/pubring.gpg'), RNP_LOAD_SAVE_PUBLIC_KEYS);
// Schlüssel anhand der E-Mail-Adresse suchen
$key = rnp_locate_key($ffi, 'userid', 'alice@example.com');
if ($key === false) {
echo "Schlüssel nicht gefunden.\n";
exit(1);
}
$info = rnp_key_get_info($key);
if ($info === false) {
echo "Fehler beim Abrufen der Schlüsselinformationen.\n";
exit(1);
}
echo "Key-ID: " . $info['keyid'] . "\n";
echo "Fingerprint: " . $info['fingerprint'] . "\n";
echo "Algorithmus: " . $info['alg'] . "\n";
echo "Bits: " . $info['bits'] . "\n";
echo "Erstellt: " . date('Y-m-d', $info['creation']) . "\n";
echo "Läuft ab: " . ($info['expiration'] ? date('Y-m-d', $info['expiration']) : 'nie') . "\n";
echo "Widerrufen: " . ($info['is_revoked'] ? 'Ja' : 'Nein') . "\n";
echo "Gültig: " . ($info['is_valid'] ? 'Ja' : 'Nein') . "\n";
rnp_ffi_destroy($ffi);
Ablaufende Schlüssel im Schlüsselbund ermitteln
<?php
$ffi = rnp_ffi_create('GPG', 'GPG');
rnp_load_keys($ffi, 'GPG', file_get_contents('/pfad/zu/pubring.gpg'), RNP_LOAD_SAVE_PUBLIC_KEYS);
$count = rnp_get_public_key_count($ffi);
$now = time();
$bald = $now + (30 * 24 * 3600); // 30 Tage in der Zukunft
for ($i = 0; $i < $count; $i++) {
$key = rnp_get_public_key_at($ffi, $i);
$info = rnp_key_get_info($key);
if ($info === false || !$info['is_primary']) {
continue;
}
if ($info['expiration'] > 0 && $info['expiration'] <= $bald) {
echo "WARNUNG: Schlüssel " . $info['keyid']
. " läuft am " . date('Y-m-d', $info['expiration']) . " ab!\n";
}
}
rnp_ffi_destroy($ffi);
// Wichtig · Fallstricke
Sicherheitshinweis: Das Vorhandensein eines Schlüssels im Schlüsselbund bedeutet nicht automatisch, dass ihm vertraut werden darf. Prüfe stets is_valid und is_revoked, bevor du einen Schlüssel zur Verschlüsselung oder Signaturprüfung verwendest.
Die RNP-Erweiterung für PHP ist eine vergleichsweise neue Erweiterung (basierend auf der rnp-Bibliothek von Ribose). Sie muss separat installiert werden und ist nicht standardmäßig in PHP-Distributionen enthalten. Verfügbarkeit und genaue Array-Schlüssel können je nach Version der Erweiterung leicht abweichen – prüfe daher im Zweifelsfall mit isset(), ob ein bestimmter Schlüssel im Rückgabe-Array vorhanden ist.
Geheime Schlüsselanteile (is_secret = true) sollten niemals über unsichere Kanäle übertragen oder in Logs gespeichert werden.