Debian 6下的XAMPP:无法打开“ssl://”URL

问题描述 投票:2回答:2

我无法使用ssl://方案打开URL。详图:

phpinfo()http://pastie.org/2391404

示例代码:

$socket = @fsockopen("ssl://cgw.ubb.bg", 443, $errno, $errstr, 30);
if (!$socket) {
  $err = "$errstr ($errno) - " . $socket;
  echo "Unable to connect. $err";
} else {
  echo "Connected.";
  fclose($socket);
}

echo PHP_EOL;

我得到的回应是:

Unable to connect. (0) -

(是的,我确实尝试连接telnet / browser / etc.,主机/端口组合不是问题。)

换句话说,errno为0,并且未提供错误消息。

当我把它放在/opt/lampp/etc/php.ini时:

extension="openssl.so"

我收到此错误:

Warning: PHP Startup: Unable to load dynamic library '/opt/lampp/lib/php/extensions/no-debug-non-zts-20090626/openssl.so' - /opt/lampp/lib/php/extensions/no-debug-non-zts-20090626/openssl.so: cannot open shared object file: No such file or directory in Unknown on line 0

唉,确实没有openssl.so文件。

我的XAMPP平台是:i686-pc-linux-gnu

我的问题是:

我可以通过下载正确的文件以某种方式“欺骗”并完成它吗?如果没有,我如何从源代码编译它并将其集成到XAMPP而不将其拆开?

编辑:到目前为止,没有可行的建议,这是一种耻辱。考虑到我使用了现成的XAMPP安装(基本上解压缩了存档)并且XAMPP被广泛使用,我很惊讶没有其他人偶然发现这个问题。

php openssl xampp
2个回答
0
投票

从您的phpinfo(),openssl可用:

openssl

OpenSSL support => enabled
OpenSSL Library Version => OpenSSL 1.0.0c 2 Dec 2010
OpenSSL Header Version => OpenSSL 1.0.0c 2 Dec 2010

PHP允许将openssl构建到核心中,在这种情况下,它不需要在单独的扩展中。 file_get_contents(“https://cgw.ubb.bg/”)是否会给出相同的错误?

编辑:这似乎是openssl中的一个错误:我尝试了我提供的示例,并得到以下错误:

error:140773F2:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert unexpected message 

谷歌搜索后,我发现多个错误报告/论坛帖子似乎都说这是openssl lib和远程服务器之间的问题。显然,强制openssl sslv3纠正了这个问题,但我不知道如何用php做到这一点。

一些错误报告(与php无关):

https://bugs.launchpad.net/ubuntu/+source/curl/+bug/595415

http://forum.parallels.com/printthread.php?t=82502


1
投票

在debian上调试这个问题几个小时后(安装libssl0.9.8挤压)我找到了一个解决方案。我使用的是dotdeb.org php版本:php5-cgi 5.3.13-1~dotdeb.0(似乎不适用于debian默认包5.3.3-7 + squeeze13! - 此版本中仍然缺少no_ticket )。

解决方案是打开这样的套接字:

<?php
 $host = "ssl://cgw.ubb.bg";
 $context = stream_context_create(); 
 $result = stream_context_set_option($context, 'ssl', 'no_ticket',true);
 $socket = stream_socket_client($host.':443', $errno, $errstr, 30, STREAM_CLIENT_CONNECT, $context);

之后你只需使用套接字,因为它是一个fsockopen资源。

© www.soinside.com 2019 - 2024. All rights reserved.