AnyEvent
view release on metacpan or search on metacpan
lib/AnyEvent/TLS.pm view on Meta::CPAN
TLS only protects the data that is sent - it cannot automatically verify
that you are really talking to the right peer. The reason is that
certificates contain a "common name" (and a set of possible alternative
"names") that need to be checked against the peername (usually, but not
always, the DNS name of the server) in a protocol-dependent way.
This can be implemented by specifying a callback that has to verify that
the actual C<$peername> matches the given certificate in C<$cert>.
Since this can be rather hard to implement, AnyEvent::TLS offers a variety
of predefined "schemes" (lifted from L<IO::Socket::SSL>) that are named
like the protocols that use them:
=over 4
=item ldap (rfc4513), pop3,imap,acap (rfc2995), nntp (rfc4642)
Simple wildcards in subjectAltNames are possible, e.g. *.example.org
matches www.example.org but not lala.www.example.org. If nothing from
subjectAltNames matches, it checks against the common name, but there are
no wildcards allowed.
lib/AnyEvent/TLS.pm view on Meta::CPAN
$_[0]
? Net::SSLeay::X509_NAME_oneline (Net::SSLeay::X509_get_issuer_name ($_[0]))
. Net::SSLeay::X509_NAME_oneline (Net::SSLeay::X509_get_subject_name ($_[0]))
: undef
}
our %CN_SCHEME = (
# each tuple is [$cn_wildcards, $alt_wildcards, $check_cn]
# where *_wildcards is 0 for none allowed, 1 for allowed at beginning and 2 for allowed everywhere
# and check_cn is 0 for do not check, 1 for check when no alternate dns names and 2 always
# all of this is from IO::Socket::SSL
rfc4513 => [0, 1, 2],
rfc2818 => [0, 2, 1],
rfc3207 => [0, 0, 2], # see IO::Socket::SSL, rfc seems unclear
none => [], # do not check
ldap => "rfc4513", ldaps => "ldap",
http => "rfc2818", https => "http",
smtp => "rfc3207", smtps => "smtp",
xmpp => "rfc3920", rfc3920 => "http",
pop3 => "rfc2595", rfc2595 => "ldap", pop3s => "pop3",
imap => "rfc2595", rfc2595 => "ldap", imaps => "imap",
acap => "rfc2595", rfc2595 => "ldap",
lib/AnyEvent/TLS.pm view on Meta::CPAN
$pattern = qr{^\Q$1\E[^.]*\Q$2\E$}i;
} elsif ($type == 1 and $name =~m{^\*(\..+)$} ) {
$pattern = qr{^[^.]*\Q$1\E$}i;
} else {
$pattern = qr{^\Q$name\E$}i;
}
$cn =~ $pattern
}
# taken verbatim from IO::Socket::SSL, then changed to take advantage of
# AnyEvent utilities.
sub verify_hostname($$$) {
my ($cn, $cert, $scheme) = @_;
while (!ref $scheme) {
$scheme = $CN_SCHEME{$scheme}
or return 1;
}
my $cert_cn =
lib/AnyEvent/TLS.pm view on Meta::CPAN
Due to the abysmal code quality of Net::SSLeay, this module will leak small
amounts of memory per TLS connection (currently at least one perl scalar).
=head1 AUTHORS
Marc Lehmann <schmorp@schmorp.de>.
Some of the API, documentation and implementation (verify_hostname),
and a lot of ideas/workarounds/knowledge have been taken from the
L<IO::Socket::SSL> module. Care has been taken to keep the API similar to
that and other modules, to the extent possible while providing a sensible
API for AnyEvent.
=cut
1
( run in 0.479 second using v1.01-cache-2.11-cpan-4d50c553e7e )