Debian lenny version packages
[pkg-perl] / deb-src / libio-socket-ssl-perl / libio-socket-ssl-perl-1.16 / util / export_certs.pl
1 #
2 # a script for exporting Netscape navigator's certificate database
3 # (aspa@hip.fi).
4 #
5 # $Id: export_certs.pl,v 1.1 2000/08/08 06:37:56 aspa Exp $.
6 #
7 # additional information:
8 # - http://www.drh-consultancy.demon.co.uk/cert7.html
9 # - man xxd
10 #
11 # conversion from DER format:
12 # /usr/local/ssl/bin/x509 -inform der -text < cert.der
13 #
14
15 use strict;
16
17 my (%certhash, $key, $val);
18 my $cert_db_path = $ENV{'HOME'} . "/.netscape/cert7";
19 my $rcnt = 0;
20
21 print STDERR "opening '$cert_db_path'.\n";
22
23 if( ! dbmopen(%certhash, $cert_db_path, undef) ) {
24         print STDERR "dbmopen failed: '$!'.\n";
25 }
26
27 while ( ($key, $val) = each %certhash ) {
28   my ($rec_type, $data, $klen, $vlen, $cert);
29
30   $rcnt++;
31
32   # get key info: [type] [data]
33   ($rec_type, $data) = unpack("Ca*", $key);
34   
35   # get additional diagnostics info.
36   $klen = length($key);
37   $vlen = length($val);
38   print STDERR "$rcnt: \t record type: '$rec_type'. key len: " . 
39     "'$klen, \t value len: '$vlen'.\n";
40
41   # check record type.
42   if($rec_type != 1) {
43     # not a certificate record. skip it.
44     next;
45   }
46
47   # it is a certificate record.
48
49   # certificates are stored in DER format starting at offset 13.
50   $cert = substr($val, 13);
51
52   # save cert in DER format.
53   open(C_FILE, ">tmp/cert-$rcnt.der");
54   print C_FILE "$cert";
55   close(C_FILE);
56
57 }
58
59 dbmclose(%certhash);
60