Aller au contenu
ecdsa.com
PHP streams (file_get_contents, fopen, stream_socket_client, SoapClient, mail libraries)PHP

Message d’erreur

SSL operation failed with code 1. OpenSSL Error messages:

Également affiché sous la forme

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

PHP affiche l’avertissement sur deux lignes : « SSL operation failed with code 1. OpenSSL Error messages: », suivi de la ou des erreurs OpenSSL. Les builds liés à OpenSSL 1.1.1 affichent à la place « 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

Ce que cela signifie

Un flux PHP (file_get_contents, fopen, SoapClient, stream_socket_client et les bibliothèques de messagerie ou FTP qui reposent sur eux) a échoué lors de son handshake TLS. Le code 1 correspond à l’erreur SSL_ERROR_SSL d’OpenSSL ; la raison réelle figure sur la ligne suivante, le plus souvent « error:0A000086:SSL routines::certificate verify failed ». PHP ajoute ensuite « Failed to enable crypto » et « Failed to open stream: operation failed », qui sont des conséquences, pas des causes.

Pourquoi cela se produit

Comment corriger l’erreur

  1. 1.

    Lire la ligne OpenSSL qui suit

    « certificate verify failed » oriente vers un problème de confiance ou de dates ; les erreurs de protocole orientent vers la configuration TLS du serveur.

    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.

    Définir openssl.cafile

    Les flux PHP utilisent openssl.cafile (ou openssl.capath) ; ext-curl utilise curl.cainfo, définissez donc les deux.

    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.

    Transmettre une AC pour une seule requête

    Un contexte de flux avec ssl.cafile fait confiance à une AC privée sans affaiblir la vérification pour le reste.

    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);

Erreurs associées

Parcourir toute la base de données des erreurs de signature