IO::Socket::SSL::Utils -- loading, storing, creating certificates and keys
use IO::Socket::SSL::Utils; my $cert = PEM_file2cert('cert.pem'); # load certificate from file my $string = PEM_cert2string($cert); # convert certificate to PEM string CERT_free($cert); # free memory within OpenSSL my $key = KEY_create_rsa(2048); # create new 2048-bit RSA key PEM_string2file($key,"key.pem"); # and write it to file KEY_free($key); # free memory within OpenSSL
This module provides various utility functions to work with certificates and private keys, shielding some of the complexity of the underlying Net::SSLeay and OpenSSL.
Creates an RSA key pair, bits defaults to 2048.
Extracts the information from the certificate into a hash and uses the given digest_algo (default: SHA-256) to determine digest of pubkey and cert. The resulting hash contains:
Hash with the parts of the subject, e.g. commonName, countryName, organizationName, stateOrProvinceName, localityName.
Array with list of alternative names. Each entry in the list is of
type can be OTHERNAME, EMAIL, DNS, X400, DIRNAME, EDIPARTY, URI, IP or RID.
Hash with the parts of the issuer, e.g. commonName, countryName, organizationName, stateOrProvinceName, localityName.
The time frame, where the certificate is valid, as time_t, e.g. can be converted with localtime or similar functions.
The serial number
List of URIs for CRL distribution.
List of URIs for revocation checking using OCSP.
List of keyUsage information in the certificate.
List of extended key usage information from the certificate. Each entry in this list consists of a hash with oid, nid, ln and sn.
Binary digest of the pubkey using the given digest algorithm, e.g. pubkey_digest_sha256 if (the default) SHA-256 was used.
Binary digest of the X.509 certificate using the given digest algorithm, e.g. x509_digest_sha256 if (the default) SHA-256 was used.
Fingerprint of the certificate using the given digest algorithm, e.g. fingerprint_sha256 if (the default) SHA-256 was used. Contrary to digest_* this is an ASCII string with a list if hexadecimal numbers, e.g. "73:59:75:5C:6D...".
List of extensions. Each entry in the list is a hash with oid, nid, sn, critical flag (boolean) and data (string representation given by X509V3_EXT_print).
Certificate version, usually 2 (x509v3)
Creates a certificate based on the given hash. If the issuer is not specified the certificate will be self-signed. The following keys can be given:
Hash with the parts of the subject, e.g. commonName, countryName, ... as described in
CERT_asHash. Default points to IO::Socket::SSL.
A time_t value when the certificate starts to be valid. Defaults to current time.
A time_t value when the certificate ends to be valid. Defaults to current time plus one 365 days.
The serial number. If not given a random number will be used.
The version of the certificate, default 2 (x509v3).
If true declare certificate as CA, defaults to false.
Set the purpose of the certificate. The different purposes can be given as a string separated by non-word character, as array or hash. With string or array each purpose can be prefixed with '+' (enable) or '-' (disable) and same can be done with the value when given as a hash. By default enabling the purpose is assumed.
If the CA option is given and true the defaults "ca,sslca,emailca,objca" are assumed, but can be overridden with explicit purpose. If the CA option is given and false the defaults "server,client" are assumed. If no CA option and no purpose is given it defaults to "server,client".
Purpose affects basicConstraints, keyUsage, extKeyUsage and netscapeCertType. The following purposes are defined (case is not important):
client server email objsign CA sslCA emailCA objCA emailProtection codeSigning timeStamping digitalSignature nonRepudiation keyEncipherment dataEncipherment keyAgreement keyCertSign cRLSign encipherOnly decipherOnly
# root-CA for SSL certificates purpose => 'sslCA' # or CA => 1 # server certificate and CA (typically self-signed) purpose => 'sslCA,server' # client certificate purpose => 'client',
List of extensions. The type of the extension can be specified as name with
sn or as NID with
nid and the data with
data. These data must be in the same syntax as expected within openssl.cnf, e.g. something like
OCSP;URI=http://.... Additionally the critical flag can be set with
critical = 1>.
use given key as key for certificate, otherwise a new one will be generated and returned
set issuer for new certificate
sign new certificate with given key
Instead of giving issuer_key and issuer_cert as separate arguments they can be given both together.
specify the algorithm used to sign the certificate, default SHA-256.