#!/usr/bin/perl $config = "/var/openssl/openssl.cnf"; $capath = "/usr/bin/openssl ca"; $certpass = "mypassword"; $tempca = "/tmp/ssl/cli".rand 10000; $tempout = "/tmp/ssl/certtmp".rand 10000; $caout = "/tmp/ssl/certout.txt"; $CAcert = "/var/openssl/localCA/cacert.pem"; $spkac = ""; &ReadForm; $spkac = $FIELDS{'SPKAC'}; $spkac =~ s/\n//g; open(TEMPCE,">$tempca") || die &Error; print TEMPCE "C = $FIELDS{'country'}\n"; print TEMPCE "ST = $FIELDS{'state'}\n"; print TEMPCE "O = $FIELDS{'organization'}\n"; print TEMPCE "Email = $FIELDS{'email'}\n"; print TEMPCE "CN = $FIELDS{'who'}\n"; print TEMPCE "SPKAC = $spkac\n"; close(TEMPCE); system("$capath -batch -config $config -spkac $tempca -out $tempout -key $certpass -cert $CAcert>> $caout 2>&1"); open(CERT,"$tempout") || die &Error; @certificate = ; close(CERT); #system("rm -f $tempca"); #system("rm -f $tempout"); print "Content-type: application/x-x509-user-cert\n\n"; print @certificate; ############################################################## #### #### Procedures #### sub ReadForm { if ($ENV{'REQUEST_METHOD'} eq 'GET') { @pairs = split(/&/, $ENV{'QUERY_STRING'}); } elsif ($ENV{'REQUEST_METHOD'} eq 'POST') { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); @pairs = split(/&/, $buffer); } foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $name =~ tr/+/ /; $name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $value =~ s///g; $FIELDS{$name} = $value; } } sub Error { print "Content-type: text/html\n\n"; print "

Cant open file

\n"; }