OPENSSL问题,使用fsockopen()函数提示错误
2017-08-27 22:19
741 查看
环境配置
系统环境 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程序中使用
$matches = parse_url($url);
$host = $matches['host'];
$path = $matches['path'] ? $matches['path'].($matches['query'] ? '?'.$matches['query'] : '') : '/';
$transports = '';
if($matches['scheme'] == 'https') { //判断是否使用HTTPS
$transports = 'ssl://'; //如使用HTTPS则使用SSL协议
$port = !empty($matches['port']) ? $matches['port'] : 443; //如使用HTTPS端口使用443
} else {
$transports = 'tcp://'; //如没有使用HTTPS则使用tcp协议
$port = !empty($matches['port']) ? $matches['port'] : 80;//如没有使用HTTPS则使用80端口
}
$fp = @fsockopen(($transports . $host), $port, $errno, $errstr, $timeout);
复制代码
其中此PHP文件运行无效果,生成error_log信息如下
<?php exit;?>05-12 20:40:12 | 2 | fsockopen(): SSL operation failed with code 1. OpenSSL Error messages:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed | ../client.class.php | 395
<?php exit;?>05-12 20:40:12 | 2 | fsockopen(): Failed to enable crypto | ../client.class.php | 395
<?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
特在此说明原因,同时希望我这两天的折腾对以后遇到同样问题的朋友有所帮助少走弯路
系统环境 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程序中使用
$matches = parse_url($url);
$host = $matches['host'];
$path = $matches['path'] ? $matches['path'].($matches['query'] ? '?'.$matches['query'] : '') : '/';
$transports = '';
if($matches['scheme'] == 'https') { //判断是否使用HTTPS
$transports = 'ssl://'; //如使用HTTPS则使用SSL协议
$port = !empty($matches['port']) ? $matches['port'] : 443; //如使用HTTPS端口使用443
} else {
$transports = 'tcp://'; //如没有使用HTTPS则使用tcp协议
$port = !empty($matches['port']) ? $matches['port'] : 80;//如没有使用HTTPS则使用80端口
}
$fp = @fsockopen(($transports . $host), $port, $errno, $errstr, $timeout);
复制代码
其中此PHP文件运行无效果,生成error_log信息如下
<?php exit;?>05-12 20:40:12 | 2 | fsockopen(): SSL operation failed with code 1. OpenSSL Error messages:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed | ../client.class.php | 395
<?php exit;?>05-12 20:40:12 | 2 | fsockopen(): Failed to enable crypto | ../client.class.php | 395
<?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
特在此说明原因,同时希望我这两天的折腾对以后遇到同样问题的朋友有所帮助少走弯路
相关文章推荐
- java工程项目里,在一个包里面,不能出现同名的类名,这问题是刚接触java才会遇到的,特别是新手一般都没有建立包,而是使用默认的,易出现同名的类名,导致eclipse提示错误
- 问题分享:最近测试VDI-in-a-Box使用AD做身份验证出现以下错误提示:
- 关于使用equals()函数报 空指针 的错误问题
- suse10下nodejs安装时提示openssl not found的问题解决办法 1、首先确认openssl有没有安装,使用命令 openssl version 2、明明已经安装了openssl
- j解决sparkr中使用某些r的原生函数 发生错误Error: class(objId) == "jobj" is not TRUE的问题
- IntelliJ IDEA 使用Javadoc工具生成注释文档时提示错误和乱码问题
- java工程项目里,在一个包里面,不能出现同名的类名,这问题是刚接触java才会遇到的,特别是新手一般都没有建立包,而是使用默认的,易出现同名的类名,导致eclipse提示错误
- [置顶] 使用java命令运行class文件提示“错误:找不到或无法加载主类“的问题分析
- 使用java命令运行class文件提示“错误:找不到或无法加载主类“的问题分析
- 使用java命令运行class文件提示“错误:找不到或无法加载主类“的问题分析
- STM32F103使用SWD烧写错误提示的问题
- ACCESS数据库在IIS中的问题 错误提示"操作必须使用一个可更新的查询"
- 使用java命令运行class文件提示“错误:找不到或无法加载主类“的问题分析
- 错误:虚拟机打不开提示VMware“该虚拟机似乎正在使用中”问题
- Android NDK使用addr2line符号化得到错误函数名的问题
- c++调用python函数时,使用PyArray_SimpleNewFromData(nd, dims, typenum, data)函数时出现内存错误的问题
- zookeeper使用命令zkServer.sh status时出现错误提示问题
- 使用Ajax.net遇到的问题-使用会话时提示错误"只有在配置文件或 Page 指令中将启用会话状态设置为真时,才可以使用会话状态
- java工程项目里,在一个包里面,不能出现同名的类名,这问题是刚接触java才会遇到的,特别是新手一般都没有建立包,而是使用默认的,易出现同名的类名,导致eclipse提示错误
- C# 调用JAVA(使用axis)开发的webservice 提示错误的问题