OpenCA::OpenSSL.3pm

Langue: en

Version: 2003-05-05 (openSuse - 09/10/07)

Section: 3 (Bibliothèques de fonctions)

NAME

OpenCA::OpenSSL - Perl Crypto Extention to OpenSSL

SYNOPSIS


  use OpenCA::OpenSSL;



DESCRIPTION

This Perl Module implements an interface to the openssl backend program. It actually uses the openssl command and it is not fully integrated as PERL/C mixture.

Passing parameters to functions should be very simple as them have no particular order and have, often, self-explaining name. Each parameter should be passed to the function like this:


        ... ( NAME=>VALUE, NAME=>VALUE, ... );



FUNCTIONS

sub new () - Creates a new Class instance.


        This functions creates a new instance of the class. It accepts

        only one parameter: the path to the backend command (openssl).

        This is due because if it cannot find the openssl command it

        will return an uninitialized class (default value is /usr/bin/

        openssl which may not fit many distributions/OSs)




        EXAMPLE:




                my $openssl->new OpenCA::OpenSSL( $path );



sub setParams () - Set internal module variables.


        This function can handle the internal module data such as the

        backend path or the tmp dir. Accepted parameters are:




                SHELL   - Path to the openssl command.

                CONFIG  - Path to the openssl config file.

                TMPDIR  - Temporary files directory.

                STDERR  - Where to redirect the STDERR file.




        (*) - Optional parameters;




        EXAMPLE:




                $openssl->setParams( SHELL=>'/usr/local/ssl/bin/openssl',

                                     CONFIG=>$ca/stuff/openssl.cnf,

                                     TMPDIR=>'/tmp',

                                     STDERR=>'/dev/null' );



sub errno () - Get last command errno value.


        This functions returns last operation's errno value. Non

        zero value means there has been an error.




        EXAMPLE:




                print $openssl->errno;



sub errval () - Get last command errval value.


        This functions returns last operation's errval value. This

        value usually has a brief error description.




        EXAMPLE:




                print $openssl->errval;



sub genKey () - Generate a private Key.


        This functions let you generate a new private key. Accepted

        parameters are:




                BITS      - key lengh in bits(*);

                OUTFILE   - Output file name(*);

                ALGORITHM - Encryption Algorithm to be used(*);

                PASSWD    - Password to be used when encrypting(*);




        (*) - Optional parameters;




        EXAMPLE:




                my $key = $openssl->genKey( BITS=>1024 );



sub genReq () - Generate a new Request.


        This function generate a new certificate request. Accepted

        parameters are:




                OUTFILE  - Output file(*);

                KEYFILE  - File containing the key;

                PASSWD   - Password to decript key (if needed) (*);

                DN       - Subject list (as required by openssl, see

                           the openssl.cnf doc on policy);

                SUBJECT  - DN string (use this instead of passing separate

                           attributes list)(*);




        (*) - Optional parameters;




        EXAMPLE:




                my $req = $openssl->genReq( KEYFILE=>"00_key.pem",

                        DN => [ "madwolf@openca.org","Max","","","" ] );




                my $req = $openssl->genReq( KEYFILE=>"00_key.pem",

                        SUBJECT => "CN=Madwolf, O=OpenCA, C=IT" );



sub genCert () - Generate a certificate from a request.


        This function let you generate a new certificate starting

        from the request file. It is used for self-signed certificate

        as it simply converts the request into a x509 structure.

        Accepted parameters are:




                OUTFILE   - Output file(*);

                KEYFILE   - File containing the private key;

                REQFILE   - Request File;

                PASSWD    - Password to decrypt private key(*);

                DAYS      - Validity days(*);




        (*) - Optional parameters;




        EXAMPLE:




                $cert = $openssl->genCert( KEYFILE=>"priv_key.pem",

                        REQFILE=>"req.pem",

                        DAYS=>"720" );



sub crl2pkcs7 () - Convert a crl and/or certs into pkcs7 structure.


        This function converts certificates (optional) and a crl

        (also optional) into a pkcs7 structure. It is used to build

        strucutures to load certificates/crls into some browsers.

        Accepted parameters are:




                DATA      - PEM|DER formatted CRL(*);

                INFORM    - Input crl format (DER|PEM) (*);

                OUTFORM   - Output pkcs7 structure format (DER|PEM) (*);

                INFILE    - Input crl file (*);

                OUTFILE   - Output pkcs7 file (*);

                CERTSLIST - List of files containing certificates to

                            be added to the pkcs7 structure (*);




        (*) - Optional parameters;




        EXAMPLE:




                $pkcs7 = $openssl->crl2pkcs7( DATA=>$crl->getPEM(),

                                CERTSLIST=>[ "cert1.pem", "cert2.pem" ]);



