PHPSocket编程之fsockopen链接https时OpenSSL错误fsockopen()函数链接https时提⽰OpenSSL错误,如下:
1. fsockopen(): SSL operation failed with code 1. OpenSSL Error messages:
2. error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
OpenSSL Error messages:error:14090086
SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
Failed to enable crypto
此问题和php版本以及openssl相关
⼀般是openssl根证书的问题
php.ini相关设置
allow_url_fopen = On
allow_url_include = On
openssl.cafile= /www/wdlinux/nginx/conf/cert/cacert.pem  (后来下载OPENSSL证书放上的)
主要是因为php在5.6版本(包含5.6)以后的所有版本中如使⽤fsockopen() 或file_get_content()函数获取https站点的信息,OPENSSL会验证对⽅站点的SSL证书颁发机构是否可信,如果没有下载openssl根证书并在php.ini中设置openssl根证书路径,就会造成⽆法验证对⽅⽹站SSL证书是否可信,就⽆法使⽤上述两个函数获取到内容同时⽣成PHP警告信息,php5.6以前的⽼版本中此验证功能是没有开启或者说是没有作⽤的。所以php5.6以前的版本不存在此问题!
————————————————
环境
OS:Windows
PHP Version:5.6.31
问题
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
file_get_contents(): Failed to enable crypto
解决⽅法
从这⼉下载 curl.haxx.se/ca/cacert.pem 存储为
打开 php.ini 到⾥⾯的 curl.cainfo 和 openssl.cafile(2个 section 挨着的)
修改 curl.cainfo=”c:\”
修改 openssl.cafile=”c:\path\”
重启 IIS 服务(别忘记了)
————————————————blog.csdn/enlangs/article/details/78988673
*⽤openssl_get_cert_locations() 函数列出 openssl证书的信息
1. 查看证书信息,随便写⼀个php页⾯运⾏
<?php echo '<pre>';
print_r(openssl_get_cert_locations());
显⽰:
Array
(
[default_cert_file] => /apache24/conf/cert.pem
[default_cert_file_env] => SSL_CERT_FILE
[default_cert_dir] => /apache24/conf/certs
[default_cert_dir_env] => SSL_CERT_DIR
编程php语言[default_private_dir] => /apache24/conf/private
[default_default_cert_area] => /apache24/conf
[ini_cafile] =>
[ini_capath] =>
)
第⼀个default_cert_file根据你⾃⼰的位置查,肯定不到这个cert.pem⽂件
2. 下载pem⽂件
curl.haxx.se/docs/caextract.html
到上⼀部显⽰的位置,重命名为  cert.pem
3. 修改php.ini,根据你⾃⼰的系统变⼀下路径
curl.cainfo = "E:/Program Files/apache24/conf/cert.pem" openssl.cafile = "E:/Program Files/apache24/conf/cert.pem"重启

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。