Start · Sprachen · PHP · Referenz · openssl_x509_export_to_file

openssl_x509_export_to_file

Funktion

Exportiert ein X.509-Zertifikat im PEM-Format in eine Datei.

seit PHP 4.2.0 Kategorie: crypto

Signatur

openssl_x509_export_to_file(OpenSSLCertificate|string $certificate, string $output_filename, bool $no_text = true): bool

Beschreibung

openssl_x509_export_to_file() schreibt ein X.509-Zertifikat als PEM-kodierte Zeichenkette in eine Datei auf dem Dateisystem. Dies ist nützlich, um erhaltene oder erzeugte Zertifikate dauerhaft zu speichern, z. B. für TLS-Konfigurationen, Client-Zertifikate oder Zertifikatsketten.

Der Parameter $certificate akzeptiert seit PHP 8.0 ein OpenSSLCertificate-Objekt (zuvor eine Ressource) oder einen PEM-kodierten String sowie einen Dateipfad im Format file://pfad/zum/zertifikat.pem. Die Zieldatei wird durch $output_filename angegeben und wird bei Erfolg angelegt oder überschrieben.

Mit dem optionalen Parameter $no_text kann gesteuert werden, ob dem PEM-Block zusätzlich eine menschenlesbare Klartextdarstellung des Zertifikatsinhalts vorangestellt wird. Standardmäßig ist diese Darstellung deaktiviert (true = kein Text).

Zum Exportieren in eine Variable statt in eine Datei kann alternativ openssl_x509_export() genutzt werden.

Parameter

Name Typ Default Beschreibung
$certificate Pflicht OpenSSLCertificate|string Das zu exportierende X.509-Zertifikat als OpenSSLCertificate-Objekt (PHP >= 8.0), OpenSSL-Ressource (PHP < 8.0), PEM-kodierter String oder Dateipfad im Format file://....
$output_filename Pflicht string Pfad zur Zieldatei, in die das PEM-kodierte Zertifikat geschrieben werden soll. Die Datei wird erstellt oder überschrieben.
$no_text bool true Wenn false, wird dem PEM-Block eine menschenlesbare Klartextdarstellung des Zertifikats vorangestellt. Standardmäßig true (kein Klartext).

Rückgabewert

Typ
bool
Beschreibung
Gibt true bei Erfolg zurück, oder false, wenn das Zertifikat nicht geparst werden konnte oder die Datei nicht geschrieben werden konnte.

Beispiele

Selbstsigniertes Zertifikat erzeugen und in Datei speichern

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

// CSR erzeugen
$csr = openssl_csr_new(
    ['commonName' => 'example.com'],
    $privateKey
);

// Selbstsigniertes Zertifikat ausstellen (gültig 365 Tage)
$cert = openssl_csr_sign($csr, null, $privateKey, 365);

// Zertifikat in Datei exportieren
$result = openssl_x509_export_to_file($cert, '/tmp/example.crt');

if ($result) {
    echo "Zertifikat erfolgreich gespeichert.\n";
} else {
    echo "Fehler beim Speichern des Zertifikats.\n";
}
Zertifikat erfolgreich gespeichert.

Vorhandenes PEM-Zertifikat in neue Datei kopieren (mit Klartextausgabe)

<?php
// PEM-Zertifikat aus vorhandener Datei laden
$cert = openssl_x509_read(file_get_contents('/etc/ssl/certs/example.pem'));

if ($cert === false) {
    die('Zertifikat konnte nicht gelesen werden.');
}

// Mit menschenlesbarem Klartext-Header exportieren
$result = openssl_x509_export_to_file($cert, '/tmp/example_with_text.crt', false);

if ($result) {
    echo "Zertifikat (mit Klartext) wurde gespeichert.\n";
    echo file_get_contents('/tmp/example_with_text.crt');
} else {
    echo "Export fehlgeschlagen.\n";
}

// Wichtig · Fallstricke

Dateisystemberechtigungen: Stellen Sie sicher, dass der PHP-Prozess Schreibrechte auf das Zielverzeichnis besitzt. Andernfalls schlägt der Export lautlos fehl (Rückgabewert false).

Sicherheit: Exportieren Sie niemals den privaten Schlüssel zusammen mit dem Zertifikat in dieselbe Datei, sofern dies nicht ausdrücklich erforderlich ist. Setzen Sie restriktive Dateisystemberechtigungen für alle gespeicherten Zertifikatsdateien (z. B. 0644 oder restriktiver).

PHP 8.0: Der Typ des $certificate-Parameters wurde von einer OpenSSL-Ressource auf OpenSSLCertificate-Objekte umgestellt. Ressourcen werden aus Kompatibilitätsgründen noch akzeptiert, gelten aber als veraltet.