Start · Sprachen · PHP · Referenz · openssl_get_cert_locations

openssl_get_cert_locations

Funktion

Gibt ein assoziatives Array mit den verfügbaren OpenSSL-Zertifikatspfaden und -verzeichnissen zurück.

seit PHP 5.6.0 Kategorie: crypto

Signatur

openssl_get_cert_locations(): array

Beschreibung

openssl_get_cert_locations() liefert ein assoziatives Array mit Informationen darüber, wo OpenSSL auf dem aktuellen System nach Zertifikatsdateien und Verzeichnissen sucht. Dies umfasst den Standardpfad zur CA-Bundle-Datei, das CA-Verzeichnis sowie ggf. durch Umgebungsvariablen oder INI-Einstellungen überschriebene Pfade.

Die Funktion ist besonders nützlich beim Debuggen von TLS/SSL-Verbindungsproblemen, wenn z. B. Zertifikatsketten nicht gefunden werden oder HTTPS-Anfragen mit Fehlermeldungen wie "certificate verify failed" scheitern. Mit ihrer Hilfe lässt sich schnell überprüfen, welche Zertifikatspfade PHP und OpenSSL tatsächlich verwenden.

Typische Schlüssel im zurückgegebenen Array sind default_cert_file, default_cert_file_env, default_cert_dir, default_cert_dir_env, default_private_dir, default_default_cert_area und ini_cafile sowie ini_capath, wobei letztere die in php.ini konfigurierten Werte widerspiegeln.

Die Funktion benötigt keine Parameter und eignet sich gut für Diagnose-Skripte, mit denen man die OpenSSL-Konfiguration eines Servers dokumentiert oder überprüft.

Rückgabewert

Typ
array
Beschreibung
Gibt ein assoziatives Array zurück, das die verfügbaren Zertifikatspfade und -verzeichnisse enthält. Schlüssel sind unter anderem default_cert_file, default_cert_dir, ini_cafile und ini_capath.

Beispiele

Zertifikatspfade ausgeben

<?php
$locations = openssl_get_cert_locations();
foreach ($locations as $key => $value) {
    echo $key . ': ' . (empty($value) ? '(nicht gesetzt)' : $value) . PHP_EOL;
}
default_cert_file: /etc/ssl/cert.pem default_cert_file_env: SSL_CERT_FILE default_cert_dir: /etc/ssl/certs default_cert_dir_env: SSL_CERT_DIR default_private_dir: /etc/ssl/private default_default_cert_area: /etc/ssl ini_cafile: (nicht gesetzt) ini_capath: (nicht gesetzt)

Diagnose bei SSL-Verbindungsproblemen

<?php
// Schnelle Diagnose: Welche CA-Datei verwendet PHP/OpenSSL?
$locations = openssl_get_cert_locations();

$caFile = $locations['ini_cafile'] ?: $locations['default_cert_file'];

if (!empty($caFile) && file_exists($caFile)) {
    echo 'CA-Bundle gefunden: ' . $caFile . PHP_EOL;
    echo 'Dateigröße: ' . filesize($caFile) . ' Bytes' . PHP_EOL;
} else {
    echo 'Warnung: Kein gültiges CA-Bundle gefunden!' . PHP_EOL;
    echo 'Erwarteter Pfad: ' . ($caFile ?: '(unbekannt)') . PHP_EOL;
}
CA-Bundle gefunden: /etc/ssl/cert.pem Dateigröße: 214513 Bytes

// Wichtig · Fallstricke

Hinweis zu Umgebungsvariablen: Die Schlüssel default_cert_file_env und default_cert_dir_env geben die Namen der Umgebungsvariablen an (z. B. SSL_CERT_FILE), mit denen die Standardpfade überschrieben werden können – sie enthalten nicht den aktuell gesetzten Wert dieser Variablen.

PHP-INI-Einstellungen: Die Schlüssel ini_cafile und ini_capath spiegeln die Werte der PHP-INI-Direktiven openssl.cafile bzw. openssl.capath wider. Diese haben Vorrang vor den OpenSSL-Standardpfaden und sollten bei der Fehlersuche zuerst geprüft werden.

Die Funktion erfordert, dass die OpenSSL-Extension aktiviert ist (extension=openssl). Ist dies nicht der Fall, führt der Aufruf zu einem schwerwiegenden Fehler.