Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer

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 -

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 all is quiet...

How do I use this? | Other CB clients
Other Users?
Others surveying the Monastery: (5)
As of 2017-08-17 06:06 GMT
Find Nodes?
    Voting Booth?
    Who is your favorite scientist and why?

    Results (282 votes). Check out past polls.