Signatur
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
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 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);
// 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).