Net-DirectConnect
view release on metacpan or search on metacpan
lib/Net/DirectConnect/adcs.pm view on Meta::CPAN
#$Id: adc.pm 858 2011-10-10 22:56:04Z pro $ $URL: svn://svn.setun.net/dcppp/trunk/lib/Net/DirectConnect/adc.pm $
=CERTS
mkdir certs
windows-only?: add to certs/cfg:
------------------------
[ req ]
default_bits = 1024
default_keyfile = certs/key.pem
distinguished_name = req_distinguished_name
[ req_distinguished_name ]
countryName = Country Name (2 letter code)
countryName_default = RU
countryName_min = 2
countryName_max = 2
localityName = Locality Name (eg, city)
organizationName = Organization Name(eg, org)
organizationalUnitName = Organizational Unit Name (eg, section)
commonName = Common Name (eg, YOUR name)
commonName_max = 64
emailAddress = Email Address
emailAddress_max = 40
-------------------------
for non-windows delete -config certs/cfg :
#openssl req -new -x509 -out certs/cert.pem -config certs/cfg
openssl genrsa -des3 -out certs/key.pem
openssl req -new -key certs/key.pem -out certs/cert.pem -config certs/cfg
debug:
openssl s_server -accept 413 -cert certs/cert.pem -key certs/key.pem
openssl s_client -debug -connect 127.0.0.1:413
=cut
package #hide from cpan
Net::DirectConnect::adcs;
use strict;
no strict qw(refs);
use warnings "NONFATAL" => "all";
no warnings qw(uninitialized);
no if $] >= 5.017011, warnings => 'experimental::smartmatch';
use IO::Socket::SSL;
#use IO::Socket::SSL qw(debug4);
use Data::Dumper; #dev only
#$Data::Dumper::Sortkeys = $Data::Dumper::Useqq = $Data::Dumper::Indent = 1;
sub init {
my $self = shift if ref $_[0];
$self->module_load('adc');
#$self->log( 'ssl', $self->{'protocol'}, $self->{'auto_listen'} );
$self->{'protocol_supported'}{'ADCS/0.10'} = 'adcs';
#$self->log( 'dev', 'sslinit', $self->{'protocol'} ),
$self->{'socket_class'} = 'IO::Socket::SSL'
if
#!$self->{hub} and
$self->{'protocol'} eq 'adcs'
#and !$self->{'auto_listen'}
;
local %_ = (
'recv' => 'read',
'send' => 'syswrite',
'protocol_connect' => 'ADCS/0.10',
);
$self->{$_} = $_{$_} for keys %_;
#$self->log( 'dev', 'adcsset', $self->{'protocol_connect'});
local %_ = (
SSL_server => $self->{'auto_listen'},
SSL_verify_mode => 0,
SSL_version => 'TLSv1',
);
$self->{'socket_options'}{$_} = $_{$_} for keys %_;
# $self->log( 'dev', 'sockopt', %{$self->{'socket_options'}},);
#IO::Socket::SSL->start_SSL( SSL_server => 1, $self->{'socket'}, %{ $self->{'socket_options'} || {} } ) if $self->{'socket'} and $self->{'proto}col'} eq 'adcs' and $self->{'incoming'};
if (
!$self->{'no_listen'} #) {
#$self->log( 'dev', 'nyportgen',"$self->{'M'} eq 'A' or !$self->{'M'} ) and !$self->{'auto_listen'} and !$self->{'incoming'}" );
# if (
and
#( $self->{'M'} eq 'A' or !$self->{'M'} ) and
!$self->{'incoming'} and !$self->{'auto_listen'}
)
{
$self->log( 'dev', "making listeners: tls", "h=$self->{'hub'}" );
$self->{'clients'}{'listener_tls'} = $self->{'incomingclass'}->new(
'parent' => $self,
'protocol' => 'adcs',
'auto_listen' => 1,
);
$self->{'myport_tls'} = $self->{'clients'}{'listener_tls'}{'myport'};
#$self->log( 'dev', 'nyportgen', $self->{'myport_sctp'} );
$self->log( 'err', "cant listen tls" ) unless $self->{'myport_tls'};
if ( $self->{'dev_sctp'} ) {
$self->log( 'dev', "making listeners: tls sctp", "h=$self->{'hub'}" );
$self->{'clients'}{'listener_tls_sctp'} = $self->{'incomingclass'}->new(
'parent' => $self,
'Proto' => 'sctp',
'protocol' => 'adcs',
'auto_listen' => 1,
);
$self->{'myport_tls_sctp'} = $self->{'clients'}{'listener_tls_sctp'}{'myport'};
#$self->log( 'dev', 'nyportgen', $self->{'myport_sctp'} );
$self->log( 'err', "cant listen tls sctp" ) unless $self->{'myport_tls_sctp'};
}
}
}
6;
( run in 0.667 second using v1.01-cache-2.11-cpan-39bf76dae61 )