Zum Inhalt springen
ecdsa.com
PHP streams (file_get_contents, fopen, stream_socket_client, SoapClient, mail libraries)PHP

Fehlermeldung

SSL operation failed with code 1. OpenSSL Error messages:

Auch ausgegeben als

  • Warning: file_get_contents(): SSL operation failed with code 1. OpenSSL Error messages:

PHP gibt die Warnung auf zwei Zeilen aus: „SSL operation failed with code 1. OpenSSL Error messages:“, gefolgt von einer oder mehreren OpenSSL-Fehlermeldungen. Builds mit OpenSSL 1.1.1 zeigen stattdessen „error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed“.

PHP streams (file_get_contents, fopen, stream_socket_client, SoapClient, mail libraries) — openssl stream wrapper

Was der Fehler bedeutet

Bei einem PHP-Stream (file_get_contents, fopen, SoapClient, stream_socket_client und den darauf aufbauenden Mail- oder FTP-Bibliotheken) ist der TLS-Handshake gescheitert. Code 1 ist der Fehlercode SSL_ERROR_SSL von OpenSSL; der eigentliche Grund steht in der nächsten Zeile, meist „error:0A000086:SSL routines::certificate verify failed“. PHP ergänzt danach „Failed to enable crypto“ und „Failed to open stream: operation failed“ – das sind Folgen, keine Ursachen.

Warum der Fehler auftritt

So behebst du den Fehler

  1. 1.

    Die folgende OpenSSL-Zeile lesen

    „certificate verify failed“ deutet auf ein Problem mit dem Vertrauen oder mit dem Gültigkeitszeitraum hin; Protokollfehler weisen auf die TLS-Konfiguration des Servers hin.

    text
    Warning: file_get_contents(): SSL operation failed with code 1. OpenSSL Error messages:
    error:0A000086:SSL routines::certificate verify failed      <- trust/chain/date problem
    Warning: file_get_contents(): Failed to enable crypto       <- consequence, not the cause
  2. 2.

    openssl.cafile setzen

    PHP-Streams verwenden openssl.cafile (oder openssl.capath), ext-curl dagegen curl.cainfo – setze deshalb beide.

    ini
    ; php.ini — CA bundle for PHP streams (file_get_contents, SoapClient, stream_socket_client)
    openssl.cafile = "/etc/ssl/certs/ca-certificates.crt"
  3. 3.

    CA für eine einzelne Anfrage übergeben

    Ein Stream-Kontext mit ssl.cafile vertraut einer privaten CA, ohne die Prüfung für alles andere abzuschwächen.

    php
    // One request with a private CA; verification stays on
    $context = stream_context_create(['ssl' => [
        'cafile' => '/etc/ssl/private-ca/corp-root-ca.pem',
        'verify_peer' => true,
        'verify_peer_name' => true,
    ]]);
    $body = file_get_contents('https://api.example.com/', false, $context);

Verwandte Fehler

Gesamte Signaturfehler-Datenbank durchsuchen