Start · Sprachen · PHP · Referenz · openssl_csr_export_to_file

openssl_csr_export_to_file

Funktion

Exportiert einen Certificate Signing Request (CSR) in eine PEM-kodierte Datei.

seit PHP 4.2.0 Kategorie: crypto

Signatur

openssl_csr_export_to_file(OpenSSLCertificateSigningRequest|string $csr, string $output_filename, bool $no_text = true): bool

Beschreibung

openssl_csr_export_to_file() schreibt einen zuvor erstellten oder geladenen CSR (Certificate Signing Request) im PEM-Format in eine Datei auf dem Dateisystem. CSRs werden typischerweise erzeugt, um von einer Zertifizierungsstelle (CA) ein SSL/TLS-Zertifikat zu beantragen.

Der Parameter no_text steuert, ob dem PEM-Block eine lesbare Klartextdarstellung des CSR vorangestellt wird. Wenn er true (Standard) ist, enthält die Datei ausschließlich den PEM-kodierten Block; bei false wird zusätzlich die menschenlesbare Zusammenfassung (Subject, Public Key etc.) in die Datei geschrieben – praktisch für Debugging-Zwecke.

Im Vergleich zu openssl_csr_export(), das den CSR in eine Variable schreibt, eignet sich diese Funktion direkt für Szenarien, in denen der CSR persistent gespeichert oder zur Weitergabe an eine externe CA in eine Datei abgelegt werden soll.

Voraussetzung für die Nutzung ist, dass die OpenSSL-Erweiterung in PHP aktiviert ist. Der CSR kann entweder ein OpenSSLCertificateSigningRequest-Objekt (ab PHP 8.0) oder eine PEM-kodierte Zeichenkette sein.

Parameter

Name Typ Default Beschreibung
$csr Pflicht OpenSSLCertificateSigningRequest|string Der zu exportierende CSR als OpenSSLCertificateSigningRequest-Objekt (PHP >= 8.0) oder als PEM-kodierter String bzw. Pfad der Form file://pfad/zur/datei.pem.
$output_filename Pflicht string Pfad zur Zieldatei, in die der PEM-kodierte CSR geschrieben wird. Die Datei wird erstellt oder überschrieben.
$no_text bool true Wenn true (Standard), wird nur der reine PEM-Block exportiert. Wenn false, wird zusätzlich eine menschenlesbare Klartextdarstellung des CSR vorangestellt.

Rückgabewert

Typ
bool
Beschreibung
Gibt true zurück, wenn der Export erfolgreich war, andernfalls false. Im Fehlerfall (z. B. ungültiger CSR, nicht beschreibbarer Dateipfad) wird false zurückgegeben und es können OpenSSL-Fehlermeldungen über openssl_error_string() abgerufen werden.

Beispiele

CSR erzeugen und in Datei exportieren

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

// Distinguished Name (DN) für den CSR
$dn = [
    'countryName'            => 'DE',
    'stateOrProvinceName'    => 'Bayern',
    'localityName'           => 'München',
    'organizationName'       => 'Beispiel GmbH',
    'commonName'             => 'www.beispiel.de',
    'emailAddress'           => 'admin@beispiel.de',
];

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

if ($csr === false) {
    die('Fehler beim Erstellen des CSR: ' . openssl_error_string());
}

// CSR in Datei exportieren (nur PEM-Block)
$result = openssl_csr_export_to_file($csr, '/tmp/mein_csr.pem');

if ($result) {
    echo 'CSR erfolgreich in /tmp/mein_csr.pem gespeichert.' . PHP_EOL;
} else {
    echo 'Fehler beim Exportieren: ' . openssl_error_string() . PHP_EOL;
}
?>
CSR erfolgreich in /tmp/mein_csr.pem gespeichert.

CSR mit lesbarer Klartextdarstellung exportieren

<?php
$privateKey = openssl_pkey_new([
    'private_key_bits' => 2048,
    'private_key_type' => OPENSSL_KEYTYPE_RSA,
]);

$dn = [
    'countryName' => 'DE',
    'commonName'  => 'api.beispiel.de',
];

$csr = openssl_csr_new($dn, $privateKey);

// no_text = false → Klartextdarstellung wird vorangestellt
$result = openssl_csr_export_to_file($csr, '/tmp/csr_leserlich.pem', false);

if ($result) {
    echo 'CSR mit Klartextdarstellung exportiert:' . PHP_EOL;
    echo file_get_contents('/tmp/csr_leserlich.pem');
} else {
    echo 'Export fehlgeschlagen: ' . openssl_error_string();
}
?>
CSR mit Klartextdarstellung exportiert: Certificate Request: Data: Version: 1 (0x0) Subject: C=DE, CN=api.beispiel.de ... -----BEGIN CERTIFICATE REQUEST----- ... -----END CERTIFICATE REQUEST-----

// Wichtig · Fallstricke

Sicherheitshinweis: Stellen Sie sicher, dass das Zielverzeichnis und die erzeugte Datei nur für berechtigte Systemprozesse lesbar sind (z. B. Dateiberechtigungen 0600 oder 0640). Der CSR selbst ist zwar kein Geheimnis, aber der zugehörige private Schlüssel muss separat streng geschützt werden.

PHP 8.0: Ab PHP 8.0 wird der CSR-Typ als OpenSSLCertificateSigningRequest-Objekt zurückgegeben. In früheren Versionen war es eine resource. Die Funktion akzeptiert in beiden Fällen den jeweiligen Typ.

Fehlerbehandlung: Bei einem Fehler gibt die Funktion false zurück. Weitere Details können mit openssl_error_string() in einer Schleife ausgelesen werden, da OpenSSL mehrere Fehlermeldungen stapelt.