HTTPS-Request über Proxy geht nicht
FrankS
- https
Moin.
Ich grüble mal wieder und raufe mir die Haare...
Ich "sitze" im InTRAnet hinter einem Proxy will eine Seite per https aus dem InTERnet holen, dazu nutze ich folgendes Script (Auszug s.u.). Das geht aber nicht, ich bekomme eine Fehlermeldung, siehe auch unten (incl debug-Msg von LWP). Hole ich per http (ohne 's') eine "normale" Seite, gehts. Aus das holen einer Seite per https aus dem InTRAnet geht, SSL funktioniert also grundsätzlich.
Was unterscheidet meinen https-Request von dem meines Browsers, der kann https-Seiten aus dem Internet ja auch holen.
Wer kann mir weiterhelfen?
Meine Konfiguration:
Win2K
Activ-Perl v5.8.2
Modul Crypt::SSLeay installiert
Connection ins Internet via Proxy
Danke für Eure antworten, einen schönen Tag noch,
Gruß Frank
**Script************************************************************
use LWP;
use LWP::ConnCache;
use LWP::Debug qw(+);
$cache = LWP::ConnCache->new();
$cache->total_capacity(0);
$ua = LWP::UserAgent->new(agent => 'ZX Spectrum 48k');
$ua->proxy(['http', 'https'],'http://192.168.0.10:8080/');
$ua->conn_cache($cache);
$ua->timeout(500);
$response = $ua->get( 'https://webmail.t-online.de');
print $response->headers_as_string();
print $response->content();
**LWP-Debug-Msg************************************************************
LWP::UserAgent::new: ()
LWP::UserAgent::proxy: ARRAY(0x1d07f64) http://192.168.0.10:8080/
LWP::UserAgent::proxy: http http://192.168.0.10:8080/
LWP::UserAgent::proxy: https http://192.168.0.10:8080/
LWP::UserAgent::request: ()
LWP::UserAgent::send_request: GET https://webmail.t-online.de
LWP::UserAgent::_need_proxy: Proxied to http://192.168.0.10:8080/
LWP::Protocol::http::request: ()
LWP::Protocol::collect: read 284 bytes
LWP::UserAgent::request: Simple response: Internal Server Error
**Error-Msg************************************************************
Date: Wed, 11 Feb 2004 16:44:36 GMT
Age: 164
Server: NetCache appliance (NetApp/5.5R1D2)
Content-Length: 284
Content-Type: text/html
Client-Date: Wed, 11 Feb 2004 16:40:57 GMT
Client-Peer: 192.168.0.10:8080
Client-Response-Num: 1
Proxy-Connection: keep-alive
Title: 500 Server Error
X-Cache: HIT from 192.168.0.10
<HTML>
<HEAD><TITLE>500 Server Error</TITLE></HEAD>
<BODY>
<H1>Server Error</H1>
<H4>
The following error occurred:<P>
[code=PARENT_NEEDED] Unable to service this URL without parent cache.Contact
your system administrator.
</H4>
<HR>
Please contact the administrator.
</BODY>
</HTML>
Moin Frank,
Ich grüble mal wieder und raufe mir die Haare...
Ich "sitze" im InTRAnet hinter einem Proxy will eine Seite per https aus dem InTERnet holen, dazu nutze ich folgendes Script (Auszug s.u.). Das geht aber nicht, ich bekomme eine Fehlermeldung, siehe auch unten (incl debug-Msg von LWP). Hole ich per http (ohne 's') eine "normale" Seite, gehts. Aus das holen einer Seite per https aus dem InTRAnet geht, SSL funktioniert also grundsätzlich.
Was unterscheidet meinen https-Request von dem meines Browsers, der kann https-Seiten aus dem Internet ja auch holen.
Modul Crypt::SSLeay installiert
Dann sollte ein LWP-UA auch SSL Seiten requesten können.
Server: NetCache appliance (NetApp/5.5R1D2)
Content-Length: 284
Content-Type: text/html
Client-Date: Wed, 11 Feb 2004 16:40:57 GMT
Client-Peer: 192.168.0.10:8080
Client-Response-Num: 1
Proxy-Connection: keep-alive
Title: 500 Server Error
Kann die NetCache appliance HTTPS?
Gruss, Erwin
Moin.
Dann sollte ein LWP-UA auch SSL Seiten requesten können.
geht ja auch, aber nur im eigenen Intranet ohne Proxy...
Server: NetCache appliance (NetApp/5.5R1D2)
Kann die NetCache appliance HTTPS?
Nehme ich mal an, denn per Browser gehts ja, ich nutze im Script den gleichen Proxy wie im Browser.
Bin im Moment ziemlich ratlos... Andere Ideen sind willkommen ;)
Gruß Frank
Mahlzeit,
wenn SSLeay inst. ist, sollte das folgende Script auch mit HTTPS URLs tun, zum Testen bitte
$url, $proxy anpassen
my $file = "/tmp/ports.txt";
my $url = "http://www.iana.org/assignments/port-numbers";
my $proxy = "http://10.253.1.2:8080";
use LWP::UserAgent;
my $ua = new LWP::UserAgent;
$ua->proxy(['http', 'ftp'] => $proxy);
$ua->mirror($url, $file);
#####################
Gruss, Erwin
auch Mahlzeit...
wenn SSLeay inst. ist, sollte das folgende Script auch mit HTTPS URLs tun, zum Testen bitte
tuts nicht, jedenfalls nicht über den Proxy, intern (Intranet) gehts. Trotzdem danke.
Die Fehlermeldung ist immer noch (liefert offensichtlich der Proxy):
The following error occurred:
[code=PARENT_NEEDED] Unable to service this URL without parent cache.Contact your system administrator.
Und es bleibt eigentlich die Frage: worin unterscheidet sich der Browser-Request von dem Script-Request. Der Browser kanns ja *grübel*
Gibt es denn im http-Request einen Parameter 'code=PARENT_NEEDED' oder ähnlich?
Gruß Frank
P.S. Leider habe ich keinen Zugriff auf die Proxylogfiles, noch kann ich einen Admin befragen :(
hi Frank,
Die Fehlermeldung ist immer noch (liefert offensichtlich der Proxy):
The following error occurred:
[code=PARENT_NEEDED] Unable to service this URL without parent cache.Contact your system administrator.
jes, kommt vom Proxy.
Und es bleibt eigentlich die Frage: worin unterscheidet sich der Browser-Request von dem Script-Request. Der Browser kanns ja *grübel*
Gibt es denn im http-Request einen Parameter 'code=PARENT_NEEDED' oder ähnlich?
Einen solchen Parmeter gibt es nicht, aber die Meldung kommt von dem Proxycache, der meckert dass er für den Request einen PARENT braucht, also einen weiteren Proxy im Forwarding (bei mir sind das http Virenscanner).
Aber Warum der das tut - keine Ahnung. Ich guck morgen mal ob ich dazu was finde, morgen ist ein bischen Luft.
P.S. Leider habe ich keinen Zugriff auf die Proxylogfiles, noch kann ich einen Admin befragen :(
Gerade das wäre sehr hilfreich :)
Viele Grüße, Erwin
Guten Morgen
Und es bleibt eigentlich die Frage: worin unterscheidet sich der Browser-Request von dem Script-Request.
Ich habe mal Ethereal angeworfen und getraced, und siehe da, es gibt Unterschiede. Der Browser macht bei https nicht GET sondern CONNECT. Mit dem folgenden Scriptchen kann ich auch über den Proxy hinweg die Seite connecten.
my $req = new HTTP::Request CONNECT => 'https://webmail.t-online.de/';
my $response = $ua->request($req);
print $response->headers_as_string();
print $response->content();
Aber wie geht es weiter? Beim BrowserTrace sehe ich nach der Serverantwort 'HTTP/1.0 200 Connection established' nur noch 'HTTP continuation' in beiden Richtungen. Darin wird wohl das GET und die HTML-Seite versteckt sein, lesen kann mans nicht, ist ja verschlüsselt.
Wie bekomme ich nun meine GET zum los (Eigentlich ists noch schlimmer, ich muß POST mit vielen Parametern machen...).
Ich werden weiter forschen, wen ich was neues habe, melde ich mich wieder - bin natürlich auch über weitere Tipps dankbar.
Gruß Frank