ssl.pl
# @param string $cert filename
# @return arrayref
sub get_ssldomains
{
my $cert = shift;
my %doms;
my $x509;
eval { $x509 = Crypt::OpenSSL::X509->new_from_file($cert); } or do { return };
my $cn = $x509->subject_name->get_entry_by_long_type('commonName')->as_string;
$cn =~ s{^CN\=}{}g;
$doms{$cn} = 1;
if ($x509) {
my $e;
eval { $e = $x509->extensions_by_name(); };
if ( exists $e->{subjectAltName} ) {
my $san = $e->{subjectAltName}->to_string;
if ( $san =~ /DNS:/ ) {
$san =~ s{\s*,\s*}{}g;
my @sans = split 'DNS:', $san;
shift @sans if @sans > 0 and $sans[0] eq '';
foreach my $altnam (@sans) {
$doms{$altnam} = 1;
}
}
}
}
return [ keys %doms ];
}