【PHP8.x】openssl_cms_sign関数の使い方
openssl_cms_sign関数は、指定されたデータにデジタル署名を施し、CMS (Cryptographic Message Syntax) 形式のメッセージとして生成する関数です。CMSは、電子署名や暗号化、データ圧縮など、様々な暗号学的処理を扱うための標準的なデータ構造です。この関数を使用することで、データの完全性(データが途中で改ざんされていないこと)と、署名者の認証(データが確かに特定の人物や組織によって署名されたこと)を保証できます。
具体的には、署名したい元のデータ、署名を行うエンティティ(個人や組織)のデジタル証明書、そしてその証明書に対応する秘密鍵を引数として指定します。関数はこれらの情報をもとに、データを暗号学的に処理し、署名済みのCMSメッセージを生成します。生成されたメッセージは文字列として返され、この文字列を他のシステムに渡すことで、受け取った側は署名を検証し、データの信頼性を確認することができます。
また、必要に応じて複数の署名者を指定したり、署名に含まれるヘッダー情報をカスタマイズしたりすることも可能です。処理に失敗した場合、この関数はfalse
を返します。この機能は、セキュアな電子メール通信(S/MIMEなど)や、デジタルドキュメントの真正性を保証する場面で広く利用されます。システムエンジニアにとって、データのセキュリティと信頼性を確保するために重要な役割を果たす関数の一つです。
基本的な使い方
構文(syntax)
<?php
$inputFilename = 'path/to/data_to_sign.txt';
$outputFilename = 'path/to/signed_output.cms';
$certificate = 'file:///path/to/signer_certificate.pem'; // または証明書データ文字列
$privateKey = 'file:///path/to/signer_private_key.pem'; // または秘密鍵データ文字列
$headers = ['Content-Type' => 'application/pkcs7-mime']; // 任意のヘッダー配列
$flags = OPENSSL_CMS_DETACHED; // 例えば OPENSSL_CMS_DETACHED, 0でデフォルト
$encoding = OPENSSL_ENCODING_SMIME; // 例えば OPENSSL_ENCODING_SMIME, OPENSSL_ENCODING_DER
$success = openssl_cms_sign(
$inputFilename,
$outputFilename,
$certificate,
$privateKey,
$headers,
$flags,
$encoding
);
// 最後の引数 $untrusted_certificates_filename (省略可能) はここでは含まれていません。
?>
引数(parameters)
string $input_filename, string $output_filename, OpenSSLCertificate|string $certificate, OpenSSLAsymmetricKey|array|string $private_key, ?array $headers, int $flags = 0, int $encoding = OPENSSL_CMS_BINARY, ?string $untrusted_certificates_filename = null
- string $input_filename: 署名対象のデータが格納されているファイル名を指定します。
- string $output_filename: 署名済みのCMSデータを格納するファイル名を指定します。
- OpenSSLCertificate|string $certificate: 署名に使用する証明書を指定します。OpenSSLCertificateオブジェクトまたは証明書ファイルパスを指定できます。
- OpenSSLAsymmetricKey|array|string $private_key: 署名に使用する秘密鍵を指定します。OpenSSLAsymmetricKeyオブジェクト、秘密鍵ファイルパス、または秘密鍵を格納した配列を指定できます。
- ?array $headers: 追加するカスタムヘッダーを指定する配列です。
- int $flags = 0: 署名処理の挙動を制御するフラグを指定します。デフォルトは0です。
- int $encoding = OPENSSL_CMS_BINARY: 出力されるCMSデータのエンコーディングを指定します。デフォルトはバイナリです。
- ?string $untrusted_certificates_filename = null: 信頼されない証明書(中間証明書など)が格納されているファイル名を指定します。
戻り値(return)
bool
openssl_cms_sign
関数は、CMS (Cryptographic Message Syntax) メッセージの署名に成功したかどうかに応じて、成功した場合は true
を、失敗した場合は false
を返します。