OPENSSL问题,使用fsockopen()函数提示错误

简介: 环境配置系统环境 CentOS7.2WDCP v3.2.2 lanmpPHP 多版本 指定使用5.6OpenSSL 1.0.2h  3 May 2016php.ini相关设置allow_url_fopen = Onallow_url_include = Onopenssl.

环境配置

系统环境 CentOS7.2
WDCP v3.2.2 lanmp

PHP 多版本 指定使用5.6

OpenSSL 1.0.2h  3 May 2016

php.ini相关设置
allow_url_fopen = On
allow_url_include = On
openssl.cafile= /www/wdlinux/nginx/conf/cert/cacert.pem  (后来下载OPENSSL证书放上的)

问题描述

PHP程序中使用

  1. $matches = parse_url($url);
  2. $host = $matches['host'];
  3. $path = $matches['path'] ? $matches['path'].($matches['query'] ? '?'.$matches['query'] : '') : '/';
  4.         $transports = '';
  5.         if($matches['scheme'] == 'https') { //判断是否使用HTTPS
  6.             $transports = 'ssl://';  //如使用HTTPS则使用SSL协议
  7.             $port = !empty($matches['port']) ? $matches['port'] : 443; //如使用HTTPS端口使用443
  8.         } else {
  9.             $transports = 'tcp://'; //如没有使用HTTPS则使用tcp协议
  10.             $port = !empty($matches['port']) ? $matches['port'] : 80;//如没有使用HTTPS则使用80端口
  11.         }
  12. $fp = @fsockopen(($transports . $host), $port, $errno, $errstr, $timeout);
复制代码



其中此PHP文件运行无效果,生成error_log信息如下

  1. <?php exit;?>05-12 20:40:12 | 2 | fsockopen(): SSL operation failed with code 1. OpenSSL Error messages:
  2. error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed | ../client.class.php | 395
  3. <?php exit;?>05-12 20:40:12 | 2 | fsockopen(): Failed to enable crypto | ../client.class.php | 395
  4. <?php exit;?>05-12 20:40:12 | 2 | fsockopen(): unable to connect to ssl://www.xxx.net:443 (Unknown error) | p../client.class.php | 395
复制代码




395行就是以上代码中的 $fp = @fsockopen(($transports . $host), $port, $errno, $errstr, $timeout);

百度很多资料,没找到相关PHP报错的资料,找到一些E文网站,大约是说没有下载openssl根证书,于是更具资料提示下载OpenSSL根证书,并在php.ini设置OPENSSL证书位置,还是不能正常运行,报以上错误,估计是OPENSSL环境配置的问题,请admin指点

 

我百度了一些错误关键词
OpenSSL Error messages:error:14090086
SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed 
Failed to enable crypto
好像都是说关于openssl根证书的问题,大神能帮看下如何解决吗

 

经过三天的摸索和查找资料,现在我已确定问题所在
此问题和wdcp无关,和php版本以及openssl相关

主要是因为php在5.6版本(包含5.6)以后的所有版本中如使用fsockopen() 或file_get_content()函数获取https站点的信息,OPENSSL会验证对方站点的SSL证书颁发机构是否可信,如果没有下载openssl根证书并在php.ini中设置openssl根证书路径,就会造成无法验证对方网站SSL证书是否可信,就无法使用上述两个函数获取到内容同时生成PHP警告信息,php5.6以前的老版本中此验证功能是没有开启或者说是没有作用的。所以php5.6以前的版本不存在此问题!
OpenSSL Error messages:error:14090086
SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed 
Failed to enable crypto

特在此说明原因,同时希望我这两天的折腾对以后遇到同样问题的朋友有所帮助少走弯路

 

如何联系我:【万里虎】www.bravetiger.cn 【QQ】3396726884 (咨询问题100元起,帮助解决问题500元起) 【博客】http://www.cnblogs.com/kenshinobiy/
目录
相关文章
|
网络安全 Python
python request SSL error 403证书错误
python request SSL error 403证书错误
131 0
|
安全 网络安全
Foxmail邮箱提示错误:ssl连接错误,errorCode:5解决方法
Foxmail邮箱提示错误:ssl连接错误,errorCode:5解决方法
2413 0
|
缓存 Shell 网络安全
Github-推送代码报错“error:RPC failed;curl 56 OpenSSL SSL_read: SSL_ERROR_SYSCALL,errno 10054”解决方案
Github-推送代码报错“error:RPC failed;curl 56 OpenSSL SSL_read: SSL_ERROR_SYSCALL,errno 10054”解决方案
475 0
|
安全 JavaScript 网络安全
错误:写入 EPROTO 3928:错误:1408F10B:SSL 例程:ssl3_get_record:错误版本号:c:\ws\deps\openssl\openssl\ssl\record\ssl3_record.c:332 #71
错误:写入 EPROTO 3928:错误:1408F10B:SSL 例程:ssl3_get_record:错误版本号:c:\ws\deps\openssl\openssl\ssl\record\ssl3_record.c:332 #71
364 0
|
Linux
解决Kubuntu下登录vscode时报错:将登录信息写入密钥链失败,出现错误 “GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown
解决Kubuntu下登录vscode时报错:将登录信息写入密钥链失败,出现错误 “GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown
792 0
gpg: verify signatures failed: 文件打开错误
gpg: verify signatures failed: 文件打开错误
119 0
|
Ubuntu 网络安全 PHP
安装vagrant报错OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 54
安装vagrant报错OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 541、报错详情 安装vagrant,在运行vagrant up时,报错
366 0
|
NoSQL MongoDB
安装mongodb 报错 curl: (56) LibreSSL SSL_read: SSL_ERROR_SYSCALL, errno 54解决办法
安装mongodb 报错 curl: (56) LibreSSL SSL_read: SSL_ERROR_SYSCALL, errno 54解决办法
342 0
|
PHP API 网络安全
php中curl返回false的解决办法
本文介绍一下自己在使用curl中遇到的问题解决办法。希望可以帮助到大家。 原文地址:代码汇个人博客 http://www.codehui.net/info/37.html 首先来看一个封装的curl函数 function request_post($url = '', $param = '').
2467 0