NAME

VOMS::Lite::X509 - Perl extension for X509 Certificate creation and examination

SYNOPSIS

use VOMS::Lite::X509;
%X509=VOMS::Lite::X509::Create(
                                 { 
                                   Serial=>0, 
                                   DN=>["C=GB","CN=my common name"],
                                 } 
                              );
my $DER=$X509{'Cert'};
%CertInfo= %{ 
              VOMS::Lite::X509::Examine( $DER, 
                                         { 
                                           SubjectDN=>"",
                                           IssuerDN=>""
                                         } 
                                       ) 
            }; 
print "$CertInfo{'SubjectDN'}\n$CertInfo{'IssuerDN'}\n";

DESCRIPTION

VOMS::Lite::X509 provides a library to create and to examine X509 cerificates.

VOMS::Lite::X509::Create

VOMS::Lite::X509::Create takes one argument, an anonymous hash containing all the relevant information required to make the X509 Certificate.

In the Hash the following scalars should be defined:
'Serial' the decimal value of the serial number for the certificate
'DN'     the array of attribute=value strings that make up the 
   Distinguished Name

Both or neither of these should be defined:
'CACert' the DER encoding of the issuing (CA) certificate.
'CAKey'  the DER encoding of the issuing (CA) key.

The following are optional:
  'Lifetime' the lifetime of the credential to be issued in seconds
  'CA'       can be either 'True' or 'False' if defined 
             (it sets the basic constraints and key usage values)
  'Bits'     the size of the key can be any of 512,1024,2048,4096
  'Extensions' a reference to an array of strings containing 
             X509 extensions i.e. an array of DER encoded: 
             SEQUENCE ::= { OID, 
                            extnID OBJECT IDENTIFIER, 
                            critical BOOLEAN DEFAULT FALSE, 
                            extnValue OCTET STRING  }

  'subjectAltName' a reference to an Array of Generalnames e.g.
            [ 'rfc822Name=mike.jones@manchester.ac.uk',
              'dNSName=a.dns.fqdn',
              'directoryName=300f310d300b060355040313044d696b65', 
                 # The hex can also be specified as unsigned chars
              'uniformResourceIdentifier=http://www.mc.manchester.ac.uk/projects/shebangs/',
              'IPAddress=\202\130\001\202\377\377\377\377' ]

The return value is a hash reference containing the X509 Certificate and Key strings in DER format (Cert and Key), a reference to an array of 'Warnings' (a certificate will still be created if warnings are present), a reference to an array of 'Errors' (if an error is encountered then no Proxy will be produced), and a string 'Hash' of the openssl-type for the produced certificate's name.

VOMS::Lite::X509::Examine

VOMS::Lite::X509::Examine takes two arguments: the DER encoded X509 certificate and a hash of the required information. If defined in the hash of the first element in the call to Examine the following variables will be parsed from the certificate and returned in the return referenced hash. Chuncks of DER encoded data directly from the certificate: 'X509version' - DER encoded version 'X509serial' - DER encoded serial number 'X509signature' - DER encoded siganture type 'X509issuer' - DER encoded issuer 'X509validity' - DER encoded validity 'X509subject' - DER encoded subject 'X509subjectPublicKeyInfo' - DER encoded subject Public Key Info 'X509issuerUniqueID' - DER encoded Issuer Unique ID 'X509subjectUniqueID' - DER encoded Subject Unique ID 'X509extensions' - DER encoded Extensions

'Start'                     - Valid from value of the certificate
                              (seconds since midnight 1 Jan 1970)
'End'                       - Valid until value of the certificate
                              (seconds since midnight 1 Jan 1970)
'SubjectDN'                 - Subject's DN string, slash seperated
                              representation (yuk)
'IssuerDN'                  - Issuer's DN string, slash seperated
                              representation (yuk)

'subjectKeyIdentifier'      - byte string representing the Subject
                              Key Identifier extension
'authorityKeyIdentifier'    - DER encoded Authority Key Identifier
                              extension, if set the folloring
                              binary values will also be returned:
  'authorityKeyIdentifierSkid'    - Authority's Subject Key
                                    Identifier (byte string)
  'authorityKeyIdentifierIssuer'  - Authority's General Name DER
                                    encoded
  'authorityKeyIdentifierSerial'  - Authority's Serial Number as a
                                    hex string.
'keyUsage'                  - The Packed keyUsage extension value,
                              if set the folloring binary values
                              will also be returned:
  'keyUsageDigitalSignature'    0=false, 1=true
  'keyUsageNonRepudiation'      0=false, 1=true
  'keyUsageKeyEncipherment'     0=false, 1=true
  'keyUsageDataEncipherment'    0=false, 1=true
  'keyUsageKeyAgreement'        0=false, 1=true
  'keyUsageKeyCertSign'         0=false, 1=true
  'keyUsageCRLSign'             0=false, 1=true
  'keyUsageEncipherOnly'        0=false, 1=true
  'keyUsageDecipherOnly'        0=false, 1=true
'basicConstraints'          - The Packed keyUsage extension value,
                              if set the folloring binary values
                              will also be returned:
  'basicConstraintsCA'          0=false, 1=true
  'basicConstraintsPathLen'     path length integer

EXPORT

None;

SEE ALSO

RFC3820

This module was originally designed for the SHEBANGS project at The University of Manchester. http://www.mc.manchester.ac.uk/projects/shebangs/ now http://www.rcs.manchester.ac.uk/research/shebangs/

Mailing list, shebangs@listserv.manchester.ac.uk

Mailing list, voms-lite@listserv.manchester.ac.uk

AUTHOR

Mike Jones <mike.jones@manchester.ac.uk>

COPYRIGHT AND LICENSE

Copyright (C) 2006 by Mike Jones

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.8.3 or, at your option, any later version of Perl 5 you may have available.