Crypt::OpenSSL::X509

x.509証明書を取り扱うOpenSSLラッパモジュール。

use Crypt::OpenSSL::X509;
パッケージをロードする。

my $x509 = Crypt::OpenSSL::X509->new_from_string ($string, $format);
my $x509 = Crypt::OpenSSL::X509->new_from_file ($filename, $format);

x.509証明書を、変数/ファイルから読み込む。$formatは、Crypt::OpenSSL::X509::FORMAT_ASN1(DERフォーマット), Crypt::OpenSSL::X509::FORMAT_PEM のいずれか。

$x509->subject
$x509->issuer
$x509->issuer_hash
$x509->serial
$x509->hash      # Alias for subject_hash
$x509->subject_hash
$x509->notBefore
$x509->notAfter
$x509->email     # if multiple addresses found, they are separated by a space
$x509->version
$x509->sig_alg_name
$x509->key_alg_name
$x509->curve

証明書の基本項目を文字列で返す。

$x509->subject_name()->get_entry_by_type('CN')->value() ;
$x509->issuer_name()->get_entry_by_type('CN')->value();

 subject/issuerから Common Nameを取り出す。get_entry_by_type のパラメータを変えれば、他の要素も取り出せる。

$x509->is_selfsigned();
自己署名か否かを返す。

$x509->as_string ($format) ;
エンコードされた証明書を返す。$formatは、Crypt::OpenSSL::X509::FORMAT_ASN1(DERフォーマット), Crypt::OpenSSL::X509::FORMAT_PEM のいずれか。

$x509->modulus() ;
RSAのモジュラスを16進文字列(01:02:03:04:…)で返す。

$x509->bit_length();
モジュラスのビット幅を返す。

$x509->pubkey();
公開鍵を16進文字列(01:02:03:04:…)で返す。RSAならば eの値、ECDSAなら SECフォーマット(04 || x座標 || y座標)。

$x509->num_extensions();
x.509拡張の個数を返す。

$x509->extension($ibdex);
出現順インデクスを使って、x.509拡張オブジェクトを返す。

$x509->extensions_by_oid();
$x509->extensions_by_name();
$x509->extensions_by_long_name();

x.509拡張オブジェクトを、OID/短い名前/長い名前をキーとしたハッシュで返す。OIDは、RFC 5280を調べれば分かるが、「名前」が何であるかはドキュメントがないので、keysで調査するしかない。

使用例1:
my $oids = $x509->extensions_by_oid();
my $e = $oids->{'2.5.29.19'};  # Basic Constraints
$e->object()->name();     # x.509拡張名 例: X509v3 Basic Constraints
$e->as_string();         # 値を文字列で返す 例:: CA:FALSE

使用例2:
my $exts = $x509->extensions_by_name();
my $e = $exts->{'subjectAltName'};
$e->as_string();