NAME
Crypt::SMIME::JA - S/MIMEの署名、検証、暗号化、復号
概要
use Crypt::SMIME;my $plain = <<'EOF';From: [email protected]To: [email protected]Subject: Crypt::SMIME testThis is a test mail. Please ignore...EOFmy $smime = Crypt::SMIME->new();$smime->setPrivateKey($privkey, $crt);# $smime->setPublicKey([$icacert]); # if need be.my $signed = $smime->sign($plain);print $signed;
説明
S/MIMEの署名、検証、暗号化、復号を行うクラス。 libcrypto (<http://www.openssl.org>) が必要。
エクスポート
既定でエクスポートされるシンボルは無いが、次のシンボルはエクスポート可能である。
- "NO_CHECK_CERTIFICATE"
-
"check()" を参照。
- "FORMAT_SMIME"
- "FORMAT_ASN1"
- "FORMAT_PEM"
-
"extractCertificates()" を参照。
- ":constants"
-
上記のもの全てをエクスポートする。
メソッド
- new()
-
my $smime = Crypt::SMIME->new();引数無し
- setPrivateKey()
-
$smime->setPrivateKey($key, $crt);$smime->setPrivateKey($key, $crt, $password);秘密鍵を設定する。ここで設定された秘密鍵は署名と復号の際に用いられる。 ファイル名ではなく、鍵本体を渡す。
対応しているフォーマットは PEM のみ。鍵の読み込みに失敗した場合はdieする。
- setPrivateKeyPkcs12()
-
$smime->setPrivateKeyPkcs12($key, $pkcs12);$smime->setPrivateKeyPkcs12($key, $pkcs12, $password);秘密鍵およびその X.509 証明書を PKCS#12 から読み込んで設定する。秘密鍵は署名と復号の際に用いられる。 読み込みに失敗した場合は die する。
- setPublicKey()
-
$smime->setPublicKey($crt);$smime->setPublicKey([$crt1, $crt2, ...]);公開鍵を設定する。ここで設定された公開鍵は署名への添付、署名の検証、 そして暗号化の際に用いられる。
対応しているフォーマットは PEM のみ。鍵の読み込みに失敗した場合はdieする。
- setPublicKeyStore()
-
$smime->setPublicKeyStore($path, ...);信頼している証明書 (複数可) が入ったファイルやディレクトリのパス (複数可) を設定する。ここで設定された証明書ストアは、署名の検証の際に用いられる。
証明書ストアの読み込みに失敗した場合はdieする。
- sign()
-
$signed_mime = $smime->sign($raw_mime);署名を行い、MIMEメッセージを返す。可能な署名はクリア署名のみ。
"Content-*","MIME-*"及び"Subject"を除いたヘッダは multipartのトップレベルに移される。"Subject"はS/MIMEを認識できないメーラのために, multipartの トップレベルと保護されるメッセージの両側に配置される。元の MIME メッセージ、秘密鍵、またはその証明書のいずれかが汚染されている (tainted) ならば、署名されたメッセージも汚染される。
- signonly()
-
$sign = $smime->signonly($prepared_mime);署名の計算を行う。
$signはBASE64でエンコードされて返る。$prepared_mimeには, "prepareSmimeMessage" で返される値を渡す。元の MIME メッセージ、秘密鍵、またはその証明書のいずれかが汚染されている (tainted) ならば、生成された署名も汚染される。
- prepareSmimeMessage()
-
($prepared_mime, $outer_header)= $smime->prepareSmimeMessage($source_mime);署名用のメッセージを準備する。
$prepared_mimeには署名用に修正されたMIMEメッセージを返す。$outer_headerは、S/MIMEの外側に付与するヘッダを返す。$prepared_mimeの本文は$source_mimeと同じ物となるが、 ヘッダに関しては"Content-*","MIME-*","Subject"を除く全てが 取り除かれる。取り除かれたヘッダは$outer_headerに返される。 S/MIMEメッセージを構築する際にはこれをS/MIMEメッセージのヘッダに追加する。"Subject"ヘッダのみは$prepared_mimeと$outer_headerの両方に 現れる点に注意。
- check()
-
use Crypt::SMIME qw(:constants);$source_mime = $smime->check($signed_mime);$source_mime = $smime->check($signed_mime, $flags);検証を行う。検証に失敗した場合はその理由と共にdieする。
$flagsとして"Crypt::SMIME::NO_CHECK_CERTIFICATE"オプションを指定した場合には、署名者の証明書チェーンを検証しない。$flagsのデフォルト値は0であり、この場合には全ての整合性についての検証を行う。元の S/MIME メッセージ,
$flags, 検証時刻 ("setAtTime"), または 公開鍵の少なくとも一つが汚染されている(tainted) ならば、検証されたメッセージも汚染される。
- encrypt()
-
$encrypted_mime = $smime->encrypt($raw_mime);暗号化を行う。
"Content-*","MIME-*"及び"Subject"を除いたヘッダは multipartのトップレベルにコピーされる。"Subject"はS/MIMEを認識できないメーラのために, multipartの トップレベルと保護されるメッセージの両側に配置される。元の MIME メッセージ、または公開鍵の少なくとも一つが汚染されている (tainted) ならば、暗号化されたメッセージも汚染される。
- decrypt()
-
$decrypted_mime = $smime->decrypt($encrypted_mime);復号を行う。復号に失敗した場合はその理由と共にdieする。
元の S/MIME メッセージ、秘密鍵、またはその証明書のいずれかが汚染されている (tainted) ならば、復号されたメッセージも汚染される。
- isSigned()
-
$is_signed = $smime->isSigned($mime);渡されたMIMEメッセージがS/MIMEで署名されたものなら真を返す。 クリア署名かどうかは問わない。 署名後に暗号化したメッセージを渡した場合は、署名が直接見えない為、 偽を返す事に注意。
- isEncrypted()
-
$is_encrypted = $smime->isEncrypted($mime);渡されたMIMEメッセージがS/MIMEで暗号化されたものなら真を返す。 暗号化後に署名したメッセージを渡した場合は、暗号文が直接見えない為、 偽を返す事に注意。
- setAtTime()
-
$yesterday = time - (60*60*24);$smime->setAtTime($yesterday);検証時に用いる時刻を設定する。デフォルトは現在時刻。 UNIX epoch 形式でなければならない。
関数
- extractCertificates()
-
use Crypt::SMIME qw(:constants);@certs = @{Crypt::SMIME::extractCertificates($data)};@certs = @{Crypt::SMIME::extractCertificates($data, FORMAT_SMIME)};<S/MIMEメッセージまたはPKCS#7オブジェクトに含まれるX.509証明書 (や証明書失効リスト) をすべて取得する。 オプションの
$typeパラメータでデータの種類を指定できる。"Crypt::SMIME::FORMAT_SMIME"(初期値) はS/MIMEメッセージ、"Crypt::SMIME::FORMAT_ASN1"はバイナリ形式、"Crypt::SMIME::FORMAT_PEM"はPEM形式。
- getSigners()
-
@certs = @{Crypt::SMIME::getSigners($data)};@certs = @{Crypt::SMIME::getSigners($data, $type)};S/MIMEメッセージまたはPKCS#7オブジェクトに含まれる、署名者の X.509証明書を取得する。オプションの$typeパラメータでデータの種類を指定できる。
この関数が返す公開鍵は検証されていないことに注意。 公開鍵が有効であることを確かめるにはcheck()を実行すること。
著者
Copyright 2006-2014 YMIRLINK Inc. All Rights Reserved.
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself
Bug reports and comments to: [email protected]