IO::Socket::SSL::UtilsUser Contributed Perl DocumentaIO::Socket::SSL::Utils(3)
NAME
IO::Socket::SSL::Utils -- loading, storing, creating certificates and
keys
SYNOPSIS
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
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
o 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
o Functions for cleaning up. Each loaded or created cert and key
must be freed to not leak memory.
CERT_free(cert)
KEY_free(key)
o KEY_create_rsa(bits) -> key
Creates an RSA key pair, bits defaults to 2048.
o KEY_create_ec(curve) -> key
Creates an EC key, curve defaults to "prime256v1".
o 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...".
signature_alg
Algorithm used to sign certificate, e.g.
"sha256WithRSAEncryption".
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)
o 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.
purpose string|array|hash
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
Examples:
# root-CA for SSL certificates
purpose => 'sslCA' # or CA => 1
# server certificate and CA (typically self-signed)
purpose => 'sslCA,server'
# client certificate
purpose => 'client',
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
perl v5.26.3 2019-02-21 IO::Socket::SSL::Utils(3)