Crypt-OpenSSL-Cloner
view release on metacpan or search on metacpan
lib/Crypt/OpenSSL/Cloner.pm view on Meta::CPAN
$ca_obj = Crypt::OpenSSL::CA::X509->parse($pem);
return unless ($privkey_obj && $ca_obj);
return [$ca_obj,$privkey_obj];
}
sub _gen_new_ca {
my ($self,$dn_hash) = @_;
my $rsa = Crypt::OpenSSL::RSA->generate_key($PREFERRED_KEYLENGTH);
my $privkey = Crypt::OpenSSL::CA::PrivateKey->parse(
$rsa->get_private_key_string
);
my $ca = Crypt::OpenSSL::CA::X509->new($privkey->get_public_key);
my $dn = Crypt::OpenSSL::CA::X509_NAME->new(%$dn_hash);
my $keyid = $privkey->get_public_key->get_openssl_keyid();
die "Need Distinguished Name for CA" if !$dn_hash;
$ca->set_serial("0x1");
$ca->set_notBefore("20080204101500Z");
$ca->set_notAfter("20220204101500Z");
$ca->set_subject_DN($dn);
$ca->set_issuer_DN($dn);
lib/Crypt/OpenSSL/Cloner.pm view on Meta::CPAN
issuer => $dn,
serial => "0x1"
});
$ca->set_extension("basicConstraints", "CA:TRUE", -critical => 1);
#$ca->set_extension("keyUsage" =>
# "digitalSignature, nonRepudiation,".
# "keyEncipherment, dataEncipherment, keyAgreement,".
# "keyCertSign, cRLSign");
my $crt_text = $ca->sign($privkey, $PREFERRED_ALG);
return [$ca,$privkey,$crt_text,$rsa->get_private_key_string];
}
sub new {
my ($cls,%opts) = @_;
my $self = {};
bless ($self, $cls);
lock_keys(%$self, @FIELDS);
my $path = delete $opts{path} or die "Must have CA path";
my $dn_hash = delete $opts{dn};
$dn_hash ||= {
lib/Crypt/OpenSSL/Cloner.pm view on Meta::CPAN
write_file($path . "/$CA_BASENAME.key", $keytxt);
}
$self->{CA_OBJ} = $ca_obj;
$self->{PRIVKEY_OBJ} = $privkey_obj;
return $self;
}
sub clone_cert {
my ($self,$pem,$domain_name) = @_;
my $keystr = Crypt::OpenSSL::RSA->generate_key(1024)->get_private_key_string();
my $privkey = Crypt::OpenSSL::CA::PrivateKey->parse($keystr);
my $new_cert = Crypt::OpenSSL::CA::X509->new($privkey->get_public_key);
my $alt_name_string = ($domain_name) ? "DNS:$domain_name" : "";
$new_cert->set_subject_DN(Crypt::OpenSSL::CA::X509->parse($pem)->get_subject_DN);
$new_cert->set_issuer_DN($self->{CA_OBJ}->get_issuer_DN);
$new_cert->set_notBefore("20080204114600Z");
$new_cert->set_notAfter("20220204114600Z");
$new_cert->set_extension("authorityKeyIdentifier",
( run in 0.460 second using v1.01-cache-2.11-cpan-a5abf4f5562 )