Start · Sprachen · PHP · Referenz · openssl_get_publickey

openssl_get_publickey

Funktion

Alias von <code>openssl_pkey_get_public</code> — lädt einen öffentlichen Schlüssel aus verschiedenen Quellen und gibt ein Schlüssel-Ressource-Objekt zurück.

seit PHP 4.0.4 Kategorie: crypto

Signatur

openssl_get_publickey(OpenSSLAsymmetricKey|OpenSSLCertificate|array|string $public_key): OpenSSLAsymmetricKey|false

Beschreibung

openssl_get_publickey() ist ein vollständiger Alias der Funktion openssl_pkey_get_public(). Die Funktion extrahiert bzw. lädt einen öffentlichen Schlüssel aus unterschiedlichen Quellen und stellt ihn als OpenSSLAsymmetricKey-Objekt zur Verfügung, das anschließend für asymmetrische Verschlüsselungs-, Entschlüsselungs- und Verifizierungsoperationen genutzt werden kann.

Als Eingabe werden verschiedene Formate akzeptiert: ein bereits vorhandenes OpenSSLAsymmetricKey- oder OpenSSLCertificate-Objekt, ein PEM-kodierter Schlüssel-String, ein Dateipfad in der Form file://pfad/zum/schluessel.pem oder ein Array mit einem Zertifikat und einem Passwort. Dies macht die Funktion sehr flexibel in der Praxis.

In modernem PHP-Code (ab PHP 8.0) empfiehlt sich die direkte Verwendung von openssl_pkey_get_public(), da diese Funktion den primären Namen trägt. Der Alias openssl_get_publickey() ist jedoch vollständig äquivalent und kann ohne Bedenken eingesetzt werden, sofern Abwärtskompatibilität gewünscht ist.

Nach der Nutzung des Schlüssels in PHP-Versionen vor 8.0 sollte der Schlüssel mit openssl_free_key() freigegeben werden. Ab PHP 8.0 erfolgt die Speicherbereinigung automatisch, wenn das Objekt den Gültigkeitsbereich verlässt.

Parameter

Name Typ Default Beschreibung
$public_key Pflicht OpenSSLAsymmetricKey|OpenSSLCertificate|array|string Der öffentliche Schlüssel in einem der unterstützten Formate: ein OpenSSLAsymmetricKey- oder OpenSSLCertificate-Objekt, ein PEM-kodierter Schlüssel als String, ein Dateipfad im Format file:///pfad/schluessel.pem oder ein Array der Form [$zertifikat, $passwort] für passwortgeschützte Schlüssel.

Rückgabewert

Typ
OpenSSLAsymmetricKey|false
Beschreibung
Gibt bei Erfolg ein OpenSSLAsymmetricKey-Objekt zurück, das den extrahierten öffentlichen Schlüssel repräsentiert. Im Fehlerfall (z. B. ungültiger Schlüssel oder nicht lesbarer Dateipfad) wird false zurückgegeben.

Beispiele

Öffentlichen Schlüssel aus PEM-String laden und zur Verschlüsselung nutzen

<?php
$pemPublicKey = <<<EOT
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2a2rwplBQLF29amygykE
MmYz0+Kcj3bKBp29Fk9uqrAMwDMzLFHSHFoEsJZbYgsSckN7FEoGLOBMAANbwMK
...
-----END PUBLIC KEY-----
EOT;

$publicKey = openssl_get_publickey($pemPublicKey);

if ($publicKey === false) {
    echo 'Fehler beim Laden des öffentlichen Schlüssels.';
    exit;
}

$nachricht = 'Geheime Nachricht';
$verschluesselt = '';

if (openssl_public_encrypt($nachricht, $verschluesselt, $publicKey)) {
    echo 'Verschlüsselung erfolgreich. Länge: ' . strlen($verschluesselt) . ' Bytes';
} else {
    echo 'Verschlüsselung fehlgeschlagen.';
}

// Ab PHP 8.0 automatische Freigabe; vorher:
// openssl_free_key($publicKey);
Verschlüsselung erfolgreich. Länge: 256 Bytes

Öffentlichen Schlüssel aus einer PEM-Datei laden

<?php
// Schlüssel aus Datei laden
$publicKey = openssl_get_publickey('file:///var/keys/public.pem');

if ($publicKey === false) {
    $fehler = openssl_error_string();
    throw new RuntimeException('Schlüssel konnte nicht geladen werden: ' . $fehler);
}

// Schlüssel-Details ausgeben
$details = openssl_pkey_get_details($publicKey);
echo 'Schlüsseltyp: ' . $details['type'] . PHP_EOL;
echo 'Schlüssellänge (Bits): ' . $details['bits'] . PHP_EOL;
Schlüsseltyp: 0 Schlüssellänge (Bits): 2048

// Wichtig · Fallstricke

Alias-Hinweis: Da openssl_get_publickey() ein Alias von openssl_pkey_get_public() ist, sind beide Funktionen vollständig austauschbar. Für neue Projekte wird die Verwendung von openssl_pkey_get_public() empfohlen, da Aliasse in zukünftigen PHP-Versionen theoretisch entfernt werden könnten.

Sicherheitshinweis: Stellen Sie sicher, dass öffentliche Schlüssel aus vertrauenswürdigen Quellen stammen. Ein kompromittierter öffentlicher Schlüssel führt dazu, dass Daten für den Angreifer verschlüsselt werden. Validieren Sie Zertifikate mithilfe von Zertifikatsketten und openssl_x509_verify().

Fehlerbehandlung: Im Fehlerfall gibt die Funktion false zurück. Weitere Fehlerinformationen sind über openssl_error_string() abrufbar. Prüfen Sie den Rückgabewert stets mit === false.

PHP 8.0+: Ab PHP 8.0 gibt die Funktion ein OpenSSLAsymmetricKey-Objekt zurück. In früheren Versionen wurde eine resource zurückgegeben. Der explizite Aufruf von openssl_free_key() ist ab PHP 8.0 nicht mehr notwendig.