#!/usr/bin/perl -w # $Id: sslcsr.pl,v 1.3 2005/04/06 13:38:52 retoh Exp $ $| = 1; use strict; my $VERSION = '0.80.02'; use Expect; ##### PROTOTYPING sub cmd($); sub Debug($); ##### GLOBAL my $PID = $$; my $exp; my $COMMON_NAME = $ARGV[0] || 'www.example.org'; my $bypass_cmd = my $opt_params = ''; &main(); sub main() { (my $key_file_name = $COMMON_NAME) =~ tr/\./_/; $key_file_name .= "_$PID"; # Generate private key #$bypass_cmd = "export HOME=/var/www/cgi-bin/.home;"; #$opt_params = " -rand \$HOME/.rnd"; cmd $bypass_cmd . "openssl genrsa$opt_params -des3 -out /tmp/$key_file_name\.key 1024"; # my $patidx = $exp->expect(30, "Enter pass phrase for /tmp/$key_file_name"); my $patidx = $exp->expect(30, "Enter "); $exp->send("1234\n"); # $patidx = $exp->expect(30, "Verifying - Enter pass phrase for /tmp/$key_file_name"); $patidx = $exp->expect(30, "Verifying "); $exp->send("1234\n"); rename "/tmp/$key_file_name\.key", "/tmp/$key_file_name\.key.secure"; $exp->interact(); # close previous command! cmd "openssl rsa -in /tmp/$key_file_name\.key.secure -out /tmp/$key_file_name\.key"; # $patidx = $exp->expect(30, "Enter pass phrase for /tmp/$key_file_name"); $patidx = $exp->expect(30, "Enter "); $exp->send("1234\n"); $exp->interact(); # close previous command! cmd "openssl req -new -days 365 -key /tmp/$key_file_name\.key -out /tmp/$key_file_name\.csr"; &genCSR( country => 'CH' , state => 'Zurich', city => 'Zurich' , company => 'My Org Ltd' , section => 'mySection' , common_name => $COMMON_NAME , email => 'foo@example.org' , ); $exp->interact(); print "\n"; open(KEY, ") { print $_; } close KEY; print "\n"; open(CSR, ") { print $_; } close CSR; } sub genCSR (%) { my %args = @_; my $patidx = $exp->expect(30, 'Country Name '); $exp->send("$args{'country'}\n"); $patidx = $exp->expect(30, 'State or Province Name (full name) ['); $exp->send("$args{'state'}\n"); $patidx = $exp->expect(30, 'Locality Name (eg, city) ['); $exp->send("$args{'city'}\n"); $patidx = $exp->expect(30, 'Organization Name (eg, company) ['); $exp->send("$args{'company'}\n"); $patidx = $exp->expect(30, 'Organizational Unit Name '); $exp->send("$args{'section'}\n"); $patidx = $exp->expect(30, 'Common Name '); $exp->send("$args{'common_name'}\n"); $patidx = $exp->expect(30, 'Email Address ['); $exp->send("$args{'email'}\n"); $patidx = $exp->expect(30, 'A challenge password ['); $exp->send("\n"); $patidx = $exp->expect(30, 'An optional company name ['); $exp->send("\n"); } sub cmd ($) { my $cmd = $_[0]; my $errmsg = ''; $exp = new Expect; $exp->spawn($cmd) or $errmsg = $!; if ($errmsg) { Debug $errmsg; exit; } Debug "\n$cmd\n--------------------------------------------------------------------------------------\n"; } sub Debug($) { print "[DEBUG] $_[0]\n"; }