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
PHP vertraut der CA des Servers nicht
häufigEine private CA oder Proxy-CA – oder ein Server, der sein Zwischenzertifikat weglässt.
PHP-Streams haben kein brauchbares CA-Bundle
häufigopenssl.cafile ist auf Systemen nicht gesetzt, auf denen der Standardpfad von OpenSSL kein Bundle enthält (Windows, minimale Images).
Ein Protokoll- oder Cipher-Fehler
gelegentlichSteht in der zweiten Zeile ein anderer Grund („unsupported protocol“, „alert handshake failure“), haben Server und PHP keine gemeinsame TLS-Version oder keine gemeinsame Cipher Suite.
So behebst du den Fehler
- 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.
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.
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);