openssl_pkcs7_verify

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

openssl_pkcs7_verifyVérifie la signature d'un message S/MIME

Description

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() lit le message S/MIME contenu dans le fichier filename et examine la signature digitale.

Liste de paramètres

input_filename

Chemin vers le message.

flags

flags sert à modifier la façon dont la signature est vérifiée. Voyez les constantes PKCS7. Par défaut, la valeur est : PKCS7_DETACHED.

signers_certificates_filename

Si le paramètre signers_certificates_filename est spécifié, il doit être une chaîne contenant le nom d'un fichier qui contient le certificat du signataire, au format PEM.

ca_info

Si le paramètre ca_info est spécifié, il doit contenir les informations sur les tiers de certificats de confiance utilisé lors de la vérification. Voyez vérification des certificats pour plus de détails.

untrusted_certificates_filename

Si le paramètre untrusted_certificates_filename est spécifié, il doit représenter le nom d'un fichier contenant un ensemble de certificats utilisés comme certificats de peu de confiance.

content

Vous pouvez spécifier un nom de fichier avec le paramètre content qui peut être remplit avec les données vérifiées, mais avec les informations de signature.

output_filename

Valeurs de retour

Retourne true si la signature est vérifiée, et false sinon (le message a été modifié, ou bien le certificat de signature est invalide) ou -1 si une erreur survient.

Historique

Version Description
8.0.0 signers_certificates_filename, untrusted_certificates_filename, content et output_filename sont désormais nullable.
7.2.0 Le paramètre output_filename a été ajouté.

Notes

Note: Tel que spécifié dans la RFC 2045, les lignes ne doivent pas être plus longues que 76 caractères dans le paramètre input_filename.

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