sub dataConvert () - Convert data to different format.


        This functions will convert data you pass to another format. Ir

        requires you to provide with the data's type and IN/OUT format.

        Accepted parameters are:




                DATA    - Data to be processed;

                INFILE  - Data file to be processed (one of DATA and

                          INFILE are required and exclusive);

                KEYFILE  - file with the priv. key (* PEM to PKCS12 only).

                           Not needed if key is presented in DATA or INFILE too.

                DATATYPE - Data type ( CRL | CERTIFICATE | REQUEST );

                OUTFORM  - Output format (PEM|DER|NET|TXT)(*);

                INFORM   - Input format (PEM|DER|NET|TXT)(*);

                OUTFILE  - Output file(*);

                PASSWD   - priv. key password (* PKCS12 to PEM only)

                           omitting the PASSWD leads into an unencrypted priv. key 

                ALGO     - des,des3 or idea. Default is des3 encryption for priv. key

                P12PASSWD - PKCS12 export password (* only needed for PKCS12)

                NOKEYS   - extract only the certificate (* PKCS12 to PEM only)

                           No need for the PASSWD parameter with this option.

                CACERT  - CA-certificate to add if OUTFORM is PKCS#12




        (*) - Optional parameters;




        EXAMPLES:

                # PEM file to TXT format

                print $openssl->dataConvert( INFILE=>"crl.pem",

                        OUTFORM=>"TXT" );




                # PEM file to PKCS12 format, priv key will be des3 encrypted

                print $openssl->dataConvert( INFILE=>"crl.pem",

                        DATATYPE=>'CERTIFICATE',

                        OUTFORM=>"PKCS12",

                        PASSWD=>$pem_pass,

                        P12PASSWD=>$export_pass );




                # PKCS12 data to PEM formated certificate (no key)

                print $openssl->dataConvert( DATA=>$pkcs12_cert,

                        DATATYPE=>'CERTIFICATE',

                        INFORM=>"PKCS12",

                        NOKEYS=>1,

                        P12PASSWD=>$export_pass );



sub issueCert () - Issue a certificate.


        This function should be used when you have a CA certificate and

        a request (either DER|PEM|SPKAC) and want to issue the certificate.

        Parameters used will override the configuration values (remember

        to set to appropriate value the CONFIG with the setParams func).

        Accepted parameters are:




                REQDATA       - Request;

                REQFILE       - File containing the request (one of

                                REQDATA, REQFILE or REQFILES are required);

                REQFILES      - An array ref to an array of files that

                                contain the request.

                OUTDIR        - What directory to put the files from 

                                REQFILES. (This is required iff 

                                you use REQFILES.)

                OUTFILE       - write the certificate to this file

                INFORM        - Input format (PEM|DER|NET|SPKAC)(*);

                PRESERVE_DN   - Preserve DN order (Y|N)(*);

                CA_NAME       - CA sub section to be used (take a

                                look at the OpenSSL docs for adding

                                support of multiple CAs to the conf

                                file)(*);

                CAKEY         - CA key file;

                CACERT        - CA certificate file;

                DAYS          - Days the certificate will be valid(*);

                START_DATE    - Starting validity date (YYMMDDHHMMSSZ)(*);

                END_DATE      - Ending validity date (YYMMDDHHMMSSZ)(*);

                PASSWD        - Password to decrypt priv. CA key(*);

                EXTS          - Extentions to be used (configuration

                                section of the openssl.cnf file)(*);

                REQTYPE       - Request type (NETSCAPE|MSIE)(*);




        (*) - Optional parameters;




        EXAMPLE:




                $openssl->issueCert( REQFILE=>"myreq",

                        INFORM=>SPKAC,

                        PRESERVE_DN=>Y,

                        CAKEY=>$ca/private/cakey.pem,

                        CACERT=>$ca/cacert.pem,

                        PASSWD=>$passwd,

                        REQTYPE=>NETSCAPE );



sub revoke () - Revoke a certificate.


        This function is used to revoke a certificate. Accepted parameters

        are:




                CAKEY   - CA private key file(*);

                CACERT  - CA certificate file(*);

                PASSWD  - Password to decrypt priv. CA key(*);

                INFILE  - Input PEM formatted certificate filename(*);




        (*) - Optional parameters;




        EXAMPLE:




                if( not $openssl->revoke( INFILE=>$certFile ) ) {

                        print "Error while revoking certificate!";

                }



