Signatur
Beschreibung
openssl_get_privatekey ist ein direkter Alias der Funktion openssl_pkey_get_private und verhält sich identisch zu dieser. Die Funktion lädt einen privaten RSA-, DSA-, EC- oder anderen asymmetrischen Schlüssel aus verschiedenen Quellen und gibt ein OpenSSLAsymmetricKey-Objekt zurück, das für weitere OpenSSL-Operationen wie Signierung, Entschlüsselung oder Zertifikatsverwaltung verwendet werden kann.
Der Schlüssel kann als PEM-codierter String, als Dateipfad mit dem Präfix file://, als OpenSSLAsymmetricKey-Objekt oder als Array übergeben werden. Falls der private Schlüssel mit einer Passphrase geschützt ist, muss diese als zweites Argument angegeben werden.
Da es sich um einen Alias handelt, empfiehlt PHP, stattdessen direkt openssl_pkey_get_private zu verwenden, da Aliasfunktionen in zukünftigen PHP-Versionen möglicherweise entfernt werden könnten. In bestehenden Codebasen funktioniert der Alias jedoch vollständig gleichwertig.
Das zurückgegebene Schlüsselobjekt wird typischerweise zusammen mit Funktionen wie openssl_sign, openssl_private_decrypt oder openssl_x509_check_private_key eingesetzt.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $private_key Pflicht | OpenSSLAsymmetricKey|array|string | Der private Schlüssel, angegeben als PEM-String, als Dateipfad mit Präfix file://pfad/zum/schluessel.pem, als bestehendes OpenSSLAsymmetricKey-Objekt oder als Array der Form [privater_schluessel, passphrase]. |
|
| $passphrase | ?string | null | Optionale Passphrase, falls der private Schlüssel verschlüsselt ist. Wird null übergeben oder weggelassen, wird angenommen, dass der Schlüssel nicht passwortgeschützt ist. |
Rückgabewert
OpenSSLAsymmetricKey-Objekt zurück (vor PHP 8.0 eine Ressource vom Typ resource). Im Fehlerfall — z. B. bei ungültigem Schlüsselformat oder falscher Passphrase — wird false zurückgegeben.Beispiele
Privaten Schlüssel aus PEM-String laden
<?php
$pemKey = file_get_contents('/var/ssl/private.pem');
$privateKey = openssl_get_privatekey($pemKey, 'meine_geheime_passphrase');
if ($privateKey === false) {
echo 'Fehler beim Laden des privaten Schlüssels: ' . openssl_error_string();
exit(1);
}
$daten = 'Zu signierende Nachricht';
openssl_sign($daten, $signatur, $privateKey, OPENSSL_ALGO_SHA256);
echo 'Signatur (Base64): ' . base64_encode($signatur) . PHP_EOL;
Privaten Schlüssel über Dateipfad laden
<?php
// Schlüsseldatei über file://-Präfix referenzieren
$privateKey = openssl_get_privatekey('file:///var/ssl/private_unencrypted.pem');
if ($privateKey === false) {
foreach (openssl_error_string() as $fehler) {
echo 'OpenSSL-Fehler: ' . $fehler . PHP_EOL;
}
exit(1);
}
$geheimtext = '';
$klartext = 'Geheime Nachricht';
// Verschlüsseln mit dem zugehörigen öffentlichen Schlüssel wäre nötig;
// hier Entschlüsselung eines vorhandenen Geheimtexts demonstrieren:
// openssl_private_decrypt($geheimtext, $entschluesselt, $privateKey);
echo 'Schlüssel erfolgreich geladen.' . PHP_EOL;
// Wichtig · Fallstricke
Alias-Hinweis: Da openssl_get_privatekey lediglich ein Alias von openssl_pkey_get_private ist, sollte in neuem Code bevorzugt openssl_pkey_get_private verwendet werden, um zukünftige Kompatibilitätsprobleme zu vermeiden.
Sicherheit: Passwörter und Passphrasen für private Schlüssel sollten niemals im Quellcode gespeichert werden. Nutze Umgebungsvariablen oder sichere Konfigurationsdateien außerhalb des Webroot-Verzeichnisses. Stelle sicher, dass Schlüsseldateien nur mit minimalen Dateisystemrechten (z. B. chmod 600) abgelegt werden.
PHP-Versionen: Vor PHP 8.0 wurde eine resource statt eines OpenSSLAsymmetricKey-Objekts zurückgegeben. Bei der Migration zu PHP 8+ sollte is_resource() durch instanceof OpenSSLAsymmetricKey ersetzt werden.