Effectuer des requêtes via PHP vers un serveur HTTPS non certifié
Suite à mon article sur l'envoi des données JSON en POST avec PHP, j'ai reçu un e-mail d'un lecteur souhaitant mettre en place ce code sur son serveur local. Détail intéressant, le serveur local tourne en HTTPS, ce qui est une bonne chose, cependant il ne dispose pas de certificat, ce qui est tout à faire normal pour un serveur local.
Et dans ce cas, la fonction file_get_contents renvoit une erreur
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...
Il est donc nécessaire de compléter les options de contexte afin d'indiquer que SSL ne doit pas vérifier le certificat. Le protocole SSL dispose de ses propres paramètres dans une section dédiée
$options = array(
'http' => array(
'method' => 'POST',
'header' => "Content-Type: application/json",
'ignore_errors' => true,
'timeout' => 10,
'content' => json_encode($data),
),
'ssl' => array(
"verify_peer"=>false,
"verify_peer_name"=>false,
),
);
Les options de contexte pour SSL sont nombreuses et vous permettront d'adapter au mieux la sécurité associée à vos requêtes. La liste est disponible sur cette page du manuel PHP.