【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 を返します。

【PHP8.x】openssl_pkcs7_sign関数の使い方 | いっしー@Webエンジニア