Schrift
[thread]10568[/thread]

Secure login (https + Zertifikat) mit Perl

Leser: 1


<< >> 6 Einträge, 1 Seite
_Sietsch_
 2007-10-13 15:37
#100782 #100782
User since
2005-05-15
26 Artikel
BenutzerIn
[default_avatar]
Moin,

ich möchte ein Skript schreiben, dass sich auf einer Seite einloggt, die über https läuft und Zertifikate verwendet.
Dazu habe ich auch schon Code, bekomme jedoch immer die Nachricht, mein Benutzername oder Passwort sei falsch. Die Daten sind aber auf jeden Fall richtig, denn wenn ich die Daten aus dem Skript kopiere und in einem Browser in die entsprechenden Felder eintrage, klappt der login.

Hier dir gekürzte HTML-Form der Seite ' https://meineseite.de/admin ':
Code:
Code: (dl )
1
2
3
4
5
6
<form action="/admin/index.php?action=login" method="post" name="action"> 
<input type="hidden" name="ADMIN" value="f23af307ea00b284fb9e74c4cbabfbdf" />
<input type="text" name="username" size="12" value="">
<input type="password" name="password" size="12">
<input type="submit" name="login" value="Login">
</form>


Hier mein Perl Code:
Code:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
use WWW::Mechanize; 
use LWP::Debug qw(+); 

$username = "xxx"; 
$password = "xxx"; 

my $mech = WWW::Mechanize->new(); 

   $mech->cookie_jar(HTTP::Cookies->new()); 
   $mech->get( "https://meineSeite.de/admin" ); 
    
   #Get ADMIN-ID 
   $mech->content() =~ /name=\"ADMIN\" value=\"([^\"]+)/g; 
   $hiddenField = $1; 
       
   #Fill form 
   $mech->submit_form( 
                 form_name => "action", 
                   fields      => { 
                     ADMIN => $hiddenField, 
                     username   => $username, 
                     password => $password}, 
                   button => 'login'); 

    #Print site            
   print $mech->content(); 
 



Mein erster Gedanke war 'Vielleicht werde ich weitergeleitet!?'. Diese Möglichkeit habe ich dann aber getestet; das ist nicht der Fall.

Hier noch die Ergebnise von 'LWP::Debug qw(+)':
Code:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
LWP::UserAgent::new: () 
LWP::UserAgent::request: ()
HTTP::Cookies::add_cookie_header: Checking <<URL>> for cookies
LWP::UserAgent::send_request: GET https://meineSeite/admin
LWP::UserAgent::_need_proxy: Not proxied
LWP::Protocol::http::request: ()
LWP::Protocol::collect: read 242 bytes
LWP::UserAgent::request: Simple response: Moved Permanently
LWP::UserAgent::request: ()
HTTP::Cookies::add_cookie_header: Checking <<URL>> for cookies
LWP::UserAgent::send_request: GET https://meineSeite/admin
LWP::UserAgent::_need_proxy: Not proxied
LWP::Protocol::http::request: ()
LWP::Protocol::collect: read 4096 bytes
LWP::Protocol::collect: read 965 bytes
HTTP::Cookies::extract_cookies: Set cookie ADMIN => 829052f0173388362a649d8fe980081b
LWP::UserAgent::request: Simple response: OK
LWP::UserAgent::request: ()
HTTP::Cookies::add_cookie_header: Checking <<URL>> for cookies
HTTP::Cookies::add_cookie_header: - checking cookie path=/
HTTP::Cookies::add_cookie_header: - checking cookie ADMIN=829052f0173388362a649d8fe980081b
HTTP::Cookies::add_cookie_header: it's a match
HTTP::Cookies::add_cookie_header: Checking <<URL>> for cookies
LWP::UserAgent::send_request: POST https://meineSeite/admin/index.php?action=login
LWP::UserAgent::_need_proxy: Not proxied
LWP::Protocol::http::request: ()
LWP::Protocol::collect: read 238 bytes
LWP::Protocol::collect: read 540 bytes
LWP::Protocol::collect: read 2348 bytes
LWP::Protocol::collect: read 219 bytes
LWP::Protocol::collect: read 419 bytes
LWP::Protocol::collect: read 160 bytes
LWP::Protocol::collect: read 1122 bytes
LWP::UserAgent::request: Simple response: OK
moritz
 2007-10-14 13:22
#100790 #100790
User since
2007-05-11
923 Artikel
HausmeisterIn
[Homepage]
user image
Das ist übrigens ein Doppelposting: http://www.perlmonks.org/?node_id=644637
(Ich finde, man könnte zumindest darauf hinweisen...)
renee
 2007-10-14 14:06
#100791 #100791
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Mal mit LiveHttpHeaders angeschaut, wie die Requests im Browser aussehen??
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
ptk
 2007-10-14 14:36
#100792 #100792
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Wenn du Zertifikate brauchst, dann musst du sie auch im Perl-Skript spezifizieren. Siehe hier:
http://search.cpan.org/dist/Crypt-SSLeay/SSLeay.pm#CLIENT_CERTIFICATE_SUPPORT
_Sietsch_
 2007-10-14 14:50
#100793 #100793
User since
2005-05-15
26 Artikel
BenutzerIn
[default_avatar]
Moin,

ich hatte bereits Ethereal genutzt, um mir mal anzuschauen, was denn eigentlich gesendet und empfangen wird. Aber da waren so viele Informationen zu sehen, dass ich das Wensentliche wohl übersehen habe.
Da gefällt mir LiveHTTPheaders schon besser (zu min. für diesen Zweck). Damit habe ich das Problem auch ausfindig machen können:

Beim Senden wird das letzte Zeichen meines Passworts nicht mitgeschickt. Ob das nun immer so ist, oder ob nach x Zeichen einfach abgeschnitten wird... wie auch immer.
Ich habe in meinem Script ebenfalls das letzte Zeichen gelöscht und ZACK! es funktioniert.

Danke nochmal für den Tipp mit LiveHTTPheaders!!!

_Sietsch_
pq
 2007-10-14 18:40
#100798 #100798
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
moritz+2007-10-14 11:22:23--
Das ist übrigens ein Doppelposting: http://www.perlmonks.org/?node_id=644637
(Ich finde, man könnte zumindest darauf hinweisen...)

hier noch ein doppelpost:
http://forum.perl.de/bb/secure-login-https-and-zer...
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
<< >> 6 Einträge, 1 Seite



View all threads created 2007-10-13 15:37.