xedlock

Split CA bundle into separate CA cert files

Jul 24th, 2013
323
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 1.71 KB | None | 0 0
  1. #!/usr/bin/perl
  2. #
  3. # cert-split-batch.pl - splits big ca bundle into lots of little ca files
  4. #
  5.  
  6. my $filename = shift;
  7. unless($filename) {
  8.   die("Usage:\n  cert-split-batch.pl <certificate-file>\n");
  9. }
  10.  
  11. open INP, "<$filename" or die("Unable to load \"$filename\"\n");
  12.  
  13. my $ifile = "";
  14. my $thisfile = "";
  15. while(<INP>) {
  16.    $ifile .= $_;
  17.    $thisfile .= $_;
  18.    if($_ =~ /^\-+END(\s\w+)?\sCERTIFICATE\-+$/) {
  19.       print "Found a complete certificate:\n";
  20.       print `echo "$thisfile" | openssl x509 -noout -issuer -subject`;
  21.       $subjectDump = `echo "$thisfile" | openssl x509 -noout -subject`;
  22.    if ($subjectDump =~ m/.*\/O=.*/) {
  23.     $ORegex = $subjectDump;
  24.     $ORegex =~ s/.*\/O=(.*?)($|\/.*)/$1/;
  25.     #print "O:".$ORegex."\n";
  26.     $genFileName = $ORegex;
  27.    }
  28.    if ($subjectDump =~ m/.*\/OU=.*/) {
  29.     $OURegex = $subjectDump;
  30.     $OURegex =~ s/.*\/OU=(.*?)($|\/.*)/$1/;
  31.     #print "OU:".$OURegex."\n";
  32.     $genFileName .= "-".$OURegex;
  33.    }
  34.    if ($subjectDump =~ m/.*\/CN=.*/) {
  35.     $CNRegex = $subjectDump;
  36.     $CNRegex =~ s/.*\/CN=(.*?)($|\/.*)/$1/;
  37.     #print "CN:".$CNRegex."\n";
  38.     $genFileName .= "-".$CNRegex;
  39.    }
  40.    $genFileName =~ s/[\(\).,\[\]<>\{\}\s\'\"\:\;\&\n]//g;
  41.       #print $genFileName."\n";
  42.       $genFileName =~ s/[^\d\w_-]/_/g;
  43.       #print $genFileName."\n";
  44.    $genFileName =~ s/(.*?)_$/$1/g;
  45.       #print $genFileName."\n";
  46.       $genFileName .= '.crt';
  47.       #print $genFileName."\n";
  48.  
  49.       print "Saving certificate files as ".$genFileName."\n";
  50.       my $fname = $genFileName;
  51.  
  52.       open CERT, ">$fname";
  53.       print CERT $thisfile;
  54.       close CERT;
  55.  
  56.       $thisfile = "";
  57.  
  58.       print "Certificate saved\n\n";
  59.    }
  60. }
  61. close INP;
  62.  
  63. print "Completed\n";
Advertisement
Add Comment
Please, Sign In to add comment