#!/usr/bin/perl
#
# cert-split-batch.pl - splits big ca bundle into lots of little ca files
#
my $filename = shift;
unless($filename) {
die("Usage:\n cert-split-batch.pl <certificate-file>\n");
}
open INP, "<$filename" or die("Unable to load \"$filename\"\n");
my $ifile = "";
my $thisfile = "";
while(<INP>) {
$ifile .= $_;
$thisfile .= $_;
if($_ =~ /^\-+END(\s\w+)?\sCERTIFICATE\-+$/) {
print "Found a complete certificate:\n";
print `echo "$thisfile" | openssl x509 -noout -issuer -subject`;
$subjectDump = `echo "$thisfile" | openssl x509 -noout -subject`;
if ($subjectDump =~ m/.*\/O=.*/) {
$ORegex = $subjectDump;
$ORegex =~ s/.*\/O=(.*?)($|\/.*)/$1/;
#print "O:".$ORegex."\n";
$genFileName = $ORegex;
}
if ($subjectDump =~ m/.*\/OU=.*/) {
$OURegex = $subjectDump;
$OURegex =~ s/.*\/OU=(.*?)($|\/.*)/$1/;
#print "OU:".$OURegex."\n";
$genFileName .= "-".$OURegex;
}
if ($subjectDump =~ m/.*\/CN=.*/) {
$CNRegex = $subjectDump;
$CNRegex =~ s/.*\/CN=(.*?)($|\/.*)/$1/;
#print "CN:".$CNRegex."\n";
$genFileName .= "-".$CNRegex;
}
$genFileName =~ s/[\(\).,\[\]<>\{\}\s\'\"\:\;\&\n]//g;
#print $genFileName."\n";
$genFileName =~ s/[^\d\w_-]/_/g;
#print $genFileName."\n";
$genFileName =~ s/(.*?)_$/$1/g;
#print $genFileName."\n";
$genFileName .= '.crt';
#print $genFileName."\n";
print "Saving certificate files as ".$genFileName."\n";
my $fname = $genFileName;
open CERT, ">$fname";
print CERT $thisfile;
close CERT;
$thisfile = "";
print "Certificate saved\n\n";
}
}
close INP;
print "Completed\n";
Comments