Bug #54511 [Opn->Nab]: Failure in socket open to some SSL server
| From: | cmb@php.net | Date: | Fri, 25 Jun 2021 16:41:05 +0000 |
| Subject: | Bug #54511 [Opn->Nab]: Failure in socket open to some SSL server | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-234633@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=54511&edit=1
ID: 54511
Updated by: cmb@php.net
Reported by: dbpalan at hotmail dot com
Summary: Failure in socket open to some SSL server
-Status: Open
+Status: Not a bug
Type: Bug
Package: OpenSSL related
Operating System: Debian Squeeze
PHP Version: 5.3.6
-Assigned To:
+Assigned To: cmb
Block user comment: N
Private report: N
New Comment:
What you're calling workaround is actually the solution.
Obviously, that server (which appears to be no longer available)
required SNI[1]. To enable that as of PHP 7.0.0:
$context = stream_context_create([
'ssl' => [
'SNI_enabled' => true,
'peer_name' => 'smtpb.scig.gov.hk'
],
]);
[1] <https://en.wikipedia.org/wiki/Server_Name_Indication>
Previous Comments:
------------------------------------------------------------------------
[2012-07-12 07:22:46] alexwichti at googlemail dot com
Bug still exists in 5.4.3.
Workaround by dbpalan works though, thanks!
------------------------------------------------------------------------
[2011-04-12 10:04:01] dbpalan at hotmail dot com
1. The function call is located in ext/openssl/xp_ssl.c
2. A workaround is replace the line fsockopen() with:
$context = stream_context_create(array(
'ssl' => array('SNI_server_name' =>
'smtpb.scig.gov.hk'),
));
$fp = stream_socket_client("tcp://smtpb.scig.gov.hk:465", $errno, $errstr, 30,
STREAM_CLIENT_CONNECT, $context);
------------------------------------------------------------------------
[2011-04-12 09:51:12] dbpalan at hotmail dot com
Description:
------------
fsockopen() connect to a server always failed. After some tests it is confirmed due to a bug in a
SSL function call which only occur in new version:
5.2.6 - passed
5.2.17 - passed
5.3.0 - passed
5.3.1 - passed
5.3.2 - failed
5.3.3 - failed
5.3.6 - failed
The bug was introduced from svn revision #291493 "merge from trunk: openssl sni support"
from the function call to SSL_set_tlsext_host_name(sslsock->ssl_handle, sslsock->sni).
If I remark this function, everything works fine.
I have no further idea what is this function do, and what side effect without this function. Please
advice and hope a fix would be available. Thank you.
Test script:
---------------
<?
$fp = fsockopen("ssl://smtpb.scig.gov.hk", 465, $errno, $errstr, 30);
if (!$fp) {
echo "fail: $errstr ($errno)\n";
} else {
echo "success";
}
?>
Expected result:
----------------
$fp is a non-zero handle, the screen will show "success"
Actual result:
--------------
$fp is EMPTY, the screen will show:
Warning: fsockopen() [function.fsockopen]: SSL operation failed with code 1. OpenSSL Error messages:
error:14094417:SSL routines:func(148):reason(1047) in /www/test.php on line 2
Warning: fsockopen() [function.fsockopen]: Failed to enable crypto in /www/test.php on line 2
Warning: fsockopen() [function.fsockopen]: unable to connect to ssl://smtpb.scig.gov.hk:465 (Unknown
error) in /www/test.php on line 2
fail: 0
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=54511&edit=1