Apache-SecSess
view release on metacpan or search on metacpan
utils/mkcerts view on Meta::CPAN
#
$enccmd = ($opt_e) ?
"output_password = $spasswd" :
"encrypt_key = no";
$configinfo = <<"END_CONFILE";
[ req ]
default_bits = $rsabits
default_md = $digest
default_keyfile = $key
distinguished_name = req_distinguished_name
prompt = no
$enccmd
[ req_distinguished_name ]
END_CONFILE
for $dtag (@x500tags) {
if (defined($hr->{$dtag})) {
$configinfo .= sprintf("%s\t\t= %s\n", $dtag, $hr->{$dtag});
}
}
if (defined($hr->{'email'})) {
$configinfo .= sprintf("emailAddress\t\t= %s\n", $hr->{'email'});
}
open(CONFILE, ">$confile") || die "cannot create config file: $confile";
printf CONFILE "%s\n", $configinfo;
close(CONFILE);
#
# create cert request
#
system(
"openssl req -config $confile -new -out $req"
) == 0 or die "problem creating certificate request for: $name";
#
# sign the request
#
# sign
open(SIGNREQ, "| openssl x509 -req -in $req -passin stdin -$digest " .
"-CA $cacert -CAkey $cakey -CAcreateserial -days $days -out $cert"
) or die "problem signing certificate request for: $name";
printf SIGNREQ "%s\n", $capasswd;
close(SIGNREQ);
# clean up
unlink($confile, $req) || die "cannot clean up";
# display
if ($opt_d) {
printf(":\n: Newly Signed Certificate for '%s'\n:\n", $name);
system(
"openssl x509 -in $cert -noout -text"
) == 0 or die "problem printing certificate: $cert";
printf(":\n: Verifying '%s' ...\n:\n", $name);
system(
"openssl x509 -in $cert -noout -fingerprint"
) == 0 or die "certificate fingerprint problem: $name";
printf("verifying signature ...\n");
system(
"openssl verify -verbose -CAfile $cacert $cert"
) == 0 or die "certificate fingerprint problem: $name";
}
}
#
# create the SSL server certs under CA's domain
#
sub mksslserv {
my $s = shift;
my($servdns, $name);
if ($s =~ /\.$/) { # host within signing domain
$name = $`;
$servdns = sprintf("%s%s", $s, $dns);
}
else { # hosts outside signing domain
$name = $s;
$servdns = $s;
}
#
# copy most X.500 tags from CA's cert
#
&mknsign($opt_e, {
'name' => $name,
'C' => $dnc,
'ST' => $dnst,
'L' => $dnl,
'O' => $company,
'CN' => $servdns,
'email' => "trustmaster\@$dns"
});
}
#
# make PKCS12 client certificate for browser import
#
sub mkpkcs12 {
my $c = shift;
my($email,$nick,$full,$cert,$key,$pemfile,$p12file,);
#
# parse nick name, email and full name
#
$email = $c->{'email'};
if ($email =~ /^([^@]+)@/) { # full email passed
$nick = $1;
}
else { # short email passed
$nick = $email;
$email = sprintf('%s@%s', $nick, $dns);
}
$full = $c->{'full'};
#
# make *-cert.pem & *-key.pem, copying tags from CA's if nec.
#
&mknsign(0, {
'name' => $nick,
'C' => defined($c->{'C'}) ? $c->{'C'} : $dnc,
( run in 0.847 second using v1.01-cache-2.11-cpan-39bf76dae61 )