Signatur
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
$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.';
}
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.