The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl
# 19.6.1998, Sampo Kellomaki <sampo@iki.fi>
# 31.3.1999, Upgraded to OpenSSL-0.9.2b, --Sampo
# 31.7.1999, Upgraded to OpenSSL-0.9.3a, fixed depending on symlinks
#            (thanks to schinder@@pobox_.com) --Sampo
# 7.4.2001,  Upgraded to OpenSSL-0.9.6a --Sampo
# 9.11.2001, EGD patch from Mik Firestone <mik@@speed.stdio._com> --Sampo
#
# Make a self signed cert

use strict;
use warnings;
use File::Copy;
use File::Spec::Functions qw(catfile);

my $dir      = shift || usage();
my $exe_path = shift || '/usr/local/ssl/bin/openssl';
my $egd      = defined( $ENV{EGD_POOL} ) ? "-rand $ENV{EGD_POOL}" : '';

my $conf = catfile($dir, 'req.conf');
my $key  = catfile($dir, 'key.pem' );
my $cert = catfile($dir, 'cert.pem');

open (REQ, "|$exe_path req -config $conf "
      . "-x509 -days 3650 -new -keyout $key $egd >$cert")
    or die "cant open req. check your path ($!)";
print REQ <<DISTINGUISHED_NAME;
XX
Net::SSLeay
test land
Test City
Net::SSLeay Organization
Test Unit
127.0.0.1
sampo\@iki.fi
DISTINGUISHED_NAME
    ;
close REQ;
system "$exe_path verify $cert";  # Just to check

# Generate an encrypted password too
system "$exe_path rsa -in $key -des -passout pass:secret -out $key.e"; 

### Prepare examples directory as certificate directory

my $hash = `$exe_path x509 -inform pem -hash -noout <$cert`;
chomp $hash;

my $hash_file = catfile($dir, "$hash.0");
unlink $hash_file;
copy($cert, $hash_file) or die "Can't symlink $dir/$hash.0 ($!)";

sub usage {
    die "Usage: $0 DIR [PATH_TO_OPENSSL]";
}