PHP 5.4.36 Released

openssl_pkcs7_verify

(PHP 4 >= 4.0.6, PHP 5)

openssl_pkcs7_verifyS/MIME でサインされたメッセージの署名を検証する

説明

mixed openssl_pkcs7_verify ( string $filename , int $flags [, string $outfilename [, array $cainfo [, string $extracerts [, string $content ]]]] )

openssl_pkcs7_verify() は、 指定したファイルの S/MIME メッセージを読み込み、デジタル署名を評価します。

パラメータ

filename

メッセージへのパス。

flags

flags により署名の検証方法を指定することが可能です。 詳細については、PKCS7 定数 を参照ください。

outfilename

outfilename を指定する場合、 メッセージに署名した人の証明書が PEM 形式で保存されたファイルの名前をこの変数に指定する必要があります。

cainfo

cainfo が指定された場合、 検証処理で使用するために認証済みの CA 証明書に関する情報を保持する必要があります。 このパラメータに関するより詳細な情報については、 証明書の検証 を参照ください。

extracerts

extracerts が指定された場合、 これは未認証の CA として一連の証明書を使用するためのファイルの名前となります。

content

ファイル名とともに content を指定すると、検証したデータがここに格納されます。 格納する際に、署名情報は除去されます。

返り値

署名が検証された場合は TRUE、正しくない場合 (メッセージが改暫されたか署名に用いられた証明書が無効) は FALSE、 エラーの場合に -1 を返します。

変更履歴

バージョン 説明
5.1.0 content パラメータが追加されました。

注意

注意: RFC 2045 にあるように、 filename パラメータのファイル名が 76 文字より長くなってはいけません。

add a note add a note

User Contributed Notes 1 note

up
1
Krzychu
1 year ago
To read signed message in base64 (not encrypted with priv&pub key):

You can just decode content by "base64_decode" or "imap_base64" functions and then erase by hand(regexp) sign from bottom of mail. Unfortunately  in my case (mail from Outlook) that  message (decoded by "base64_decode") has some additional special chars in some places (ie. before every attachment encoded base_64) what make message e-mail unable to parse.

After couple of hours I solved this:
It's needed to save single e-mail and use 2x "openssl_pkcs7_verify" function in row on original email (with headers and content in base64 ):
  1st use - extract sign (certificate) from e-mail and save to file *.cert
  2nd use - extract (with use that *.cert file) decoded message to  file*.out

Code:
  $handle  =  imap_open('mailbox.eml', '', '');

  $msg = 'home/john/tmp/email1.eml';
  imap_savebody($handle, $msg,  1);

  openssl_pkcs7_verify($msg, 0, $msg . '.cert');
  openssl_pkcs7_verify($msg, 0, $msg . '.cert', array(), $msg . '.cert', $msg.'.out');

  $email_content = file_get_contents($msg . '.out');
To Top