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
#!/usr/bin/perl
# -----------------------------------------------------------------------------
use strict;
use warnings;
use IO::Socket::SSL;
# -----------------------------------------------------------------------------
# simple server
my $server = IO::Socket::SSL -> new(
# where to listen
LocalAddr => 'XX.XXX.XX.XX' ,
LocalPort => 8080 ,
Listen => 10 ,
# which certificate to offer
# with SNI support there can be different certificates per hostname
SSL_cert_file => 'www.meinedomain.de.pem' ,
SSL_key_file => 'www.meinedomain.de.key' ,
) or die "failed to listen: $!";
# accept client
my $client = $server->accept or die
"failed to accept or ssl handshake: !";
print "Erfolgreiche Authentifizierung" , "\n";
close( $client );
1
2
3
use IO::Socket::SSL;
my $Authentifizierung_Clients = IO::Socket::SSL->new( 'XX.XXX.XX.XX:8080' ) or die "Fehler bei der SSL - Verbindung !";
1
2
3
4
5
6
7
8
9
10
11
12
13
# accept client
my $client = $server->accept or die
"failed to accept or ssl handshake: !";
my @Testumgebung = ( 'Eins' , 'Zwei' , 'Drei' );
# print $client "POST / HTTP/1.0\r\n\r\n";
print $client "@Testumgebung";
print "Erfolgreiche Authentifizierung" , "\n";
close( $client );
1
2
3
4
5
6
7
8
use IO::Socket::SSL;
my $client = IO::Socket::SSL->new( '87.230.94.39:8080' ) or die "Fehler bei der SSL - Verbindung !";
while( <$client> )
{
print $_;
}
LocalAddr => '127.0.0.1',
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#!/usr/bin/perl
# -----------------------------------------------------------------------------
use strict;
use warnings;
use IO::Socket::SSL;
# -----------------------------------------------------------------------------
# SSL - Server
my $SSL_Server = IO::Socket::SSL -> new(
# Initialisierung der Server - Adresse & des Ports
LocalAddr => '127.0.0.1' ,
LocalPort => 8080 ,
Listen => 10 ,
# Zertifikate für die Authentifizierung
SSL_cert_file => 'www.meinedomain.de.pem' ,
SSL_key_file => 'www.meinedomain.de.key' ,
) or die "failed to listen: $!";
# -----------------------------------------------------------------------------
# Akzeptiere Clients
while( 1 )
{
my $Akzeptierung_Verbindung_Clients = $SSL_Server -> accept or die "Fehler bei der Akzeptierung des Handshakes : !";
my $client_address = $Akzeptierung_Verbindung_Clients -> peerhost();
my $client_port = $Akzeptierung_Verbindung_Clients -> peerport();
print "Eingehende Verbindung : $client_address:$client_port" , "\n";
my $data = "";
$Akzeptierung_Verbindung_Clients -> read( $data , 1024 );
my @Pruefung_Lizenzierung = split( / , / , $data );
print "Empfangene Werte : $data" , "\n";
print "Ergebnis - Array 0 : $Pruefung_Lizenzierung[ 0 ]" , "\n";
print "Ergebnis - Array 1 : $Pruefung_Lizenzierung[ 1 ]" , "\n";
print "Ergebnis - Array 2 : $Pruefung_Lizenzierung[ 2 ]" , "\n";
$data = "OK";
$Akzeptierung_Verbindung_Clients -> print( $data );
shutdown( $Akzeptierung_Verbindung_Clients , 1 );
}
$SSL_Server -> close( );
# -----------------------------------------------------------------------------
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
#!/usr/bin/perl
# ------------------------------------------------------------------------------------------
use strict;
use warnings;
# ------------------------------------------------------------------------------------------
&SSL_Verbindung_Authentifizierung( );
# ------------------------------------------------------------------------------------------
sub SSL_Verbindung_Authentifizierung {
use IO::Socket::SSL;
my $SSL_Verbindung_Pruefung_Typ = "Enterprise";
my $SSL_Verbindung_Pruefung_Bezeichnung = "Muster GmbH";
my $SSL_Verbindung_Pruefung_Lizenz = "F83R - T9SD - 5SI2 - U24T";
my $SSL_Clients = IO::Socket::SSL -> new( '127.0.0.1:8080' ) or die "Fehler bei der SSL - Verbindung !";
my $size = $SSL_Clients -> print( "$SSL_Verbindung_Pruefung_Typ , $SSL_Verbindung_Pruefung_Bezeichnung , $SSL_Verbindung_Pruefung_Lizenz" );
print "Laenge des Pakets : $size" , "\n";
shutdown( $SSL_Clients, 1 );
my $response = "";
$SSL_Clients -> read( $response , 1024 );
print "Rueckmeldung : $response" , "\n";
}
# ------------------------------------------------------------------------------------------
1;
1 2 3 4 5 6 7 8 9 10 11
open my $FH, '>', 'test.txt' or die $!; # normaler Text print $FH '4711'; close $FH; open $FH, '>', 'test.txt:prog.lic' or die $!; # Lizenzdaten schreiben print $FH 'LZK: <0xDEADBEEF>'; close $FH; open $FH, '<', 'test.txt:prog.lic' or die $!; # Lizenzdaten lesen print scalar <$FH>; close $FH;
1
2
3
4
5
6
7
8
9
10
11
Client überprüft beim Programmstart, ob die Signatur-Datei existiert
Wenn nicht
Client sendet Lizenznehmerdaten an Server
Server erzeugt Lizenznummer
Server signiert die Lizenznummer mit OpenPGP
Server schickt die Daten als Lizenz zurück
Client speichert dies als Lizenzdatei
Ende Wenn
Client überprüft, ob die Signatur der Datei noch stimmt
Wenn nicht ok
Fehlermeldung Ungültige Lizenz
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
my $PGP_Verschluesselung = Crypt::OpenPGP->new();
my %attrib = (
'Type' => 'RSA' ,
'Size' => '1024' ,
'Identity' => 'Administrator Administrator@meinedomain.de',
'Passphrase' => 'password' ,
'Cipher' => 'DES3' ,
'Verbosity' => '1' ,
'Compat' => 'PGP5' ,
);
my ( $pubkey, $privkey ) = $PGP_Verschluesselung -> keygen( %attrib ) or die $PGP_Verschluesselung -> errstr;
my $public = $pubkey -> save;
open( PUBLIC , "> test.public" ) or die "COULD NOT OPEN Public Key" , "\n";
print PUBLIC $public;
close( PUBLIC );
my $private = $privkey -> save;
open( PRIVATE , "> test.private" ) or die "COULD NOT OPEN Private Key" , "\n";
print PRIVATE $private;
close( PRIVATE );
my $pgp = Crypt::OpenPGP->new ( "PubRing" => 'test.public' )or die Crypt::OpenPGP->errstr;
my $ciphertext = $pgp->encrypt ( "Compat" => 'PGP5',
"Data" => 'this is a test',
"Recipients" => 'Administrator Administrator@meinedomain.de',
"Armour" => 1,
);
die "Encryption failed: ", $pgp->errstr unless $ciphertext;
print $ciphertext;
1 2 3 4 5
open( PUBLIC , ">", "test.public" ) or die "COULD NOT SAVE Public Key" , "\n"; binmode PUBLIC; flock PUBLIC,0; print PUBLIC $public; close( PUBLIC ) or die "COULD NOT SAVE Public Key" , "\n";
1 2 3 4 5
open( PRIVATE , ">", "test.private" ) or die "COULD NOT SAVE Private Key" , "\n"; binmode PRIVATE; flock PRIVATE,0; print PRIVATE $private; close( PRIVATE ) or die "COULD NOT SAVE Private Key" , "\n";