SSL-Zertifikatsprüfung schlägt fehl (file_get_contents / cURL) – fehlt cacert.pem bei Webhosting?

  • 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:

    PHP
    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):

    Zitat

    Warning: 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()):

    Zitat

    openssl.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

  • https://www.ssllabs.com/ssltest/analyze.html?d=wasserstand-nordsee.bsh.de&hideResults=on

    Das Bundesamt fuer Seeschiffahrt und Hydrographie hat auf dem Server, von dem du Daten laden möchtest, eine unvollständige Zertifikatskette hinterlegt. Dadurch kann dein Client nicht prüfen, ob das Serverzertifikat gültig ist. Es ist eine Lücke zwischen den CA-Zertifikaten, die in deinem Client sind, und dem Serverzertifikat, das der Server verwendet: Es fehlt das "GEANT TLS RSA 1" Zertifikat zwischen dem Server und der "HARICA TLS RSA Root CA 2021" Root CA.

    Wenn du trotzdem an die Daten kommen möchtest, kannst du deinem Client das fehlende Zertifikat zusätzlich zu den CA-Zertifikaten geben, um die Lücke zu schließen.

    Eigentlich sollte aber das Bundesamt diesen Konfigurationsfehler korrigieren.

    Einmal editiert, zuletzt von NaN (22. April 2025 um 10:45)