四虎影视在线影院在线观看,小s货再浪些再咬紧点h,国产精品水嫩水嫩,97精产国品一二三产区

Board logo

標題: [提問] OPENSSL問題,使用fsockopen()函數(shù)提示錯誤 [打印本頁]

作者: artrogue    時間: 2017-5-13 07:57     標題: OPENSSL問題,使用fsockopen()函數(shù)提示錯誤

本帖最后由 artrogue 于 2017-5-13 08:23 編輯

環(huán)境配置

系統(tǒng)環(huán)境 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協(xié)議

  7.             $port = !empty($matches['port']) ? $matches['port'] : 443; //如使用HTTPS端口使用443

  8.         } else {

  9.             $transports = 'tcp://'; //如沒有使用HTTPS則使用tcp協(xié)議

  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文網(wǎng)站,大約是說沒有下載openssl根證書,于是更具資料提示下載OpenSSL根證書,并在php.ini設置OPENSSL證書位置,還是不能正常運行,報以上錯誤,估計是OPENSSL環(huán)境配置的問題,請admin指點
作者: artrogue    時間: 2017-5-13 08:58

我百度了一些錯誤關鍵詞
OpenSSL Error messages:error:14090086
SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
Failed to enable crypto
好像都是說關于openssl根證書的問題,大神能幫看下如何解決嗎
作者: artrogue    時間: 2017-5-14 12:35

本帖最后由 artrogue 于 2017-5-14 12:36 編輯

經(jīng)過三天的摸索和查找資料,現(xiàn)在我已確定問題所在
此問題和wdcp無關,和php版本以及openssl相關

主要是因為php在5.6版本(包含5.6)以后的所有版本中如使用fsockopen() 或file_get_content()函數(shù)獲取https站點的信息,OPENSSL會驗證對方站點的SSL證書頒發(fā)機構是否可信,如果沒有下載openssl根證書并在php.ini中設置openssl根證書路徑,就會造成無法驗證對方網(wǎng)站SSL證書是否可信,就無法使用上述兩個函數(shù)獲取到內容同時生成PHP警告信息,php5.6以前的老版本中此驗證功能是沒有開啟或者說是沒有作用的。所以php5.6以前的版本不存在此問題!
OpenSSL Error messages:error:14090086
SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
Failed to enable crypto

特在此說明原因,同時希望我這兩天的折騰對以后遇到同樣問題的朋友有所幫助少走彎路




歡迎光臨 WDlinux官方論壇 (http://cd-genova.com/bbs/) Powered by Discuz! 7.2