PKCS7_verify(3) Vérifier une structure PKCS#7 signedData

Other Alias

PKCS7_get0_signers

SYNOPSIS

#include <openssl/pkcs7.h>

int PKCS7_verify(PKCS7 *p7, STACK_OF(X509) *certs, X509_STORE *store, BIO *indata, BIO *out, int <drapeaux>);

STACK_OF(X509) *PKCS7_get0_signers(PKCS7 *p7, STACK_OF(X509) *certs, int drapeaux);

DESCRIPTION

PKCS7_verify() vérifie une structure PKCS#7 signedData. p7 est la structure PKCS7 à vérifier. certs est un ensemble de certificats dans lequel chercher le certificat du signataire. store est le répertoire des certificats de confiance (utilisé pour les vérifications en chaîne). indata contient les données signées si elles ne sont pas incluses dans p7 (c'est-à-dire si elles sont détachées). Le contenu est écrit dans out s'il n'est pas NULL.

drapeaux est un jeu d'attributs facultatifs, qui peut être utilisé pour modifier l'opération de vérification.

PKCS7_get0_signers() récupère les certificats du signataire à partir de p7, Il ne vérifie pas leur validité ni celle d'aucune signature. Les paramètres certs et drapeaux ont les mêmes significations que dans PKCS7_verify().

PROCESSUS DE VÉRIFICATION

Normalement, le processus de vérification procède comme suit.

Initialement quelques vérifications d'intégrité sont effectuées sur p7. Le type de p7 doit être signedData. Il doit y avoir au moins une signature sur les données et, si le contenu est détaché, indata ne peut pas être NULL.

Une tentative est faite pour localiser tous les certificats du signataire, premièrement en cherchant dans le paramètre certs (s'il n'est pas NULL) et ensuite en regardant dans tout certificat contenu dans la structure p7 elle même. Si aucun certificat du signataire ne peut être localisé, l'opération échoue.

Chaque certificat du signataire est vérifié en chaîne en utilisant smimesign et le répertoire de certificats de confiance. Tout certificat interne au message est utilisé comme une CA non fiable. Si une chaîne de vérification échoue, un code d'erreur est renvoyé.

Finalement, le contenu signé est lu (et écrit dans out s'il n'est pas NULL) et la signature est vérifiée.

Si toutes les vérifications de signature sont correctes, la fonction est un succès.

Chacun des drapeaux suivants (ou en combinaison) peut être passé dans le paramètre drapeaux pour changer le comportement par défaut des vérifications. Seul le drapeau PKCS7_NOINTERN a un sens pour PKCS7_get0_signers().

Si PKCS7_NOINTERN est défini, les certificats contenus dans le message lui-même ne seront pas recherchés lors de la localisation des certificats du signataire. Cela signifie que tous les certificats du signataire doivent être dans le paramètre certs.

Si l'attribut PKCS7_TEXT est défini, les en-têtes MIME pour le type text/plain sont supprimés du contenu. Si le contenu n'est pas de type text/plain, alors une erreur est renvoyée.

Si PKCS7_NOVERIFY est défini, les certificats du signataire ne sont pas vérifiés en chaîne.

Si PKCS7_NOCHAIN est défini, les certificats contenus dans le message ne sont pas utilisés comme autorités de certification non fiables. Cela veut dire que toute la chaîne de vérification (en dehors du certificat du signataire) doit être contenu dans le répertoire de confiance.

Si PKCS7_NOSIGS est défini, les signatures des données ne sont pas vérifiées.

NOTES

Une application de PKCS7_NOINTERN est d'accepter uniquement les messages signés par un petit nombre de certificats. Les certificats acceptés seront passés dans le paramètre certs. Dans ce cas, si le certificat du signataire n'est pas dans certs, la vérification échouera car le certificat du signataire ne sera pas trouvé.

Une attention particulière doit être prise lors de la modification du comportement par défaut de la vérification. Par exemple, définir PKCS7_NOVERIFY|PKCS7_NOSIGS désactivera totalement toute vérification et tout message signé sera considéré comme valide. Cette combinaison est cependant utile si l'on veut le contenu de out et que sa validité n'est pas considérée comme importante.

La vérification en chaîne doit probablement être effectuée en utilisant le moment de la signature plutôt que l’heure actuelle. Cependant, comme le moment de la signature est fourni par le signataire, il ne peut être fiable sans autres preuves (comme par exemple un horodatage de confiance).

VALEURS DE RETOUR

PKCS7_verify() renvoie 1 en cas de vérification réussie et 0 en cas d'erreur.

PKCS7_get0_signers() renvoie tous les signataires ou NULL en cas d'erreur.

L'erreur peut être obtenue à partir de ERR_get_error(3).

BOGUES

Le répertoire de certificats de confiance n'est pas inspecté pour trouver le certificat du signataire, cela est dû principalement à l'inadéquation de fonctionnalité de la structure X509_STORE courante.

L'absence de traitement en une seule passe et la nécessité de garder toutes les données en mémoire, comme c'est mentionné dans PKCS7_sign(), s'appliquent aussi à PKCS7_verify().

HISTORIQUE

PKCS7_verify() a été ajoutée dans la version 0.9.5 d'OpenSSL

TRADUCTION

La traduction de cette page de manuel est maintenue par les membres de la liste <debian-l10n-french AT lists DOT debian DOT org>. Veuillez signaler toute erreur de traduction par un rapport de bogue sur le paquet manpages-fr-extra.