SSL operation failed with code 1. OpenSSL Error messages: error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed

使用file_get_contents()、imagecreatefrompng错误信息如下:

file_get_contents(): SSL operation failed with code 1. OpenSSL Error messages:error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed

方案一:

$arrContextOptions=array(
    "ssl"=>array(
        "verify_peer"=>false,
        "verify_peer_name"=>false,
     ),
);  
$img = file_get_contents($img, false, stream_context_create($arrContextOptions));

方案二:

找到密钥文件的位置

php -r "print_r(openssl_get_cert_locations());"

返回内容如下:

Array
(
[default_cert_file] => /usr/local/ssl/cert.pem
[default_cert_file_env] => SSL_CERT_FILE
[default_cert_dir] => /usr/local/ssl/certs
[default_cert_dir_env] => SSL_CERT_DIR
[default_private_dir] => /usr/local/ssl/private
[default_default_cert_area] => /usr/local/ssl
[ini_cafile] =>
[ini_capath] =>
)
  • 如果 /usr/local/ssl/cert.pem 存在,修改php.ini,重启PHP
openssl.cafile=/usr/local/ssl/cert.pem
  • 如果 /usr/local/ssl/cert.pem 不存在,查找服务器 cert.pem 的路径:
find / -name cert.pem

返回内容如下:

/etc/pki/tls/cert.pem

修改php.ini,重启PHP

openssl.cafile=/etc/pki/tls/cert.pem

如果服务器上根本没有这个pem文件,于是下载证书放进去,完美解决。