Crypt-Perl
view release on metacpan or search on metacpan
lib/Crypt/Perl/X509v3.pm view on Meta::CPAN
package Crypt::Perl::X509v3;
use strict;
use warnings;
=encoding utf-8
=head1 NAME
Crypt::Perl::X509v3 - TLS/SSL Certificates
=head1 SYNOPSIS
my $cert = Crypt::Perl::X509v3->new(
key => $crypt_perl_public_key_obj,
issuer => [
[ commonName => 'Foo', surname => 'theIssuer' ],
[ givenName => 'separate RDNs' ],
],
subject => \@subject, #same format as issuer
not_before => $unixtime,
not_after => $unixtime,
# The same structure as in Crypt::Perl::PKCS10 â¦
extensions => [
[ keyUsage => 'keyCertSign', 'keyEncipherment' ],
[ $extn_name => @extn_args ],
# ..
],
serial_number => 12345,
issuer_unique_id => '..',
subject_unique_id => '..',
);
# The signature algorithm (2nd argument) is not needed
# when the signing key is Ed25519.
$cert->sign( $crypt_perl_private_key_obj, 'sha256' );
my $pem = $cert->to_pem();
=head1 STATUS
This module is B<experimental>! The API may change between versions.
If youâre going to build something off of it, ensure that you check
Crypt::Perlâs changelog before updating this module.
=head1 DESCRIPTION
This module can create TLS/SSL certificates. The caller has full control
over all certificate components, and anything not specified is not assumed.
There currently is not a parsing interface. Hopefully that can be remedied.
=cut
use parent qw( Crypt::Perl::ASN1::Encodee );
use Crypt::Perl::ASN1::Signatures ();
use Crypt::Perl::X509::Extensions ();
use Crypt::Perl::X509::Name ();
use Crypt::Perl::X ();
#TODO: refactor
*to_der = __PACKAGE__->can('encode');
sub to_pem {
my ($self) = @_;
require Crypt::Format;
return Crypt::Format::der2pem( $self->to_der(), 'CERTIFICATE' );
}
use constant ASN1 => <<END;
X509v3 ::= SEQUENCE {
tbsCertificate ANY,
signatureAlgorithm SigIdentifier,
signature BIT STRING
}
SigIdentifier ::= SEQUENCE {
algorithm OBJECT IDENTIFIER,
parameters ANY OPTIONAL
}
TBSCertificate ::= SEQUENCE {
version [0] Version,
serialNumber INTEGER,
signature SigIdentifier,
issuer ANY, -- Name
validity Validity,
subject ANY, -- Name
subjectPublicKeyInfo ANY,
issuerUniqueID [1] IMPLICIT BIT STRING OPTIONAL,
-- If present, version MUST be v2 or v3
subjectUniqueID [2] IMPLICIT BIT STRING OPTIONAL,
-- If present, version MUST be v2 or v3
( run in 2.019 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )