As someone already mentioned in the previous comment it didn't work for me until I passed in that hidden sixth argument and also explicitly add the mime header into the $in_filename contents. (I am using PHP5)
$data = file_get_contents($in_filename);
file_put_contents($in_filename, "MIME-Version: 1.0\nContent-Disposition: attachment; filename=\"smime.p7m\"\nContent-Type: app
lication/x-pkcs7-mime; name=\"smime.p7m\"\nContent-Transfer-Encoding: base64\n\n$data");
openssl_pkcs7_verify("$in_filename",
$flag,
"$out_filename.cert",
array($path_to_cert),
$path_to_cert,
$out_filename));
openssl_pkcs7_verify
(PHP 4 >= 4.0.6, PHP 5)
openssl_pkcs7_verify — Vérifie la signature d'un message S/MIME
Description
openssl_pkcs7_verify() lit le message S/MIME contenu dans le fichier filename et examine la signature digitale.
Liste de paramètres
- 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.
- outfilename
-
Si le paramètre outfilename est spécifié, il doit être une chaîne contenant le nom d'un fichier qui contient le certificat du signataire, au format PEM.
- cainfo
-
Si le paramètre cainfo 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.
- extracerts
-
Si le paramètre extracerts 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.
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 |
|---|---|
| 5.1.0 | Ajout du paramètre content . |
openssl_pkcs7_verify
29-Sep-2006 02:39
There is a hidden sixth argument: string pointing to a file where the contents of the signed message should be saved.
It is very important for verifying signed and encrypted messages from MS Outlook which uses opaque signing. After decrypting of message you will get another MIME envelope like this:
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
MIIM/QYJ...
Even if you use base64_decode() you will not get decrypted message but PKCS #7 object.
BTW: How to create opaque signed message like from MS Outlook? Switch off PKCS7_DETACHED flag (the last 0 does it):
openssl_pkcs7_sign(
"full_path_to_message_file",
"full_path_where_to_store_signed_message_file",
"file://full_path_to_my_public_certificate.pem",
array("file://full_path_to_my_private_key.pem", "password"),
array(),
0
);
