openssl_pkcs7_verify

(PHP 4 >= 4.0.6, PHP 5, PHP 7, PHP 8)

openssl_pkcs7_verifyÜberprüft die Signatur einer mit S/MIME signierten Nachricht

Beschreibung

openssl_pkcs7_verify(
    string $input_filename,
    int $flags,
    ?string $signers_certificates_filename = null,
    array $ca_info = [],
    ?string $untrusted_certificates_filename = null,
    ?string $content = null,
    ?string $output_filename = null
): bool|int

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

Parameter-Liste

input_filename

Der Pfad zur Datei.

flags

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

signers_certificates_filename

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

ca_info

Wird der Parameter ca_info angegeben, muss er Informationen über die vertrauenswürdigen CA-Zertifikate enthalten, die für den Überprüfungsprozess verwendet werden. Für weitere Informationen siehe Überprüfung von Zertifikaten.

untrusted_certificates_filename

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

content

Mit content kann der Name einer Datei angegeben werden, die mit den verifizierten Daten gefüllt wird, wobei die Signaturinformationen entfernt werden.

output_filename

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), oder -1 im Falle eines Fehlers.

Changelog

Version Beschreibung
8.0.0 signers_certificates_filename, untrusted_certificates_filename, Inhalt und Ausgabedateiname sind nun vom Typ Nullable.
7.2.0 Der Parameter output_filename wurde hinzugefügt.

Anmerkungen

Hinweis: Wie in RFC 2045 spezifiziert, dürfen die Zeilen im Parameter input_filename nicht länger als 76 Zeichen sein.

add a note add a note

User Contributed Notes 2 notes

up
5
reg1barclay at REMOVETHIS dot live dot it
5 years ago
To verify a .p7m file with openssl_pkcs7_verify() you must convert it to S/MIME format. For example...
<?php
function der2smime($file)
{
   
$to=<<<TXT
MIME-Version: 1.0
Content-Disposition: attachment; filename="smime.p7m"
Content-Type: application/x-pkcs7-mime; smime-type=signed-data; name="smime.p7m"
Content-Transfer-Encoding: base64
\n
TXT;
   
$from=file_get_contents($file);
   
$to.=chunk_split(base64_encode($from));
    return
file_put_contents($file,$to);
}
?>
up
-2
Krzychu
10 years 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