Beefy Boxes and Bandwidth Generously Provided by pair Networks RobOMonk
Your skill will accomplish
what the force of many cannot

SSL certificate generator

by IlyaM (Parson)
on Aug 07, 2003 at 14:00 UTC ( #281897=CUFP: print w/ replies, xml ) Need Help??

I routinely create self subscribed SSL certs for testing purposes. So I wrote this script to automate this process:
#!/usr/bin/perl use strict; use warnings; use IPC::Run qw(start run); my $hostname = shift @ARGV; die "Usage: make_cert HOSTNAME" unless defined $hostname; { print "CREATE THE KEY AND REQUEST:\n\n"; my @cmd = qw(openssl req -new -keyout temp.pem -out temp.csr); my @io = ('Enter PEM pass phrase:', 'test', 'Verifying password - Enter PEM pass phrase:', 'test', 'Country Name.*:', 'UK', 'State.*:', 'Warwickshire', 'Locality Name.*:', 'Kenilworth', 'Organization Name.*:', 'Iponweb Ltd', 'Organizational Unit Name.*:', '', 'Common Name.*:', $hostname, 'Email Address.*', '', 'A challenge password.*:', '', 'An optional company name.*:', ''); expect(cmd => \@cmd, io => \@io); print "\n"; } { print "REMOVE THE PASSPHRASE FROM THE KEY:\n\n"; my @cmd = qw(openssl rsa -in temp.pem -out temp.key); my @io = ('Enter PEM pass phrase:', 'test'); expect(cmd => \@cmd, io => \@io); print "\n"; } { print "CREATE THE KEY AND REQUEST:\n\n"; my @cmd = qw(openssl x509 -in temp.csr -out temp.cert -req -signke +y temp.key -days 365); my @io = (); expect(cmd => \@cmd, io => \@io); print "\n"; } { print "PREPARING FILES:\n\n"; unlink 'temp.csr'; my $cert = $hostname . '.cert'; rename 'temp.cert', $cert; my $key = $hostname . '.key'; rename 'temp.key', $key; print "$cert and $key are ready for usage\n\n"; } sub expect { my %param = @_; my @io = @{$param{io}}; my $out; my $in; my $h = start($param{cmd}, '<pty<', \$in, '>pty>', \$out); my $last_length = 0; while(1) { my $expected = shift @io; last unless defined $expected; my $input = shift @io; last unless defined $input; until($out =~ /\G.*$expected/sgc) { $h->pump; local $| = 1; print substr $out, $last_length; $last_length = length $out; } $in .= $input . "\n"; } $h->finish; print substr $out, $last_length; }

Ilya Martynov,
Quality Perl Programming and Unix Support UK managed @ offshore prices -
Personal website -

Comment on SSL certificate generator
Download Code

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: CUFP [id://281897]
Approved by sschneid
Front-paged by gmax
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others imbibing at the Monastery: (12)
As of 2014-04-17 10:43 GMT
Find Nodes?
    Voting Booth?

    April first is:

    Results (444 votes), past polls