Crypt-OpenSSL-Cloner
view release on metacpan or search on metacpan
lib/Crypt/OpenSSL/Cloner.pm view on Meta::CPAN
155156157158159160161162163164165166167168169170171172173174175176177178$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
192193194195196197198199200201202203204205206207208209210211212
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.234 second using v1.01-cache-2.11-cpan-5f2e87ce722 )