NAME¶
IO::Socket::SSL::Utils -- loading, storing, creating certificates and keys
SYNOPSIS¶
use IO::Socket::SSL::Utils;
my $cert = PEM_file2cert('cert.pem');
my $string = PEM_cert2string($cert);
CERT_free($cert);
my $key = KEY_create_rsa(2048);
PEM_string2file($key);
KEY_free($key);
DESCRIPTION¶
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.
FUNCTIONS¶
- •
- Functions converting between string or file and certificates and keys.
They croak if the operation cannot be completed.
- PEM_file2cert(file) -> cert
- PEM_cert2file(cert,file)
- PEM_string2cert(string) -> cert
- PEM_cert2string(cert) -> string
- PEM_file2key(file) -> key
- PEM_key2file(key,file)
- PEM_string2key(string) -> key
- PEM_key2string(key) -> string
- •
- Functions for cleaning up. Each loaded or created cert and key must be
freed to not leak memory.
- CERT_free(cert)
- KEY_free(key)
- •
- KEY_create_rsa(bits) -> key
Creates an RSA key pair, bits defaults to 2048.
- •
- CERT_asHash(cert,[digest_algo]) -> hash
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:
- subject
- Hash with the parts of the subject, e.g. commonName, countryName,
organizationName, stateOrProvinceName, localityName.
- subjectAltNames
- Array with list of alternative names. Each entry in the list is of
"[type,value]", where "type" can be OTHERNAME, EMAIL,
DNS, X400, DIRNAME, EDIPARTY, URI, IP or RID.
- issuer
- Hash with the parts of the issuer, e.g. commonName, countryName,
organizationName, stateOrProvinceName, localityName.
- not_before, not_after
- The time frame, where the certificate is valid, as time_t, e.g. can be
converted with localtime or similar functions.
- serial
- The serial number
- crl_uri
- List of URIs for CRL distribution.
- ocsp_uri
- List of URIs for revocation checking using OCSP.
- keyusage
- List of keyUsage information in the certificate.
- extkeyusage
- List of extended key usage information from the certificate. Each entry in
this list consists of a hash with oid, nid, ln and sn.
- pubkey_digest_xxx
- Binary digest of the pubkey using the given digest algorithm, e.g.
pubkey_digest_sha256 if (the default) SHA-256 was used.
- x509_digest_xxx
- 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_xxx
- 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...".
- ext
- 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).
- version
- Certificate version, usually 2 (x509v3)
- •
- CERT_create(hash) -> (cert,key)
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:
- subject
- Hash with the parts of the subject, e.g. commonName, countryName, ... as
described in "CERT_asHash". Default points to
IO::Socket::SSL.
- not_before
- A time_t value when the certificate starts to be valid. Defaults to
current time.
- not_after
- A time_t value when the certificate ends to be valid. Defaults to current
time plus one 365 days.
- serial
- The serial number. If not given a random number will be used.
- version
- The version of the certificate, default 2 (x509v3).
- CA true|false
- if true declare certificate as CA, defaults to false
- ext [{ sn => .., data => ... }, ... ]
- 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>.
- key key
- use given key as key for certificate, otherwise a new one will be
generated and returned
- issuer_cert cert
- set issuer for new certificate
- issuer_key key
- sign new certificate with given key
- issuer [ cert, key ]
- Instead of giving issuer_key and issuer_cert as separate arguments they
can be given both together.
- digest algorithm
- specify the algorithm used to sign the certificate, default SHA-256.
AUTHOR¶
Steffen Ullrich