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 35 36 37 38 39 40 41 42 43 44
#!/usr/bin/perl use strict; use warnings; #perl test_ftp.pl my $erg = losgehts(); print "Ergebnis: $erg\n"; sub losgehts { use Net::FTP; use IO::Socket::SSL qw(SSL_VERIFY_CLIENT_ONCE); my @hosts = ( { url => 'test .de', user => 'abc', passw => 'xyz', }, ); foreach my $ref (@hosts) { my $ftp = Net::FTP->new( $ref->{url}, Debug => 1, Passive => 1, SSL_verify_mode => SSL_VERIFY_CLIENT_ONCE, SSL_session_cache => IO::Socket::SSL::Session_Cache->new(1), ) or return 'bei '.$ref->{url}.' ist Net::FTP->new() fehlgeschlagen'; $ftp->starttls() or return 'bei ' .$ref->{url} .' ist $ftp->starttls() fehlgeschlagen' ; print "Zeile ".__LINE__."\n"; $ftp->login($ref->{user},$ref->{passw}) or return 'bei ' .$ref->{url} .' ist $ftp->login($ref->{user},$ref->{passw}) fehlgeschlagen' ; print "Zeile ".__LINE__."\n"; my $hash_ref = $ftp->dir() or return 'bei ' .$ref->{url}.' ist $ftp->dir(\'/\') fehlgeschlagen' ; print "Zeile ".__LINE__."\n"; } print "Zeile ".__LINE__."\n"; }
QuoteNet::FTP>>> Net::FTP(3.11)
Net::FTP>>> Exporter(5.70)
Net::FTP>>> Net::Cmd(3.11)
Net::FTP>>> IO::Socket::SSL(2.060)
Net::FTP>>> IO::Socket::IP(0.32)
Net::FTP>>> IO::Socket(1.36)
Net::FTP>>> IO::Handle(1.34)
Net::FTP=GLOB(0x3290ce8)<<< 220 FTP server
Net::FTP=GLOB(0x3290ce8)>>> AUTH TLS
Net::FTP=GLOB(0x3290ce8)<<< 234 AUTH TLS successful
Ergebnis: bei test .de ist $ftp->starttls() fehlgeschlagen
TLSOptions NoSessionReuseRequired
2020-04-07T09:02:12 hajWenn's so spät beim Verbindungsaufbau klemmt, dann hängt das womöglich genau mit dem Net::FTP-Problem zusammen, über das Du gestolpert hast.
2020-04-07T09:02:12 hajHast Du mal die von ihm vorgeschlagenen anderen Umgehungen ausprobiert?
1 2 3 4 5 6 7
my $ftp = Net::FTP->new( $ref->{url}, Debug => 1, Passive => 1, SSL_verify_mode => SSL_VERIFY_CLIENT_ONCE, SSL_session_key => "ip:port", ) or return 'bei '.$ref->{url}.' ist Net::FTP->new() fehlgeschlagen';
1 2 3 4 5 6 7
my $ftp = Net::FTP->new( $ref->{url}, Debug => 1, Passive => 1, SSL_verify_mode => SSL_VERIFY_CLIENT_ONCE, SSL_version => "TLSv12", ) or return 'bei '.$ref->{url}.' ist Net::FTP->new() fehlgeschlagen';
1 2 3 4 5 6 7 8
my $ftp = Net::FTP->new( $ref->{url}, Debug => 1, Passive => 1, SSL_verify_mode => SSL_VERIFY_CLIENT_ONCE, SSL_session_cache => IO::Socket::SSL::Session_Cache->new(1), SSL_version => "TLSv12", ) or return 'bei '.$ref->{url}.' ist Net::FTP->new() fehlgeschlagen';
1 2 3 4 5 6 7 8
my $ftp = Net::FTP->new( $ref->{url}, Debug => 1, Passive => 1, SSL_verify_mode => SSL_VERIFY_CLIENT_ONCE, SSL_session_cache => IO::Socket::SSL::Session_Cache->new(1), SSL_session_key => "ip:port", ) or return 'bei '.$ref->{url}.' ist Net::FTP->new() fehlgeschlagen';
1 2 3 4 5 6 7 8 9
my $ftp = Net::FTP->new( $ref->{url}, Debug => 1, Passive => 1, SSL_verify_mode => SSL_VERIFY_CLIENT_ONCE, SSL_session_cache => IO::Socket::SSL::Session_Cache->new(1), SSL_session_key => "ip:port", SSL_version => "TLSv12", ) or return 'bei '.$ref->{url}.' ist Net::FTP->new() fehlgeschlagen';
2020-04-07T09:02:12 hajOder: Hast Du die Server-Konfiguration in der Hand?
$IO::Socket::SSL::DEBUG = 2;
2020-04-07T19:39:52 hajCode (perl): (dl )$IO::Socket::SSL::DEBUG = 2;
QuoteDEBUG: .../IO/Socket/SSL.pm:2853: new ctx 46725744
DEBUG: .../IO/Socket/SSL.pm:692: socket not yet connected
DEBUG: .../IO/Socket/SSL.pm:694: socket connected
Net::FTP>>> Net::FTP(3.11)
Net::FTP>>> Exporter(5.70)
Net::FTP>>> Net::Cmd(3.11)
Net::FTP>>> IO::Socket::SSL(2.060)
Net::FTP>>> IO::Socket::IP(0.32)
Net::FTP>>> IO::Socket(1.36)
Net::FTP>>> IO::Handle(1.34)
Net::FTP=GLOB(0x323cc50)<<< 220 FTP server
Net::FTP=GLOB(0x323cc50)>>> AUTH TLS
Net::FTP=GLOB(0x323cc50)<<< 234 AUTH TLS successful
DEBUG: .../IO/Socket/SSL.pm:717: ssl handshake not started
DEBUG: .../IO/Socket/SSL.pm:750: using SNI with hostname test .de
DEBUG: .../IO/Socket/SSL.pm:785: request OCSP stapling
DEBUG: .../IO/Socket/SSL.pm:806: set socket to non-blocking to enforce timeout=120
DEBUG: .../IO/Socket/SSL.pm:819: call Net::SSLeay::connect
DEBUG: .../IO/Socket/SSL.pm:822: done Net::SSLeay::connect -> -1
DEBUG: .../IO/Socket/SSL.pm:832: ssl handshake in progress
DEBUG: .../IO/Socket/SSL.pm:842: waiting for fd to become ready: SSL wants a read first
DEBUG: .../IO/Socket/SSL.pm:862: socket ready, retrying connect
DEBUG: .../IO/Socket/SSL.pm:819: call Net::SSLeay::connect
DEBUG: .../IO/Socket/SSL.pm:2754: did not get stapled OCSP response
DEBUG: .../IO/Socket/SSL.pm:822: done Net::SSLeay::connect -> -1
DEBUG: .../IO/Socket/SSL.pm:825: SSL connect attempt failed
DEBUG: .../IO/Socket/SSL.pm:825: local error: SSL connect attempt failed error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
DEBUG: .../IO/Socket/SSL.pm:828: fatal SSL error: SSL connect attempt failed error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
DEBUG: .../IO/Socket/SSL.pm:2875: free ctx 46725744 open=46725744
DEBUG: .../IO/Socket/SSL.pm:2879: free ctx 46725744 callback
DEBUG: .../IO/Socket/SSL.pm:2886: OK free ctx 46725744
Ergebnis: bei test .de ist $ftp->starttls() fehlgeschlagen
2020-04-08T20:13:48 hajEine waffenscheinpflichtige Umgehung ist, diese Prüfung mit SSL_verify_mode => SSL_VERIFY_NONE abzuklemmen
2020-04-08T20:13:48 hajMit höheren Debug-Werten bekommst Du auch die ganzen verschickten Datenpakete.
2020-04-08T20:13:48 hajKannst Du denn mit dem Firefox eine FTP-Verbindung herstellen? Dann kannst Du prüfen, ob bei dem Zertifikat etwas verdächtig ist (Firefox ist, genau wie openSSL, recht kritisch)
2020-04-08T20:13:48 hajKannst Du den Debug-Output mal für einen FTP-Server erzeugen, bei dem die Verbindung funktioniert? Dann siehst Du, wo genau die Abweichung in den Protokollen auftritt.
QuoteDEBUG: .../IO/Socket/SSL.pm:2853: new ctx 52697024
DEBUG: .../IO/Socket/SSL.pm:692: socket not yet connected
DEBUG: .../IO/Socket/SSL.pm:694: socket connected
Net::FTP>>> Net::FTP(3.11)
Net::FTP>>> Exporter(5.70)
Net::FTP>>> Net::Cmd(3.11)
Net::FTP>>> IO::Socket::SSL(2.060)
Net::FTP>>> IO::Socket::IP(0.32)
Net::FTP>>> IO::Socket(1.36)
Net::FTP>>> IO::Handle(1.34)
Net::FTP=GLOB(0x31b6000)<<< 220---------- Welcome to Pure-FTPd [privsep] [TLS] ----------
Net::FTP=GLOB(0x31b6000)<<< 220-You are user number 1 of 50 allowed.
Net::FTP=GLOB(0x31b6000)<<< 220-Local time is now 20:06. Server port: 21.
Net::FTP=GLOB(0x31b6000)<<< 220-This is a private system - No anonymous login
Net::FTP=GLOB(0x31b6000)<<< 220-IPv6 connections are also welcome on this server.
Net::FTP=GLOB(0x31b6000)<<< 220 You will be disconnected after 15 minutes of inactivity.
Net::FTP=GLOB(0x31b6000)>>> AUTH TLS
Net::FTP=GLOB(0x31b6000)<<< 234 AUTH TLS OK.
DEBUG: .../IO/Socket/SSL.pm:717: ssl handshake not started
DEBUG: .../IO/Socket/SSL.pm:750: using SNI with hostname ftp.test2 .de
DEBUG: .../IO/Socket/SSL.pm:785: request OCSP stapling
DEBUG: .../IO/Socket/SSL.pm:806: set socket to non-blocking to enforce timeout=120
DEBUG: .../IO/Socket/SSL.pm:819: call Net::SSLeay::connect
DEBUG: .../IO/Socket/SSL.pm:822: done Net::SSLeay::connect -> -1
DEBUG: .../IO/Socket/SSL.pm:832: ssl handshake in progress
DEBUG: .../IO/Socket/SSL.pm:842: waiting for fd to become ready: SSL wants a read first
DEBUG: .../IO/Socket/SSL.pm:862: socket ready, retrying connect
DEBUG: .../IO/Socket/SSL.pm:819: call Net::SSLeay::connect
DEBUG: .../IO/Socket/SSL.pm:2754: did not get stapled OCSP response
DEBUG: .../IO/Socket/SSL.pm:822: done Net::SSLeay::connect -> -1
DEBUG: .../IO/Socket/SSL.pm:832: ssl handshake in progress
DEBUG: .../IO/Socket/SSL.pm:842: waiting for fd to become ready: SSL wants a read first
DEBUG: .../IO/Socket/SSL.pm:862: socket ready, retrying connect
DEBUG: .../IO/Socket/SSL.pm:819: call Net::SSLeay::connect
DEBUG: .../IO/Socket/SSL.pm:822: done Net::SSLeay::connect -> 1
DEBUG: .../IO/Socket/SSL.pm:877: ssl handshake done
Net::FTP=GLOB(0x31b6000)>>> PBSZ 0
Net::FTP=GLOB(0x31b6000)<<< 200 PBSZ=0
Net::FTP=GLOB(0x31b6000)>>> PROT P
Net::FTP=GLOB(0x31b6000)<<< 200 Data protection level set to "private"
Zeile 40
Net::FTP=GLOB(0x31b6000)>>> USER usernametest
Net::FTP=GLOB(0x31b6000)<<< 331 User usernametest OK. Password required
Net::FTP=GLOB(0x31b6000)>>> PASS ....
Net::FTP=GLOB(0x31b6000)<<< 230-Your bandwidth usage is restricted
Net::FTP=GLOB(0x31b6000)<<< 230 OK. Current restricted directory is /
Zeile 45
Net::FTP=GLOB(0x31b6000)>>> PASV
Net::FTP=GLOB(0x31b6000)<<< 227 Entering Passive Mode (195,30,85,140,126,142)
Net::FTP=GLOB(0x31b6000)>>> LIST
DEBUG: .../IO/Socket/SSL.pm:692: socket not yet connected
DEBUG: .../IO/Socket/SSL.pm:694: socket connected
DEBUG: .../IO/Socket/SSL.pm:717: ssl handshake not started
DEBUG: .../IO/Socket/SSL.pm:750: using SNI with hostname ftp.test2 .de
DEBUG: .../IO/Socket/SSL.pm:785: request OCSP stapling
DEBUG: .../IO/Socket/SSL.pm:806: set socket to non-blocking to enforce timeout=120
DEBUG: .../IO/Socket/SSL.pm:819: call Net::SSLeay::connect
DEBUG: .../IO/Socket/SSL.pm:822: done Net::SSLeay::connect -> -1
DEBUG: .../IO/Socket/SSL.pm:832: ssl handshake in progress
DEBUG: .../IO/Socket/SSL.pm:842: waiting for fd to become ready: SSL wants a read first
DEBUG: .../IO/Socket/SSL.pm:862: socket ready, retrying connect
DEBUG: .../IO/Socket/SSL.pm:819: call Net::SSLeay::connect
DEBUG: .../IO/Socket/SSL.pm:2754: did not get stapled OCSP response
DEBUG: .../IO/Socket/SSL.pm:822: done Net::SSLeay::connect -> 1
DEBUG: .../IO/Socket/SSL.pm:877: ssl handshake done
Net::FTP=GLOB(0x31b6000)<<< 150 Accepted data connection
Net::FTP=GLOB(0x31b6000)<<< 226-Options: -a -l
Net::FTP=GLOB(0x31b6000)<<< 226 47 matches total
Zeile 49
DEBUG: .../IO/Socket/SSL.pm:2875: free ctx 52697024 open=52697024
DEBUG: .../IO/Socket/SSL.pm:2879: free ctx 52697024 callback
DEBUG: .../IO/Socket/SSL.pm:2886: OK free ctx 52697024
2020-04-08T20:13:48 hajWelche Version von IO::Socket::SSL ist das? Bei der aktuellen 2.068 habe ich andere Zeilennummern...
2020-04-08T20:13:48 hajNoch ein paar Details:
2020-04-10T18:23:12 bianca2020-04-08T20:13:48 hajDamit funktioniert die Verbindung aber ich bin nicht sicher, ob man damit ->starttls() nicht gleich weglassen kann :( Das hattest du auch so ähnlich geschrieben.Eine waffenscheinpflichtige Umgehung ist, diese Prüfung mit SSL_verify_mode => SSL_VERIFY_NONE abzuklemmen
2020-04-10T18:23:12 bianca2020-04-08T20:13:48 hajMit 3 bekomme ich nicht mehr als mit 2 angezeigt. An welcher Stelle muss ich das angeben?Mit höheren Debug-Werten bekommst Du auch die ganzen verschickten Datenpakete.
2020-04-10T18:23:12 bianca2020-04-08T20:13:48 haj[...] Wie/wo löse ich das ->starttls() im FF aus?Kannst Du denn mit dem Firefox eine FTP-Verbindung herstellen? [...]
2020-04-10T18:23:12 biancaHelfen meine Antworten?
openssl s_client -connect ftp.test.de:21 -starttls ftp