NOM¶
PKCS7_verify - Vérifier une structure PKCS#7 signedData
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 ou une valeur négative 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().
VOIR AUSSI¶
ERR_get_error(3),
PKCS7_sign(3)
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.