sub issueCrl () - Issue a CRL.


        This function is used to issue a CRL. Accepted parameters

        are:




                CAKEY   - CA private key file;

                CACERT  - CA certificate file;

                PASSWD  - Password to decrypt priv. CA key(*);

                DAYS    - Days the CRL will be valid for(*);

                EXTS    - Extentions to be added ( see the openssl.cnf

                          pages for more help on this )(*);

                EXTFILE - Extensions file to be used (*);

                OUTFILE - Output file(*);

                OUTFORM - Output format (PEM|DER|NET|TXT)(*);




        (*) - Optional parameters;




        EXAMPLE:




                print $openssl->issueCrl( CAKEY=>"$ca/private/cakey.pem",

                                          CACERT=>"$ca/cacert.pem",

                                          DAYS=>7,

                                          OUTFORM=>TXT );



sub SPKAC () - Get SPKAC infos.


        This function returns a text containing all major info

        about an spkac structure. Accepted parameters are:




                SPKAC     - spkac data ( SPKAC = .... ) (*);

                INFILE    - An spkac request file (*);

                OUTFILE   - Output file (*);




        (*) - Optional parameters;




        EXAMPLE:




                print $openssl->SPKAC( SPKAC=>$data, OUTFILE=>$target );



sub pkcs7Certs () - Get PKCS7 structure certificate(s).


        This function returns a PEM formatted (file or ret value)

        contained in the pkcs7 structure. Accepted parameters are:




                PKCS7     - pkcs7 data (*);

                INFILE    - A pkcs7 (signature?) file (*);

                OUTFILE   - Output file (*);




        (*) - Optional parameters;




        EXAMPLE:




                print $openssl->pkcs7Cert( PKCS7=>$data, OUTFILE=>$target );



sub getDigest () - Get a message digest.


        This function returns a message digest. Default digest

        algorithm used is MD5. Accepted parameters are:




                DATA      - Data on which to perform digest;

                ALGORITHM - Algorithm to be used(*);




        (*) - Optional parameters;




        EXAMPLE:




                print $openssl->getDigest( DATA=>$data,

                                           ALGORITHM=>sha1);



sub updateDB () - Updates the OpenSSL index.txt


        This functions updates the index.txt file and returns the

        output of the command in the form:




                <SER>=Expired




        Accepted parameters are:




                CAKEY   - CA private key file;

                CACERT  - CA certificate file;

                PASSWD  - Password to decrypt priv. CA key(*);

                OUTFILE - Output file(*);




        (*) - Optional parameters;




        EXAMPLE:




                $ret = $openssl->updateDB();



