SSL über Curl - Expertenfrage

Bash, Shell, PHP, Python, Perl, CGI
evilh
Posts: 126
Joined: 2004-03-25 17:45

SSL über Curl - Expertenfrage

Post by evilh » 2008-08-08 10:29

Hallo Zusammen,

nachdem ich sebst auch nach 3 Tagen keinen Erfolg hatte und auch bei anderen Foren nur mit den Schultern gezuckt wurde, seid Ihr meine letzte Hoffnung bei einem sehr merkwürdigen Problem.

Ich habe kürzlich ein Update meiner alten Suse 9.1 Kiste auf Apache Apache 2.2.9 und PHP 5.2.6 gemacht.

Seitdem klappt der Aufruf von https Seiten über Curl nicht mehr. Normale Seiten ohne SSL funktionieren einwandfrei.

Der Aufruf einer https Seite mit Curl von der Kommandozeile aus funktioniert auch einwandfrei.

Das skurrile an der ganzen Sache: Bei einem von vielleicht 100 Versuchen klappt es, und ich bekomme Antwort von der aufzurufenden Seite.
Bei allen übrigen 99 Versuchen bekomme ich die Meldung "Connection time-out" bzw. "SSL connection timeout". Diese Meldungen wechseln sich immer mal ab.
Allerdings kommen diese Fehlermeldungen sofort und nicht erst nach einigen Sekunden.
Mein Verdacht ist, dass Curl (warum auch immer) eine Timeout Zeit von etwa 0.5 Sekunden verwendet, und deshalb fast immer in ein Timeout rennt.

Mein PHP Code:

Code: Select all

<?php
error_reporting(E_ALL|E_STRICT);
ini_set('display_errors', TRUE);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://ssl-seite.de/"); // Das klappt nicht
#curl_setopt($ch, CURLOPT_URL, "http://no-ssl-seite.de/"); // Das klappt

curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_FRESH_CONNECT, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($ch, CURLOPT_TIMEOUT, 15);
 
$back=curl_exec($ch);
echo $back."<br>";
$info = curl_getinfo($ch);
print_r($info);

echo "Fehler: ".curl_error($ch);
curl_close($ch);
?>


Ausgabe:

Code: Select all

Array ( [url] => https://xxxxx.de/ [http_code] => 0 [header_size] => 0 [request_size] => 0 [filetime] => -1 [ssl_verify_result] => 0 [redirect_count] => 0 [total_time] => 0 [namelookup_time] => -128 [connect_time] => -112 [pretransfer_time] => 0 [size_upload] => 0 [size_download] => 0 [speed_download] => 0 [speed_upload] => 0 [download_content_length] => 0 [upload_content_length] => 0 [starttransfer_time] => 0 [redirect_time] => 0 ) Fehler: SSL connection timeout


Die Timeout Meldung kommt wie gesagt sofort, ohne Wartezeiten.

Relevante Passage meiner PHP.ini:

Configure Command './configure' '--with-openssl' '--enable-soap' '--with-curl' '--with-apxs2=/usr/local/apache2/bin/apxs' '--with-mysql=/usr/local/mysql' '--with-zlib-dir=/usr/lib/' '--enable-versioning' '--enable-track-vars=yes' '--enable-url-includes' '--enable-sysvshm=yes' '--enable-sysvsem=yes' '--enable-ftp' '--enable-calendar' '--with-config-file-path=/etc' '--with-gd' '--enable-libxml' '--enable-session' '--with-mm' '--enable-xml' '--enable-simplexml' '--enable-spl' '--enable-filter' '--enable-inline-optimization'

Registered PHP Streams php, file, data, http, ftp, compress.zlib, https, ftps
Registered Stream Socket Transports

Loaded Modules core mod_authn_file mod_authn_dbm mod_authn_anon mod_authn_dbd mod_authn_default mod_authz_host mod_authz_groupfile mod_authz_user mod_authz_dbm mod_authz_owner mod_authz_default mod_auth_basic mod_auth_digest mod_dbd mod_dumpio mod_ext_filter mod_include mod_filter mod_substitute mod_deflate mod_log_config mod_log_forensic mod_logio mod_env mod_mime_magic mod_cern_meta mod_expires mod_headers mod_ident mod_usertrack mod_unique_id mod_setenvif mod_version mod_ssl prefork http_core mod_mime mod_dav mod_status mod_autoindex mod_asis mod_info mod_suexec mod_cgi mod_dav_fs mod_vhost_alias mod_negotiation mod_dir mod_imagemap mod_actions mod_speling mod_userdir mod_alias mod_rewrite mod_so mod_php5

cURL support enabled
cURL Information libcurl/7.18.2 OpenSSL/0.9.7b zlib/1.1.4

OpenSSL support enabled
OpenSSL Version OpenSSL 0.9.7b 10 Apr 2003


Wie gesagt bringt mich der Punkt zur Verzweiflung, dass es (ganz ganz selten) mal funktioniert.
Speziell wenn ich meinen Apachen mal neu starte, und direkt danach das Script nochmal ausgühre, habe ich eine recht grosse Chance (vielleicht 1:3), dass es funktioniert.