Hallo zusammen,
Ich habe ein Webhosting und habe ein Problem mit der SSL-Zertifikatsprüfung in PHP. Beim Abrufen einer JSON-API über HTTPS mit file_get_contents() (und auch mit curl) bekomme ich einen Fehler. Mein Code:
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
if (($content = file_get_contents("https://wasserstand-nordsee.bsh.de/data/DE__508P.json")) === false) {
print("Error!");
} else {
print($content);
}
Die Fehlermeldung(en):
ZitatWarning: file_get_contents(): SSL operation failed with code 1. OpenSSL Error messages:
error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed in /var/www/vhosts/hosting161995.a2f0c.netcup.net/httpdocs/rcsefa/jp.php on line 5
Warning: file_get_contents(): Failed to enable crypto in /var/www/vhosts/hosting161995.a2f0c.netcup.net/httpdocs/rcsefa/jp.php on line 5
Warning: file_get_contents(https://wasserstand-nordsee.bsh.de/data/DE__508P.json): Failed to open stream: operation failed in /var/www/vhosts/hosting161995.a2f0c.netcup.net/httpdocs/rcsefa/jp.php on line 5
Meine Recherche zu dem Fehler ergab, dass ich mir das cafile und den capath anschauen soll. Dies zeigt bei mir (über phpinfo()):
Zitatopenssl.cafile => no value
openssl.capath => no value
Weitere Recherchen ergaben dass ich mir ein pem-File herunterladen, auf dem Server ablegen und in die PHP einbinden soll. Dies habe ich bisher noch nie machen müssen und bin mir daher sehr unsicher, ob das wirklich der richtige Weg ist.
Daher meine Fragen:
Muss ich wirklich manuell ein cacert.pem einbinden?
Oder liegt hier evtl. ein Konfigurationsfehler auf Serverseite vor?
Mir ist bewusst, dass man testweise verify_peer deaktivieren oder per CURLOPT_CAINFO ein eigenes Bundle angeben kann – aber das sollte meiner Meinung nach nicht nötig sein, wenn die Hostingumgebung korrekt vorkonfiguriert ist.
Hat jemand ähnliche Erfahrungen gemacht oder weiß, ob es hier eine zentrale Lösung gibt?
Schöne Grüße
Julian