On a déjà répondu à des questions similaires, mais je n'ai pas réussi à résoudre ce cas particulier.
Sur une machine PHP 5.6+, lorsque j'essaie d'utiliser fsockopen sur un domaine particulier, je reçois ce qui suit (ce n'est pas le vrai domaine) :
$ php -r "var_dump(fsockopen(\"ssl://www.domain.net\", 9085, \$errnum, \$errstr, 5));"
PHP Warning: fsockopen(): Failed to enable crypto in Command line code on line 1
PHP Warning: fsockopen(): unable to connect to ssl://www.domain.net:9085 (Unknown error) in Command line code on line 1
bool(false)
Cela fonctionne bien sous PHP 5.5, ce qui indique que c'est dû au changement dans la version 5.6 concernant la façon dont fsockopen vérifie les certificats ssl.
D'autres connexions peuvent être effectuées sans problème :
$ php -r "var_dump(fsockopen(\"ssl://www.google.com\", 443, \$errnum, \$errstr, 5));"
resource(4) of type (stream)
Sur la base d'autres suggestions, j'ai vérifié le fichier cert par défaut.
$ php -r "print_r(openssl_get_cert_locations());"
Array
(
[default_cert_file] => /usr/lib/ssl/cert.pem
[default_cert_file_env] => SSL_CERT_FILE
[default_cert_dir] => /usr/lib/ssl/certs
[default_cert_dir_env] => SSL_CERT_DIR
[default_private_dir] => /usr/lib/ssl/private
[default_default_cert_area] => /usr/lib/ssl
[ini_cafile] =>
[ini_capath] =>
)
Le dossier /usr/lib/ssl/cert.pem
manquait à l'origine, j'ai téléchargé le paquet ca depuis curl et l'ai renommé pour qu'il corresponde. Toujours pas de chance.
Je ne reçois aucune information supplémentaire indiquant que la vérification du certificat a échoué. Existe-t-il d'autres moyens de déboguer ce problème ?