Start · Sprachen · PHP · Referenz · openssl_csr_get_subject

openssl_csr_get_subject

Funktion

Liest das Subjekt (Distinguished Name) aus einem Certificate Signing Request (CSR) aus und gibt es als assoziatives Array zurück.

seit PHP 5.2.0 Kategorie: crypto

Signatur

openssl_csr_get_subject(OpenSSLCertificateSigningRequest|string $csr, bool $short_names = true): array|false

Beschreibung

Mit openssl_csr_get_subject() lassen sich die im CSR enthaltenen Subjekt-Informationen (Distinguished Name, DN) auslesen. Dazu gehören typischerweise Felder wie Common Name (CN), Organization (O), Country (C), State/Province (ST), Locality (L) sowie optionale Felder wie E-Mail-Adresse oder Organisationseinheit (OU).

Der Parameter $short_names steuert, ob die zurückgegebenen Schlüssel als Kurzbezeichnungen (z. B. CN, O, C) oder als vollständige Bezeichnungen (z. B. commonName, organizationName, countryName) ausgegeben werden. Standardmäßig werden Kurzbezeichnungen verwendet.

Diese Funktion ist besonders nützlich, wenn ein CSR vor der Signierung durch eine Certificate Authority (CA) geprüft werden soll – etwa um sicherzustellen, dass alle Felder korrekt ausgefüllt sind oder dass der Antragsteller die erwartete Identität aufweist.

Der CSR kann als OpenSSLCertificateSigningRequest-Objekt (ab PHP 8.0), als PEM-kodierter String oder als Dateipfad mit dem Präfix file:// übergeben werden.

Parameter

Name Typ Default Beschreibung
$csr Pflicht OpenSSLCertificateSigningRequest|string Der Certificate Signing Request, entweder als OpenSSLCertificateSigningRequest-Objekt, als PEM-kodierter String oder als Dateipfad mit dem Präfix file://.
$short_names bool true Gibt an, ob die Schlüssel im zurückgegebenen Array als Kurzbezeichnungen (CN, O usw.) oder als vollständige Bezeichnungen (commonName, organizationName usw.) ausgegeben werden sollen.

Rückgabewert

Typ
array|false
Beschreibung
Gibt bei Erfolg ein assoziatives Array mit den Subjekt-Feldern des CSR zurück. Die Schlüssel sind je nach $short_names entweder Kurz- oder Langbezeichnungen. Im Fehlerfall (z. B. ungültiger CSR) wird false zurückgegeben.

Beispiele

Subjekt eines CSR mit Kurzbezeichnungen auslesen

<?php
// Neuen privaten Schlüssel erzeugen
$privateKey = openssl_pkey_new([
    'private_key_bits' => 2048,
    'private_key_type' => OPENSSL_KEYTYPE_RSA,
]);

// Distinguished Name für den CSR
$dn = [
    'C'  => 'DE',
    'ST' => 'Bayern',
    'L'  => 'München',
    'O'  => 'Muster GmbH',
    'OU' => 'IT-Abteilung',
    'CN' => 'www.beispiel.de',
    'emailAddress' => 'admin@beispiel.de',
];

// CSR erstellen
$csr = openssl_csr_new($dn, $privateKey);

// Subjekt des CSR auslesen (Kurzbezeichnungen)
$subject = openssl_csr_get_subject($csr, true);

if ($subject !== false) {
    foreach ($subject as $key => $value) {
        echo $key . ': ' . $value . PHP_EOL;
    }
} else {
    echo 'Fehler beim Lesen des CSR-Subjekts.';
}
C: DE ST: Bayern L: München O: Muster GmbH OU: IT-Abteilung CN: www.beispiel.de emailAddress: admin@beispiel.de

Subjekt mit vollständigen Bezeichnungen und PEM-String

<?php
// PEM-kodierten CSR aus einer Datei lesen
$pemCsr = file_get_contents('/etc/ssl/requests/mein-server.csr');

if ($pemCsr === false) {
    die('CSR-Datei konnte nicht gelesen werden.');
}

// Subjekt mit langen Feldbezeichnungen auslesen
$subject = openssl_csr_get_subject($pemCsr, false);

if ($subject !== false) {
    echo 'Common Name:       ' . ($subject['commonName']       ?? 'n/a') . PHP_EOL;
    echo 'Organization:      ' . ($subject['organizationName'] ?? 'n/a') . PHP_EOL;
    echo 'Country:           ' . ($subject['countryName']      ?? 'n/a') . PHP_EOL;
} else {
    echo 'Ungültiger CSR.';
}

// Wichtig · Fallstricke

Sicherheitshinweis: Vertrauen Sie dem Inhalt eines CSR nie blind. Die im Subjekt enthaltenen Informationen werden vom Antragsteller selbst angegeben und müssen von der ausstellenden CA sorgfältig geprüft werden, bevor ein Zertifikat ausgestellt wird.

Ab PHP 8.0 liefert openssl_csr_new() ein OpenSSLCertificateSigningRequest-Objekt zurück; in älteren PHP-Versionen war es eine Ressource. Beide Typen werden von openssl_csr_get_subject() akzeptiert.

Wenn das CSR aus einer Datei geladen werden soll, muss dem Dateipfad das Präfix file:// vorangestellt werden, z. B. file:///etc/ssl/requests/mein.csr.