Perl IO::Socket::SSL | Server stürzt ab wenn Client den falschen Fingerprint verifiziert

Nerofu

Cadet 2nd Year
Registriert
Aug. 2016
Beiträge
18
Hallo zusammen :)
zum Hauptthema geht es hier.

Wie im Titel beschrieben:

Ich habe einen Client & einen Server die über SSL miteinander kommunizieren.
Jetzt habe ich dem Client den SSL fingerprint gegeben, und wenn dieser Richtig ist läuft auch alles einwandfrei.
Doch wenn ich den Fingerprint verändere stürzt der Server ab, da er den undefinierten client_socket aufrufen möchte.

Wie kann ich den Fehler abfangen?

Fehler:
Code:
Can't call method "peerhost" on an undefined value at TCPSSLServer.perl line 30.

Programm:
Code:
#! /usr/bin/perl -w
use strict;
use IO::Socket::SSL;

# auto-flush on socket
$| = 1;

# creating a listening socket
my $socket = new IO::Socket::SSL (
    LocalHost => '192.168.112.120',
    LocalPort => '7777',
    #Proto => 'tcp',
    Listen => 10,

    SSL_cert_file => 'test-cert.pem',
    SSL_key_file => 'test-key.pem',
    SSL_error_trap => 1,
);

   die "cannot create socket $!\n" unless $socket;
   print "Server wartet auf Verbindung von Port 7777\n";
 

while(1)
{ 
    # waiting for a new client connection
    my $client_socket = $socket->accept();

    # get information about a newly connected client
    my $client_address = $client_socket->peerhost();
    my $client_port = $client_socket->peerport();
    print "Eingehende Verbindung von: $client_address:$client_port\n";
    
    # read up to 1024 characters from the connected client
    my $data = <$client_socket>;
    print "Daten empfangen: $data\n";

    # write response data to the connected client
    $data = "Verstanden ich bin der Server!";
    print $client_socket $data;

    # notify client that response has been sent
    shutdown($client_socket, 1);
   
}

$socket->close();

Client Socket:
Code:
my $socket = new IO::Socket::SSL (
    PeerHost => '192.168.112.120',
    PeerPort => '7777',
    SSL_verify_mode => SSL_VERIFY_PEER,
    SSL_fingerprint => 'sha512$- Falscher FPR-',
    #Proto => 'tcp',
);

LG,
Nero
 
Ich kenn ja jetzt Perl nicht, aber ich würde schlicht um Zeile 30 eine try/catch Klausel drumpacken und dann entsprechend halt reagieren. Wirds sicherlich ein Äquivalent geben für try/catch
 
Ja, das hatte ich auch schon überlegt, da es try/catch auch in Perl gibt. Aber damit umgehe ich das Problem ja nur und löse es nicht :/
 
Wieso fügst du nach dem

Code:
my $client_socket = $socket->accept();

nicht einfach noch

Code:
if ( ! defined( $client_socket ) )
{
    # Das ging in die Hose. Verbindung verwerfen + eventuell weitere Fehlerbehandlung. 
}
else
{
    # Alles OK, weiter im Programm.
}

ein?
 
Zurück
Oben