Signatur
Beschreibung
openssl_free_key() gibt den Speicher frei, der mit einem OpenSSL-Schlüssel verbunden ist. In PHP 5 und PHP 7 war ein Schlüssel eine klassische Ressource (resource); ab PHP 8.0 ist er ein OpenSSLAsymmetricKey-Objekt, das automatisch durch den Garbage Collector verwaltet wird.
In PHP 8.0 wurde die Funktion als veraltet (deprecated) markiert und ab PHP 8.4 vollständig entfernt. Da OpenSSLAsymmetricKey-Objekte mit dem normalen PHP-Objekt-Lifecycle verwaltet werden, reicht es aus, die Variable auf null zu setzen oder sie schlicht aus dem Scope auslaufen zu lassen, damit der Garbage Collector den Speicher freigibt.
Für Code, der noch unter PHP 7 lauffähig sein muss, kann openssl_free_key() sinnvoll sein, um Ressourcen in lang laufenden Skripten (CLI-Daemons, Schleifen über viele Schlüssel) gezielt freizugeben. In modernem PHP-Code sollte die Funktion nicht mehr verwendet werden.
- PHP < 8.0: explizites Freigeben einer Ressource empfohlen.
- PHP ≥ 8.0: deprecated — Schlüsselobjekte werden automatisch verwaltet.
- PHP ≥ 8.4: Funktion existiert nicht mehr.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $key Pflicht | OpenSSLAsymmetricKey|resource | Der freizugebende Schlüssel — entweder eine Ressource (PHP < 8.0) oder ein OpenSSLAsymmetricKey-Objekt (PHP ≥ 8.0), wie es z. B. von openssl_pkey_get_private() oder openssl_pkey_get_public() zurückgegeben wird. |
Rückgabewert
Beispiele
Explizites Freigeben eines privaten Schlüssels (PHP 7-kompatibel)
<?php
// Privaten Schlüssel laden
$privateKey = openssl_pkey_get_private(
file_get_contents('/pfad/zum/private.pem'),
'optionales_passphrase'
);
if ($privateKey === false) {
die('Schlüssel konnte nicht geladen werden: ' . openssl_error_string());
}
// Signatur erstellen
openssl_sign('Zu signierender Text', $signature, $privateKey, OPENSSL_ALGO_SHA256);
echo 'Signatur (base64): ' . base64_encode($signature) . PHP_EOL;
// Schlüssel explizit freigeben (nur PHP 7 und älter sinnvoll)
if (PHP_MAJOR_VERSION < 8) {
openssl_free_key($privateKey);
}
// In PHP 8+ einfach Variable auf null setzen oder auslaufen lassen
$privateKey = null;
Moderner PHP-8-Ansatz ohne openssl_free_key()
<?php
// Ab PHP 8.0 wird der Schlüssel als Objekt verwaltet —
// openssl_free_key() ist deprecated und nicht mehr nötig.
function signData(string $data, string $pemFile): string {
$key = openssl_pkey_get_private(file_get_contents($pemFile));
if ($key === false) {
throw new RuntimeException('Schlüssel ungültig: ' . openssl_error_string());
}
openssl_sign($data, $signature, $key, OPENSSL_ALGO_SHA256);
// $key wird automatisch freigegeben, wenn die Funktion endet.
return base64_encode($signature);
}
// Verwendung:
// echo signData('Hallo Welt', '/pfad/zum/private.pem');
// Wichtig · Fallstricke
Deprecation: Ab PHP 8.0 ist openssl_free_key() als veraltet markiert. Ab PHP 8.4 wurde sie vollständig entfernt. Für neuen Code sollte die Funktion nicht mehr genutzt werden.
Speicherverwaltung: In modernem PHP reicht es, die Variable zu überschreiben ($key = null;) oder den Scope verlassen zu lassen. Das OpenSSLAsymmetricKey-Objekt wird dann automatisch durch den Garbage Collector freigegeben.
Sicherheit: Schlüssel sollten nicht länger im Speicher gehalten werden als nötig. In lang laufenden Prozessen (z. B. Daemons) empfiehlt es sich, Schlüsselobjekte nach der Verwendung explizit auf null zu setzen, um den Speicherverbrauch zu minimieren.