mirror of
https://github.com/openssl/openssl.git
synced 2025-02-17 14:32:04 +08:00
RT3291: Add -crl and -revoke options to CA.pl
I added some error-checking while integrating this patch. Reviewed-by: Tim Hudson <tjh@openssl.org>
This commit is contained in:
parent
fe7573042f
commit
98ecf60ba6
@ -1,37 +1,10 @@
|
|||||||
#!/usr/local/bin/perl
|
#!/usr/local/bin/perl
|
||||||
#
|
#
|
||||||
# CA - wrapper around ca to make it easier to use ... basically ca requires
|
# CA - wrapper around ca to make it easier to use
|
||||||
# some setup stuff to be done before you can use it and this makes
|
|
||||||
# things easier between now and when Eric is convinced to fix it :-)
|
|
||||||
#
|
#
|
||||||
# CA -newca ... will setup the right stuff
|
# CA -newca ... will setup the right stuff
|
||||||
# CA -newreq[-nodes] ... will generate a certificate request
|
# CA -newreq[-nodes] ... will generate a certificate request
|
||||||
# CA -sign ... will sign the generated request and output
|
# CA -sign ... will sign the generated request and output
|
||||||
#
|
|
||||||
# At the end of that grab newreq.pem and newcert.pem (one has the key
|
|
||||||
# and the other the certificate) and cat them together and that is what
|
|
||||||
# you want/need ... I'll make even this a little cleaner later.
|
|
||||||
#
|
|
||||||
#
|
|
||||||
# 12-Jan-96 tjh Added more things ... including CA -signcert which
|
|
||||||
# converts a certificate to a request and then signs it.
|
|
||||||
# 10-Jan-96 eay Fixed a few more bugs and added the SSLEAY_CONFIG
|
|
||||||
# environment variable so this can be driven from
|
|
||||||
# a script.
|
|
||||||
# 25-Jul-96 eay Cleaned up filenames some more.
|
|
||||||
# 11-Jun-96 eay Fixed a few filename missmatches.
|
|
||||||
# 03-May-96 eay Modified to use 'ssleay cmd' instead of 'cmd'.
|
|
||||||
# 18-Apr-96 tjh Original hacking
|
|
||||||
#
|
|
||||||
# Tim Hudson
|
|
||||||
# tjh@cryptsoft.com
|
|
||||||
#
|
|
||||||
|
|
||||||
# 27-Apr-98 snh Translation into perl, fix existing CA bug.
|
|
||||||
#
|
|
||||||
#
|
|
||||||
# Steve Henson
|
|
||||||
# shenson@bigfoot.com
|
|
||||||
|
|
||||||
# default openssl.cnf file has setup as per the following
|
# default openssl.cnf file has setup as per the following
|
||||||
# demoCA ... where everything is stored
|
# demoCA ... where everything is stored
|
||||||
@ -57,6 +30,7 @@ $CATOP="./demoCA";
|
|||||||
$CAKEY="cakey.pem";
|
$CAKEY="cakey.pem";
|
||||||
$CAREQ="careq.pem";
|
$CAREQ="careq.pem";
|
||||||
$CACERT="cacert.pem";
|
$CACERT="cacert.pem";
|
||||||
|
$CACRL="crl.pem";
|
||||||
|
|
||||||
$DIRMODE = 0777;
|
$DIRMODE = 0777;
|
||||||
|
|
||||||
@ -65,6 +39,7 @@ $RET = 0;
|
|||||||
foreach (@ARGV) {
|
foreach (@ARGV) {
|
||||||
if ( /^(-\?|-h|-help)$/ ) {
|
if ( /^(-\?|-h|-help)$/ ) {
|
||||||
print STDERR "usage: CA -newcert|-newreq|-newreq-nodes|-newca|-sign|-verify\n";
|
print STDERR "usage: CA -newcert|-newreq|-newreq-nodes|-newca|-sign|-verify\n";
|
||||||
|
print STDERR " CA -crl|-revoke cert-filename [reason]\n";
|
||||||
exit 0;
|
exit 0;
|
||||||
} elsif (/^-newcert$/) {
|
} elsif (/^-newcert$/) {
|
||||||
# create a certificate
|
# create a certificate
|
||||||
@ -160,17 +135,50 @@ foreach (@ARGV) {
|
|||||||
} else {
|
} else {
|
||||||
system ("$VERIFY -CAfile $CATOP/$CACERT newcert.pem");
|
system ("$VERIFY -CAfile $CATOP/$CACERT newcert.pem");
|
||||||
$RET=$?;
|
$RET=$?;
|
||||||
exit 0;
|
exit $RET;
|
||||||
}
|
}
|
||||||
|
} elsif (/^-crl$/) {
|
||||||
|
system ("$CA -gencrl -out $CATOP/crl/$CACRL");
|
||||||
|
$RET=$?;
|
||||||
|
print "Generated CRL is in $CATOP/crl/$CACRL\n" if (!$RET);
|
||||||
|
} elsif (/^-revoke$/) {
|
||||||
|
my $cname = $ARGV[1];
|
||||||
|
if (!defined $cname) {
|
||||||
|
print "Certificate filename is required; reason optional.\n";
|
||||||
|
exit 1;
|
||||||
|
}
|
||||||
|
my $reason = $ARGV[2];
|
||||||
|
$reason = " -crl_reason $reason"
|
||||||
|
if defined $reason && crl_reason_ok($reason);
|
||||||
|
my $cmd = "$CA -revoke \"$cname\"".$reason;
|
||||||
|
system ($cmd);
|
||||||
|
$RET=$?;
|
||||||
|
exit $RET;
|
||||||
} else {
|
} else {
|
||||||
print STDERR "Unknown arg $_\n";
|
print STDERR "Unknown arg $_\n";
|
||||||
print STDERR "usage: CA -newcert|-newreq|-newreq-nodes|-newca|-sign|-verify\n";
|
print STDERR "usage: CA -newcert|-newreq|-newreq-nodes|-newca|-sign|-verify\n";
|
||||||
|
print STDERR " CA -crl|-revoke cert-filename [reason]\n";
|
||||||
exit 1;
|
exit 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
exit $RET;
|
exit $RET;
|
||||||
|
|
||||||
|
sub crl_reason_ok {
|
||||||
|
my ($r) = shift;
|
||||||
|
if ($r eq 'unspecified' || $r eq 'keyCompromise' ||
|
||||||
|
$r eq 'CACompromise' || $r eq 'affiliationChanged' ||
|
||||||
|
$r eq 'superseded' || $r eq 'cessationOfOperation' ||
|
||||||
|
$r eq 'certificateHold' || $r eq 'removeFromCRL') {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
print STDERR "Invalid CRL reason; must be one of:\n";
|
||||||
|
print STDERR " unspecified, keyCompromise, CACompromise,\n";
|
||||||
|
print STDERR " affiliationChanged, superseded, cessationOfOperation\n";
|
||||||
|
print STDERR " certificateHold, removeFromCRL";
|
||||||
|
exit 1;
|
||||||
|
}
|
||||||
|
|
||||||
sub cp_pem {
|
sub cp_pem {
|
||||||
my ($infile, $outfile, $bound) = @_;
|
my ($infile, $outfile, $bound) = @_;
|
||||||
open IN, $infile;
|
open IN, $infile;
|
||||||
|
Loading…
Reference in New Issue
Block a user