Start · Sprachen · PHP · Referenz · rnp_load_keys_from_path

rnp_load_keys_from_path

Funktion

Lädt OpenPGP-Schlüssel aus einer Datei oder einem Verzeichnis in den angegebenen <code>RnpFFI</code>-Kontext.

seit PHP 8.3.0 Kategorie: crypto

Signatur

rnp_load_keys_from_path(RnpFFI $ffi, string $format, string $input_path, bool $public_keys, bool $secret_keys): bool

Beschreibung

rnp_load_keys_from_path ist Teil der PHP-Erweiterung für die RNP-Bibliothek (eine OpenPGP-Implementierung) und ermöglicht es, kryptographische Schlüssel direkt aus dem Dateisystem in einen bestehenden RnpFFI-Kontext zu laden. Die gelesenen Schlüssel stehen danach für Verschlüsselungs-, Entschlüsselungs-, Signier- und Verifikationsoperationen zur Verfügung.

Über die Parameter $public_keys und $secret_keys lässt sich gezielt steuern, welche Art von Schlüsseln geladen werden sollen. So kann z. B. ausschließlich der öffentliche Schlüsselring importiert werden, ohne private Schlüssel zu berühren. Der Parameter $format gibt das Dateiformat an – übliche Werte sind 'GPG' für das binäre OpenPGP-Format sowie 'KBX' für das Keybox-Format.

Typische Anwendungsfälle sind das Laden von Schlüsseln aus einer Keyring-Datei auf dem Server, um damit eingehende Signaturen zu prüfen oder Nachrichten zu verschlüsseln. Die Funktion eignet sich besonders für Batch-Prozesse und serverseitige Krypto-Operationen, bei denen die Schlüssel in einer Datei vorliegen und nicht manuell als String übergeben werden sollen.

Beachte, dass sowohl $public_keys als auch $secret_keys gleichzeitig auf true gesetzt werden dürfen, wenn beide Typen aus derselben Datei geladen werden sollen. Mindestens einer der beiden Parameter muss true sein.

Parameter

Name Typ Default Beschreibung
$ffi Pflicht RnpFFI Ein gültiger RnpFFI-Kontext, in den die Schlüssel geladen werden sollen. Dieser wird zuvor z. B. mit rnp_ffi_create() erstellt.
$format Pflicht string Das Format der Schlüsseldatei. Mögliche Werte sind z. B. 'GPG' (binäres OpenPGP-Format) oder 'KBX' (GnuPG Keybox-Format).
$input_path Pflicht string Pfad zur Schlüsseldatei oder zum Verzeichnis, aus dem die Schlüssel gelesen werden sollen. Der Pfad muss für den PHP-Prozess lesbar sein.
$public_keys Pflicht bool Gibt an, ob öffentliche Schlüssel aus der angegebenen Datei geladen werden sollen. Mindestens einer der Parameter public_keys oder secret_keys muss true sein.
$secret_keys Pflicht bool Gibt an, ob geheime (private) Schlüssel aus der angegebenen Datei geladen werden sollen. Mindestens einer der Parameter public_keys oder secret_keys muss true sein.

Rückgabewert

Typ
bool
Beschreibung
Gibt true zurück, wenn die Schlüssel erfolgreich geladen wurden, andernfalls false. Im Fehlerfall (z. B. Datei nicht vorhanden, ungültiges Format) wird false zurückgegeben.

Beispiele

Öffentliche Schlüssel aus einem GPG-Keyring laden

<?php
// RNP-FFI-Kontext für OpenPGP erstellen
$ffi = rnp_ffi_create('GPG', 'GPG');

// Nur öffentliche Schlüssel aus einer Keyring-Datei laden
$result = rnp_load_keys_from_path($ffi, 'GPG', '/var/pgp/pubring.gpg', true, false);

if ($result) {
    echo "Öffentliche Schlüssel erfolgreich geladen.\n";
} else {
    echo "Fehler beim Laden der Schlüssel.\n";
}

// Ressource freigeben
rnp_ffi_destroy($ffi);
Öffentliche Schlüssel erfolgreich geladen.

Öffentliche und private Schlüssel aus einem KBX-Keybox-Verzeichnis laden

<?php
// RNP-FFI-Kontext erstellen
$ffi = rnp_ffi_create('KBX', 'G10');

// Pfad zum GnuPG-Verzeichnis
$gnupgDir = '/home/user/.gnupg';

// Sowohl öffentliche als auch geheime Schlüssel laden
$loaded = rnp_load_keys_from_path($ffi, 'KBX', $gnupgDir . '/pubring.kbx', true, false);
$loadedSecret = rnp_load_keys_from_path($ffi, 'G10', $gnupgDir . '/private-keys-v1.d', false, true);

if ($loaded && $loadedSecret) {
    echo "Schlüssel erfolgreich geladen. Bereit zum Signieren/Verschlüsseln.\n";
    // Weiterverarbeitung z. B. mit rnp_op_sign_create() ...
} else {
    echo "Laden fehlgeschlagen. Bitte Pfad und Format prüfen.\n";
}

rnp_ffi_destroy($ffi);
Schlüssel erfolgreich geladen. Bereit zum Signieren/Verschlüsseln.

// Wichtig · Fallstricke

Sicherheitshinweis: Private Schlüsseldateien (secret_keys = true) sollten ausschließlich mit restriktiven Dateisystemberechtigungen abgesichert werden (z. B. Modus 0600). Stelle sicher, dass der Pfad $input_path nicht aus Benutzereingaben stammt, um Path-Traversal-Angriffe zu verhindern. Validiere und normalisiere Pfade daher stets mit realpath() und prüfe, ob der aufgelöste Pfad innerhalb eines erlaubten Basisverzeichnisses liegt.

Mindestens einer der Parameter $public_keys oder $secret_keys muss true sein, da andernfalls keine sinnvolle Operation durchgeführt werden kann und die Funktion false zurückliefert.

Diese Funktion ist Teil der PECL-Erweiterung rnp. Sie ist ab PHP 8.3 im PECL-Repository verfügbar und muss ggf. separat installiert werden (pecl install rnp).