Exportable constants


  CTX_TEST

  EXFLAG_BCONS

  EXFLAG_CA

  EXFLAG_INVALID

  EXFLAG_KUSAGE

  EXFLAG_NSCERT

  EXFLAG_SET

  EXFLAG_SS

  EXFLAG_V1

  EXFLAG_XKUSAGE

  GEN_DIRNAME

  GEN_DNS

  GEN_EDIPARTY

  GEN_EMAIL

  GEN_IPADD

  GEN_OTHERNAME

  GEN_RID

  GEN_URI

  GEN_X400

  KU_CRL_SIGN

  KU_DATA_ENCIPHERMENT

  KU_DECIPHER_ONLY

  KU_DIGITAL_SIGNATURE

  KU_ENCIPHER_ONLY

  KU_KEY_AGREEMENT

  KU_KEY_CERT_SIGN

  KU_KEY_ENCIPHERMENT

  KU_NON_REPUDIATION

  NS_OBJSIGN

  NS_OBJSIGN_CA

  NS_SMIME

  NS_SMIME_CA

  NS_SSL_CA

  NS_SSL_CLIENT

  NS_SSL_SERVER

  X509V3_EXT_CTX_DEP

  X509V3_EXT_DYNAMIC

  X509V3_EXT_MULTILINE

  X509V3_F_COPY_EMAIL

  X509V3_F_COPY_ISSUER

  X509V3_F_DO_EXT_CONF

  X509V3_F_DO_EXT_I2D

  X509V3_F_HEX_TO_STRING

  X509V3_F_I2S_ASN1_ENUMERATED

  X509V3_F_I2S_ASN1_INTEGER

  X509V3_F_I2V_AUTHORITY_INFO_ACCESS

  X509V3_F_NOTICE_SECTION

  X509V3_F_NREF_NOS

  X509V3_F_POLICY_SECTION

  X509V3_F_R2I_CERTPOL

  X509V3_F_S2I_ASN1_IA5STRING

  X509V3_F_S2I_ASN1_INTEGER

  X509V3_F_S2I_ASN1_OCTET_STRING

  X509V3_F_S2I_ASN1_SKEY_ID

  X509V3_F_S2I_S2I_SKEY_ID

  X509V3_F_STRING_TO_HEX

  X509V3_F_SXNET_ADD_ASC

  X509V3_F_SXNET_ADD_ID_INTEGER

  X509V3_F_SXNET_ADD_ID_ULONG

  X509V3_F_SXNET_GET_ID_ASC

  X509V3_F_SXNET_GET_ID_ULONG

  X509V3_F_V2I_ACCESS_DESCRIPTION

  X509V3_F_V2I_ASN1_BIT_STRING

  X509V3_F_V2I_AUTHORITY_KEYID

  X509V3_F_V2I_BASIC_CONSTRAINTS

  X509V3_F_V2I_CRLD

  X509V3_F_V2I_EXT_KU

  X509V3_F_V2I_GENERAL_NAME

  X509V3_F_V2I_GENERAL_NAMES

  X509V3_F_V3_GENERIC_EXTENSION

  X509V3_F_X509V3_ADD_VALUE

  X509V3_F_X509V3_EXT_ADD

  X509V3_F_X509V3_EXT_ADD_ALIAS

  X509V3_F_X509V3_EXT_CONF

  X509V3_F_X509V3_EXT_I2D

  X509V3_F_X509V3_GET_VALUE_BOOL

  X509V3_F_X509V3_PARSE_LIST

  X509V3_F_X509_PURPOSE_ADD

  X509V3_R_BAD_IP_ADDRESS

  X509V3_R_BAD_OBJECT

  X509V3_R_BN_DEC2BN_ERROR

  X509V3_R_BN_TO_ASN1_INTEGER_ERROR

  X509V3_R_DUPLICATE_ZONE_ID

  X509V3_R_ERROR_CONVERTING_ZONE

  X509V3_R_ERROR_IN_EXTENSION

  X509V3_R_EXPECTED_A_SECTION_NAME

  X509V3_R_EXTENSION_NAME_ERROR

  X509V3_R_EXTENSION_NOT_FOUND

  X509V3_R_EXTENSION_SETTING_NOT_SUPPORTED

  X509V3_R_EXTENSION_VALUE_ERROR

  X509V3_R_ILLEGAL_HEX_DIGIT

  X509V3_R_INVALID_BOOLEAN_STRING

  X509V3_R_INVALID_EXTENSION_STRING

  X509V3_R_INVALID_NAME

  X509V3_R_INVALID_NULL_ARGUMENT

  X509V3_R_INVALID_NULL_NAME

  X509V3_R_INVALID_NULL_VALUE

  X509V3_R_INVALID_NUMBER

  X509V3_R_INVALID_NUMBERS

  X509V3_R_INVALID_OBJECT_IDENTIFIER

  X509V3_R_INVALID_OPTION

  X509V3_R_INVALID_POLICY_IDENTIFIER

  X509V3_R_INVALID_SECTION

  X509V3_R_INVALID_SYNTAX

  X509V3_R_ISSUER_DECODE_ERROR

  X509V3_R_MISSING_VALUE

  X509V3_R_NEED_ORGANIZATION_AND_NUMBERS

  X509V3_R_NO_CONFIG_DATABASE

  X509V3_R_NO_ISSUER_CERTIFICATE

  X509V3_R_NO_ISSUER_DETAILS

  X509V3_R_NO_POLICY_IDENTIFIER

  X509V3_R_NO_PUBLIC_KEY

  X509V3_R_NO_SUBJECT_DETAILS

  X509V3_R_ODD_NUMBER_OF_DIGITS

  X509V3_R_UNABLE_TO_GET_ISSUER_DETAILS

  X509V3_R_UNABLE_TO_GET_ISSUER_KEYID

  X509V3_R_UNKNOWN_BIT_STRING_ARGUMENT

  X509V3_R_UNKNOWN_EXTENSION

  X509V3_R_UNKNOWN_EXTENSION_NAME

  X509V3_R_UNKNOWN_OPTION

  X509V3_R_UNSUPPORTED_OPTION

  X509V3_R_USER_TOO_LONG

  X509_PURPOSE_ANY

  X509_PURPOSE_CRL_SIGN

  X509_PURPOSE_DYNAMIC

  X509_PURPOSE_DYNAMIC_NAME

  X509_PURPOSE_MAX

  X509_PURPOSE_MIN

  X509_PURPOSE_NS_SSL_SERVER

  X509_PURPOSE_SMIME_ENCRYPT

  X509_PURPOSE_SMIME_SIGN

  X509_PURPOSE_SSL_CLIENT

  X509_PURPOSE_SSL_SERVER

  XKU_CODE_SIGN

  XKU_SGC

  XKU_SMIME

  XKU_SSL_CLIENT

  XKU_SSL_SERVER



AUTHOR

Massimiliano Pala <madwolf@openca.org> Julio Sanchez, <j_sanchez@localdomain>

SEE ALSO

OpenCA::X509, OpenCA::CRL, OpenCA::REQ, OpenCA::TRIStateCGI, OpenCA::Configuration