Crypt-OpenSSL-Cloner
view release on metacpan or search on metacpan
lib/Crypt/OpenSSL/Cloner.pm view on Meta::CPAN
$blob = decode_base64($blob);
my $rootparse = $ASN->find("Certificate");
my $extensions = $rootparse->decode($blob);
$extensions = $extensions->{tbsCertificate}->{extensions};
foreach my $ext (@$extensions) {
my $oid = $ext->{extnID};
my $extname = $oid_2_ext{$oid};
next if !$extname;
my $der = $ext->{extnValue};
my $parser = $PARSERS{$extname};
my $decoded = $parser->decode($der);
if ($extname eq 'SubjectKeyIdentifier') {
$new_cert->set_extension(
"subjectKeyIdentifier", unpack('H*', $decoded));
} elsif ($extname eq 'KeyUsage') {
#Then try to figure that out, too..
#Apparently this module has a different way of doing things...
# Our sample cert doesn't seem to conform to this.. and using
# A parse of another module, seems to be using OIDs for
# ExtendedKeyUsage?
} elsif ($extname eq 'SubjectAltName') {
#ASN:
#
#GeneralName ::= CHOICE {
lib/Crypt/OpenSSL/Cloner.pm view on Meta::CPAN
dNSName => "DNS",
x400Address => "dirName",
#ediPartyName => "what's this?",
directoryName => "dirName",
uniformResourceIdentifier => "URI",
iPAddress => "IP",
registeredID => "RID",
);
my @altnames;
my $altname = "";
foreach my $h (@$decoded) {
my ($k,$v) = (%$h);
my $new_k = $asn2openssl{$k};
if (!$new_k) {
warn "Found ASN.1 X509 field $k which doesn't have an OpenSSL mapping";
next;
}
$k = $new_k;
push @altnames, "$k:$v";
}
$altname = join(",", @altnames);
( run in 0.252 second using v1.01-cache-2.11-cpan-26ccb49234f )