Signatur
Beschreibung
openssl_csr_get_public_key() liest den in einem CSR enthaltenen öffentlichen Schlüssel aus und gibt ihn als OpenSSLAsymmetricKey-Objekt (vor PHP 8.0 als Ressource vom Typ OpenSSL key) zurück. Dies ist z. B. nützlich, um zu prüfen, ob der öffentliche Schlüssel eines CSR mit einem vorhandenen privaten Schlüssel übereinstimmt, oder um Schlüsseleigenschaften wie Länge und Algorithmus zu inspizieren.
Der Parameter $csr akzeptiert ein OpenSSLCertificateSigningRequest-Objekt (erzeugt z. B. mit openssl_csr_new()), den PEM-kodierten CSR als String oder einen Dateipfad im Format file://pfad/zur/datei.pem.
Der zurückgegebene Schlüssel kann direkt an andere OpenSSL-Funktionen übergeben werden, etwa openssl_pkey_get_details(), um Metadaten wie Schlüssellänge und Schlüsseltyp abzufragen. Nicht mehr benötigte Schlüssel-Ressourcen sollten in PHP < 8.0 mit openssl_free_key() freigegeben werden; ab PHP 8.0 übernimmt der Garbage Collector diese Aufgabe automatisch.
Der Parameter $short_names steuert, ob die Felder des Distinguished Name in Kurzform (z. B. CN statt commonName) zurückgegeben werden. In der Praxis hat dieser Parameter auf den zurückgegebenen Schlüssel selbst keinen Einfluss, beeinflusst aber möglicherweise interne Metadaten-Verarbeitung.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $csr Pflicht | OpenSSLCertificateSigningRequest|string | Der CSR als OpenSSLCertificateSigningRequest-Objekt, als PEM-String oder als Dateipfad im Format file://pfad/zur/datei.pem. |
|
| $short_names | bool | true | Gibt an, ob Distinguished-Name-Felder in Kurzform zurückgegeben werden sollen (z. B. CN statt commonName). Hat in der Regel keinen praktischen Einfluss auf den extrahierten Schlüssel. |
Rückgabewert
OpenSSLAsymmetricKey-Objekt (vor PHP 8.0 eine OpenSSL-Key-Ressource) zurück, das den öffentlichen Schlüssel des CSR repräsentiert. Bei einem Fehler (z. B. ungültiger CSR) wird false zurückgegeben.Beispiele
Öffentlichen Schlüssel aus einem CSR extrahieren und Details anzeigen
<?php
// Neuen privaten Schlüssel und CSR erzeugen
$privateKey = openssl_pkey_new([
'private_key_bits' => 2048,
'private_key_type' => OPENSSL_KEYTYPE_RSA,
]);
$csrConfig = [
'countryName' => 'DE',
'stateOrProvinceName' => 'Bayern',
'localityName' => 'München',
'organizationName' => 'Beispiel GmbH',
'commonName' => 'example.com',
'emailAddress' => 'admin@example.com',
];
$csr = openssl_csr_new($csrConfig, $privateKey);
// Öffentlichen Schlüssel aus dem CSR extrahieren
$publicKey = openssl_csr_get_public_key($csr);
if ($publicKey === false) {
echo 'Fehler beim Extrahieren des öffentlichen Schlüssels.' . PHP_EOL;
} else {
$details = openssl_pkey_get_details($publicKey);
echo 'Schlüssellänge: ' . $details['bits'] . ' Bit' . PHP_EOL;
echo 'Schlüsseltyp: ' . ($details['type'] === OPENSSL_KEYTYPE_RSA ? 'RSA' : 'Anderer') . PHP_EOL;
}
?>
CSR aus PEM-Datei laden und öffentlichen Schlüssel exportieren
<?php
// CSR aus Datei laden
$csrPem = file_get_contents('/etc/ssl/mein_antrag.csr');
$publicKey = openssl_csr_get_public_key($csrPem);
if ($publicKey !== false) {
// Öffentlichen Schlüssel als PEM-String exportieren
openssl_pkey_export($publicKey, $pubKeyPem);
echo $pubKeyPem;
} else {
echo 'Ungültiger oder nicht lesbarer CSR.' . PHP_EOL;
}
?>
// Wichtig · Fallstricke
Versionshinweis: Vor PHP 8.0 wurde der Schlüssel als Ressource vom Typ OpenSSL key zurückgegeben. Ab PHP 8.0 wird ein OpenSSLAsymmetricKey-Objekt verwendet. Code, der auf Ressourcentyp prüft (z. B. is_resource()), muss entsprechend angepasst werden.
Ressourcenverwaltung: In PHP < 8.0 sollte der zurückgegebene Schlüssel nach der Verwendung mit openssl_free_key() freigegeben werden, um Speicherlecks zu vermeiden. Ab PHP 8.0 ist dies nicht mehr nötig.
Sicherheit: Der aus einem CSR extrahierte öffentliche Schlüssel sollte vor der Verwendung auf ausreichende Schlüssellänge geprüft werden (RSA mindestens 2048 Bit, besser 4096 Bit). Zu kurze Schlüssel gelten als unsicher.