Bug #67639 [Com]: cURL returns HTTP 400 error when doing two back-to-back queries
| From: | lukas at owncloud dot com | Date: | Mon, 27 Jul 2015 12:46:38 +0000 |
| Subject: | Bug #67639 [Com]: cURL returns HTTP 400 error when doing two back-to-back queries | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-194747@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=67639&edit=1
ID: 67639
Comment by: lukas at owncloud dot com
Reported by: jarkkohyvarinen at hotmail dot com
Summary: cURL returns HTTP 400 error when doing two
back-to-back queries
Status: Open
Type: Bug
Package: cURL related
Operating System: CentOS 6.5
PHP Version: 5.5.14
Block user comment: N
Private report: N
New Comment:
This is caused by an upstream NSS bug: https://bugzilla.redhat.com/show_bug.cgi?id=1241172
Previous Comments:
------------------------------------------------------------------------
[2014-07-17 10:56:58] jarkkohyvarinen at hotmail dot com
I noticed that if CURLOPT_SSL_VERIFYPEER is set to FALSE then both queries executes successfully.
------------------------------------------------------------------------
[2014-07-17 09:46:46] jarkkohyvarinen at hotmail dot com
Description:
------------
If I do two back-to-back queries to our server using two different server aliases (pointing to same
server) first query executes successfully but second query always causes HTTP error 400.
Apache ssl_error_log has an "Hostname www.server.com provided via SNI and hostname
alias.server.com provided via HTTP are different" describing the 400 error.
Our server has Apache 2.2.15, OpenSSL 1.0.1e and cURL 7.19.7.
---
Workaround is to use stream_context_create with SNI_enabled and SNI_server_name options.
Test script:
---------------
function doCurl($url) {
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);
$code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
return $code;
}
echo "HTTP Status: ".doCurl("https://www.server.com")."\n";
echo "HTTP Status: ".doCurl("https://alias.server.com")."\n";
Expected result:
----------------
HTTP Status: 200
HTTP Status: 200
Actual result:
--------------
HTTP Status: 200
HTTP Status: 400
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=67639&edit=1