PHP Unconference Europe 2015

openssl_pkcs7_verify

(PHP 4 >= 4.0.6, PHP 5)

openssl_pkcs7_verifyüberprüft die Unterschrift einer mit S/MIME unterschriebenen Nachricht

Beschreibung

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

openssl_pkcs7_verify() liest die in der angegebenen Datei enthaltene S/MIME Nachricht und untersucht die digitale Signatur.

Parameter-Liste

filename

Pfad zur Datei.

flags

Mit dem Parameter flags wird beeinflusst auf welche Art die Signatur verifiziert wird. Für mehr Informationen siehe PKCS7 Konstanten

outfilename

Wird der Parameter outfilename angegeben, sollte dies eine Zeichenkette sein, die den Namen einer Datei enthält, in der das Zertifikat der unterzeichnenden Person im PEM Format gespeichert wird.

cainfo

Der Parameter cainfo sollte sofern angegeben Informationen über die vertrauenswürdigen CA Zertifikate enthalten, die für den Überprüfungsprozess benutzt werden. Für weitere Informationen siehe Zertifikat Nachweis

extracerts

Wird der Parameter extracerts angegeben, ist es der Name einer Datei, die ein mehrere extra Zertifikate enthält, die als nicht vertrauenswürdige CAs genutzt werden.

content

content ist der Name einer Datei die mit den verifizierten Daten gefüllt wird, jedoch ohne Signaturinformationen.

Rückgabewerte

Gibt TRUE zurück wenn die Signatur verifiziert werden konnte, FALSE wenn die Signatur nicht korrekt ist (die Daten wurden verändert oder das signierende Zertifikat ist ungültig). Im Falle eines Fehlers wird -1 zurückgegeben.

Changelog

Version Beschreibung
5.1.0 Der Parameter content wurde hinzugefügt.

add a note add a note

User Contributed Notes 1 note

up
1
Krzychu
10 months 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