root/contrib/smime_keys_test.pl

Revision 2962:8ded4bd9cfbc, 3.4 kB (checked in by Thomas Roessler <roessler@…>, 7 years ago)

Include a test script by Mike Schiraldi. It's perl > the one I have
installed, so I'm just putting it into contrib for now.

Line 
1#! /usr/bin/perl -W
2
3# by Mike Schiraldi <raldi@research.netsol.com>
4
5use strict;
6use Expect;
7
8sub run ($;$ );
9
10umask 077; # probably not necc. but can't hurt
11
12my $tmpdir = "/tmp/smime_keys_test-$$-" . time;
13
14mkdir $tmpdir or die;
15chdir $tmpdir or die;
16
17open TMP, '>muttrc' or die;
18print TMP <<EOF;
19set smime_ca_location="$tmpdir/ca-bundle.crt"
20set smime_certificates="$tmpdir/certificates"
21set smime_keys="$tmpdir/keys"
22EOF
23close TMP;
24
25$ENV{MUTT_CMDLINE} = "mutt -F $tmpdir/muttrc";
26
27# make a user key
28run 'smime_keys init';
29run 'openssl genrsa -out user.key 1024';
30
31# make a request for this key to be signed
32run 'openssl req -new -key user.key -out newreq.pem', "\n\nx\n\nx\nx\nuser\@smime.mutt\n\nx\n";
33
34mkdir 'demoCA' or die;
35mkdir 'demoCA/certs' or die;
36mkdir 'demoCA/crl' or die;
37mkdir 'demoCA/newcerts' or die;
38mkdir 'demoCA/private' or die;
39open OUT, '>demoCA/serial' or die;
40print OUT "01\n";
41close OUT;
42open OUT, '>demoCA/index.txt' or die;
43close OUT;
44
45# make the CA
46run 'openssl req -new -x509 -keyout demoCA/private/cakey.pem -out demoCA/cacert.pem -days 7300 -nodes', 
47    "\n\nx\n\nx\nx\n\n";
48
49# trust it
50run 'smime_keys add_root demoCA/cacert.pem', "root_CA\n";
51
52# have the CA process the request
53run 'openssl ca -batch -startdate 000101000000Z -enddate 200101000000Z -days 7300 ' .
54    '-policy policy_anything -out newcert.pem -infiles newreq.pem';
55
56unlink 'newreq.pem' or die;
57
58# put it all in a .p12 bundle
59run 'openssl pkcs12 -export -inkey user.key -in newcert.pem -out cert.p12 -CAfile demoCA/cacert.pem -chain', "pass1\n" x 2;
60unlink 'newcert.pem' or die;
61unlink 'demoCA/cacert.pem' or die;
62unlink 'demoCA/index.txt' or die;
63unlink 'demoCA/index.txt.old' or die;
64unlink 'demoCA/serial' or die;
65unlink 'demoCA/serial.old' or die;
66unlink 'demoCA/newcerts/01.pem' or die;
67unlink 'demoCA/private/cakey.pem' or die;
68rmdir  'demoCA/certs' or die;
69rmdir  'demoCA/crl' or die;
70rmdir  'demoCA/private' or die;
71rmdir  'demoCA/newcerts' or die;
72rmdir  'demoCA' or die;
73
74# have smime_keys process it
75run 'smime_keys add_p12 cert.p12', "pass1\n" . "pass2\n" x 2 . "old_label\n";
76unlink 'cert.p12' or die;
77
78# make sure it showed up
79run 'smime_keys list > list';
80
81open IN, 'list' or die;
82<IN> eq "\n" or die;
83<IN> =~ /^(.*)\: Issued for\: user\@smime\.mutt \"old_label\" \(Unverified\)\n/ or die;
84close IN;
85
86my $keyid = $1;
87
88# see if we can rename it
89run "smime_keys label $keyid", "new_label\n";
90
91# make sure it worked
92run 'smime_keys list > list';
93
94open IN, 'list' or die;
95<IN> eq "\n" or die;
96<IN> =~ /^$keyid\: Issued for\: user\@smime\.mutt \"new_label\" \(Unverified\)\n/ or die;
97close IN;
98
99unlink 'list' or die;
100
101# try signing something
102run "openssl smime -sign -signer certificates/$keyid -inkey user.key -in /etc/passwd -certfile certificates/37adefc3.0  > signed";
103unlink 'user.key' or die;
104
105# verify it
106run 'openssl smime -verify -out /dev/null -in signed -CAfile ca-bundle.crt';
107unlink 'signed' or die;
108
109# clean up
110unlink 'ca-bundle.crt' or die;
111unlink 'muttrc' or die;
112unlink 'keys/.index' or die;
113unlink 'certificates/.index' or die;
114unlink <keys/*> or die;
115unlink <certificates/*> or die;
116rmdir  'keys' or die;
117rmdir  'certificates' or die;
118chdir  '/' or die;
119rmdir  $tmpdir or die;
120
121
122sub run ($;$) {
123    my $cmd = shift or die;
124    my $input = shift;
125   
126    print "\n\nRunning [$cmd]\n";
127
128    my $exp = Expect->spawn ($cmd);
129    if (defined $input) {
130        print $exp $input;
131    }
132    $exp->soft_close;
133    $? and die "$cmd returned $?";
134}
Note: See TracBrowser for help on using the browser.