【PHP8.x】openssl_pkcs7_sign関数の使い方
openssl_pkcs7_sign関数は、ファイルにPKCS#7デジタル署名を適用する関数です。この関数は、指定された入力ファイルのデータに対してデジタル署名を行い、その結果を指定された出力ファイルに保存します。デジタル署名は、データが改ざんされていないこと(データの完全性)と、データが信頼できる送信元から送られたこと(送信元の認証)を保証するために不可欠な技術です。
この関数を使用するには、署名対象となる入力ファイル、署名結果を保存する出力ファイルのパス、そして署名を実行するための署名者の公開鍵証明書(signcert
)と秘密鍵(privkey
)を指定する必要があります。さらに、オプションとして、署名に含める追加の証明書(certs
)や、PKCS#7署名の動作を制御するためのさまざまなフラグ(flags
)、または署名に追加するカスタムヘッダ情報(headers
)を設定することができます。これらのオプションを利用することで、特定の要件に応じた柔軟な署名処理を実現できます。
処理が成功した場合、この関数はtrue
を返します。何らかの理由で署名処理が失敗した場合にはfalse
を返します。この関数は、データのセキュリティと信頼性が求められるアプリケーションにおいて、デジタル署名を生成する重要な機能を提供します。
基本的な使い方
構文(syntax)
<?php
$infile = 'path/to/original_data.txt';
$outfile = 'path/to/signed_data.pkcs7';
$cert = 'path/to/signer_certificate.pem'; // 署名者の証明書ファイルパス、または OpenSSLAsymmetricKey インスタンス
$privkey = 'path/to/signer_private_key.pem'; // 署名者の秘密鍵ファイルパス、または OpenSSLAsymmetricKey インスタンス
$headers = ['Content-Type' => 'text/plain']; // 署名に追加する追加のヘッダー
$flags = PKCS7_DETACHED; // PKCS7署名に影響を与えるフラグ (例: PKCS7_DETACHED)
$passphrase = null; // 秘密鍵にパスフレーズがある場合、文字列で指定
$success = openssl_pkcs7_sign($infile, $outfile, $cert, $privkey, $headers, $flags, $passphrase);
// $success は成功した場合に true、失敗した場合に false を返します。
?>
引数(parameters)
string $input_filename, string $output_filename, OpenSSLCertificate|string $certificate, OpenSSLAsymmetricKey|OpenSSLCertificate|array|string $private_key, array|null $headers, int $flags = 0, string|null $untrusted_certificates_filename = null
- string $input_filename: 署名対象となるPKCS#7データを格納したファイルパス
- string $output_filename: 署名後のPKCS#7データを保存するファイルパス
- OpenSSLCertificate|string $certificate: 署名に使用する証明書オブジェクトまたは証明書ファイルパス
- OpenSSLAsymmetricKey|OpenSSLCertificate|array|string $private_key: 署名に使用する秘密鍵オブジェクト、秘密鍵ファイルパス、または秘密鍵のパスフレーズ
- array|null $headers: 追加するHTTPヘッダーの連想配列、またはnull
- int $flags = 0: 署名処理の挙動を制御するフラグ
- string|null $untrusted_certificates_filename = null: 信頼されていない証明書を格納したファイルパス、またはnull
戻り値(return)
bool
openssl_pkcs7_sign 関数は、PKCS#7 署名を作成できた場合に true を返します。署名作成に失敗した場合は false を返します。