smime(1) Utilitaire S/MIME

SYNOPSIS

openssl smime [-encrypt] [-decrypt] [-sign] [-resign] [-verify] [-pk7out] [-chiffrement] [-in fichier] [-no_alt_chains] [-certfile fichier] [-signer fichier] [-recip fichier] [-inform SMIME|PEM|DER] [-passin param] [-inkey fichier] [-out fichier] [-outform SMIME|PEM|DER] [-content fichier] [-to adresse] [-from adresse] [-subject sujet] [-text] [-indef] [-noindef] [-stream] [-rand fichier(s)] [-md algorithme] [cert.pem] ...

DESCRIPTION

La commande smime traite les courriers S/MIME. Elle peut chiffrer, déchiffrer, signer et vérifier les messages S/MIME.

OPTIONS DE LA COMMANDE

Six options d’opération permettent de définir le type d’opération à réaliser. La signification des autres options dépend du type d’opération.
-encrypt
Chiffrer un message pour les certificats de destinataires donnés. Le fichier d’entrée est le message à chiffrer. Le fichier de sortie est le message chiffré au format MIME.
-decrypt
Déchiffrer un message en utilisant le certificat et la clef privée fournis. Le fichier d’entrée attendu est un message chiffré au format MIME. Le fichier de sortie est le message déchiffré.
-sign
Signer un message en utilisant le certificat et la clef privée fournis. Le fichier d’entrée est le message à signer. Le fichier de sortie est le message signé au format MIME.
-verify
Vérifier un message signé. Un message signé est attendu en entrée, les données signées sont envoyées en sortie. Les signatures en texte clair et opaques sont prises en charge.
-pk7out
Écrire une structure PKCS#7 encodée PEM en sortie à partir d’un message en entrée.
-resign
Re-signer un message à partir d’un message existant et au moins un nouveau signataire.
-in fichier
Le message d’entrée à chiffrer ou signer, ou le message MIME à déchiffrer ou vérifier.
-inform SMIME|PEM|DER
Cela indique le format d’entrée pour la structure PKCS#7. C’est SMIME par défaut qui lit un message au format S/MIME. Les formats PEM et DER modifient cela pour pour attendre des structures PKCS#7 au format PEM ou DER à la place. Cela ne concerne actuellement que le format d’entrée de la structure PKCS#7, si aucune structure PKCS#7 n’est fournie en entrée (par exemple avec -encrypt ou -sign), cette option ne sert à rien.
-out fichier
Le texte de message qui a été déchiffré ou vérifié, ou le message de sortie au format MIME qui a été signé ou vérifié.
-outform SMIME|PEM|DER
Cela indique le format de sortie pour la structure PKCS#7. C’est SMIME par défaut qui écrit un message au format S/MIME. Les formats PEM et DER modifient cela pour pour écrire des structures PKCS#7 au format PEM ou DER à la place. Cela ne concerne actuellement que le format de sortie de la structure PKCS#7, si aucune structure PKCS#7 n’est en sortie (par exemple avec -verify ou -decrypt), cette option ne sert à rien.
-stream, -indef
Les options -stream et -indef sont équivalentes et activent l’utilisation de flux d’entrées et sorties pour les opérations d’encodage. Cela permet le traitement de données en une seule passe sans devoir faire tenir tout le contenu en mémoire, avec la possibilité de prendre en charge de très gros fichiers. Le flux est automatiquement défini pour la signature S/MIME avec données détachées si le format de sortie est SMIME, et actuellement désactivé par défaut pour toutes les autres opérations.
-noindef
Désactiver le flux d’entrées et sorties là où cela produirait un encodage construit de taille indéfinie. Cette option ne sert actuellement à rien. À l’avenir, le flux sera activé par défaut sur toutes les opérations adéquates, et cette option permettra de le désactiver.
-content fichier
Cela indique un fichier avec le contenu détaché, ce n’est utile qu’avec la commande -verify. Ce n’est utilisable que si la structure PKCS#7 utilise la forme de signature détachée où le contenu n’est pas inclus. Cette option écrasera tout le contenu si le format d’entrée est S/MIME et qu’il utilise le type de contenu MIME multipart/signed.
-text
Cette option ajoute les en-têtes MIME de texte clair (text/plain) au message fourni en cas de chiffrement ou de signature. En cas de déchiffrement ou de vérification, cela supprime les en-têtes de texte : si le message déchiffré ou vérifié n’est pas de type MIME text/plain, alors une erreur survient.
-CAfile fichier
Un fichier contenant les certificats d’autorités de confiance, utilisé seulement avec -verify.
-CApath rép
Un répertoire contenant les certificats d’autorités de confiance, utilisé seulement avec -verify. Ce répertoire doit être un répertoire de certificats normalisé : c’est-à-dire qu’un hachage de chaque nom de sujet (utilisant x509 -hash) devrait être lié à chaque certificat.
-md algorithme
L’algorithme de signature à utiliser lors de signature ou re-signature. En cas d’absence, l’algorithme de signature par défaut pour la clef de signature sera utilisé (en général SHA1).
-chiffrement
L’algorithme de chiffrement à utiliser. Par exemple DES (56 bits) - -des, DES triple (168 bits) - -des3. Tout ce qui est accepté par la fonction EVP_get_cipherbyname() peut aussi être utilisé précédé d’un tiret, par exemple -aes_128_cbc. Consultez enc(1) pour une liste d’algorithmes de chiffrement pris en charge par cette version d’OpenSSL.

En absence d’indication, DES triple est utilisé. Utilisé seulement avec -encrypt.

-nointern
Lors de la vérification d’un message, les certificats inclus (s’il y en a) sont généralement recherchés dans le message pour trouver le certificat de signature. Avec cette option, seuls les certificats indiqués dans l’option -certfile sont utilisés. Les certificats fournis peuvent cependant toujours être utilisés comme autorités de certification non dignes de confiance.
-noverify
Ne pas vérifier le certificat des signataires d’un message signé.
-nochain
Ne pas enchaîner la vérification des certificats de signataires : c’est-à-dire ne pas utiliser les certificats dans le message signé comme autorités de certification non dignes de confiance.
-nosigs
Ne pas essayer de vérifier les signatures sur le message.
-nocerts
Lors de la signature d’un message, le certificat du signataire est normalement inclus, mais est exclu avec cette option. Cela réduira la taille du message signé mais le vérificateur doit avoir une copie locale disponible du certificat des signataires (passée en utilisant par exemple l’option -certfile).
-noattr
Normalement, quand un message est signé, un ensemble d’attributs est inclus, y compris l’heure de signature et les algorithmes symétriques pris en charge. Avec cette option, ils ne sont pas inclus.
-binary
Normalement, le message d’entrée est converti au format « canonique », c’est à dire en utilisant effectivement RC et PAL (CR et LF en anglais) comme fin de ligne : conformément à la spécification S/MIME. Quand cette option est présente, aucune traduction n’est réalisée. C’est utile lors du traitement de données binaires qui pourraient ne pas être au format MIME.
-nodetach
Lors de la signature d’un message en utilisant une signature opaque : cette forme résiste mieux à la traduction par relais de message, mais ne peut pas être lue par des clients de lecture de courriers qui ne prennent pas en charge S/MIME. Sans cette option, une signature en clair avec le type MIME multipart/signed est utilisée.
-certfile fichier
Permet d’indiquer plusieurs certificats supplémentaires. Lors de la signature, ils seront inclus avec le message. Lors de la vérification, ils seront parcourus à la recherche de certificats de signataires. Les certificats devraient être au format PEM.
-signer fichier
Un certificat de signature lors de la signature ou re-signature d’un message, cette option peut être utilisée plusieurs fois si plus d’un signataire est nécessaire. Si un message est en cours de vérification, alors les certificats des signataires seront écrits dans ce fichier si la vérification est réussie.
-recip fichier
Le certificat des destinataires lors du déchiffrement d’un message. Ce certificat doit correspondre à celui des destinataires du message ou alors une erreur survient.
-inkey fichier
La clef privée à utiliser lors de la signature ou du déchiffrement. Cela doit correspondre au certificat correspondant. Si cette option n’est pas indiquée, alors la clef privée doit être incluse dans le fichier de certificats indiqué avec les options -recip ou -signer. Lors de la signature, cette option peut être utilisée plusieurs fois pour indiquer des clefs successives.
-passin param
La source du mot de passe de la clef privée. Pour plus de renseignements sur le format de param, consultez la section PARAMÈTRES DE PHRASE SECRÈTE d'openssl(1).
-rand fichier(s)
Un ou plusieurs fichiers contenant des données aléatoires utilisées pour initialiser le générateur de nombres pseudoaléatoires, ou une socket EGD (consultez RAND_egd(3)). Plusieurs fichiers peuvent être indiqués en utilisant le séparateur du système d'exploitation : « ; » pour Windows, « , » pour OpenVMS et « : » pour tous les autres.
cert.pem ...
Au moins un certificat de destinataires de message : utilisé lors du chiffrement d’un message.
-to, -from, -subject
Les en-têtes de message adéquats. Ils sont inclus hors de la partie signée d’un message donc vous pouvez les inclure vous-même. En cas de signature, plusieurs clients de courriers S/MIME vérifient que l’adresse électronique du certificat des signataires correspond à celle indiquée dans le champ From.
-purpose, -ignore_critical, -issuer_checks, -crl_check, -crl_check_all, -policy_check, -extended_crl, -x509_strict, -policy, -check_ss_sig, -no_alt_chains
Définir plusieurs options de vérification de chaîne de certificats. Consultez la page de manuel verify(1) pour plus de précisions.

NOTES

Le message MIME doit être envoyé sans ligne vide entre les en-têtes et la sortie. Certains programmes de courriers ajouteront automatiquement une ligne vide. Passer le message dans un tube directement à sendmail est une façon de conserver le format correct.

Le message fourni à signer ou chiffrer doit inclure les en-têtes MIME nécessaires sinon plusieurs clients S/MIME ne l’afficheront pas correctement (ou pas du tout). Vous pouvez utiliser l’option -text pour ajouter automatiquement les en-têtes en texte clair.

Un message « signé et chiffré » est un message signé qui est ensuite chiffré. Cela peut être réalisé en chiffrant un message déjà signé : consultez la section d’exemples.

Cette version du programme ne permet qu’un seul signataire par message mais vérifiera plusieurs signataires sur les messages reçus. Certains clients S/MIME ont des problèmes avec les messages contenant plusieurs signataires. Les messages peuvent être signés « en parallèle » en signant un message déjà signé.

Les options -encrypt et -decrypt miment l’utilisation classique dans les clients S/MIME. Pour être exact, elles traitent des données enveloppées PKCS#7 : les données chiffrées PKCS#7 sont utilisées dans d’autres buts.

L’option -resign utilise un algorithme de signature de message existant lors de l’ajout d’un nouveau signataire. Cela signifie que les attributs doivent être présents dans au moins une signature existante utilisant le même algorithme de signature de message, ou cette opération échouera.

Les options -stream et -indef activent la prise en charge expérimentale de flux d’entrées et sorties. Par conséquent, l’encodage est BER en utilisant un encodage construit de taille indéfinie et non plus DER. Le flux est pris en charge pour les opérations -encrypt et -sign si le contenu n’est pas détaché.

Le flux est toujours utilisé pour l’opération -sign avec les données détachées mais puisque le contenu ne fait plus partie de la structure PKCS#7, l’encodage reste DER.

CODES DE RETOUR

0
L’opération s’est terminée correctement.
1
Une erreur est survenue lors du traitement des options de la commande.
2
Un des fichiers d’entrée n’a pas pu être lu.
3
Une erreur est survenue lors de la création du fichier PKCS#7 ou lors de la lecture du message MIME.
4
Une erreur est survenue lors du déchiffrement ou de la vérification du message.
5
Le message a été vérifié correctement mais une erreur est survenue lors de l’écriture des certificats de signataires.

EXEMPLES

Créer un message signé en texte clair :

 openssl smime -sign -in message.txt -text -out courrier.msg \
        -signer moncert.pem

Créer un message signé opaque :

 openssl smime -sign -in message.txt -text -out courrier.msg -nodetach \
        -signer moncert.pem

Créer un message signé, inclure quelques certificats supplémentaires et lire la clef privée depuis un autre fichier :

 openssl smime -sign -in entrée.txt -text -out courrier.msg \
        -signer moncert.pem -inkey maclef.pem -certfile mescert.pem

Créer un message signé avec deux signataires :

 openssl smime -sign -in message.txt -text -out courrier.msg \
        -signer moncert.pem -signer autrecert.pem

Envoyer un message signé sous UNIX directement à sendmail, y compris les en-têtes :

 openssl smime -sign -in entrée.txt -text -signer moncert.pem \
        -from [email protected] -to quelquun@quelquepart \
        -subject "Message avec signature" | sendmail quelquun@quelquepart

Vérifier un message et extraire le certificat du signataire en cas de réussite :

 openssl smime -verify -in courrier.msg -signer utilisateur.pem \
        -out textsigné.txt

Envoyer un message chiffré en utilisant un DES triple :

 openssl smime -encrypt -in entrée.txt -from [email protected] \
        -to quelquun@quelquepart -subject "Message avec chiffrement" \
        -des3 utilisateur.pem -out courrier.msg

Signer et chiffrer un message :

 openssl smime -sign -in ml.txt -signer mon.pem -text \
        | openssl smime -encrypt -out courrier.msg \
        -from [email protected] -to quelquun@quelquepart \
        -subject "Message avec signature et chiffrement" \
        -des3 utilisateur.pem

Remarque : la commande de chiffrement n’inclut pas l’option -text parce que le message en cours de chiffrement a déjà les en-têtes MIME.

Déchiffrer un courrier :

 openssl smime -decrypt -in courrier.msg -recip moncert.pem \
        -inkey clef.pem

La sortie du type Netscape de signature est une structure PKCS#7 au format de signature détachée. Vous pouvez utiliser ce programme pour vérifier la signature en coupant les lignes de structure encodées en base64 et en les encadrant avec :

 -----BEGIN PKCS7-----
 -----END PKCS7-----

et en utilisant la commande :

 openssl smime -verify -inform PEM -in signature.pem -content contenu.txt

Sinon, vous pouvez aussi décoder de base64 la signature et utiliser :

 openssl smime -verify -inform DER -in signature.der -content contenu.txt

Créer et chiffrer un message en utilisant Camellia 128 bits :

 openssl smime -encrypt -in clair.txt -camellia128 \
        -out courrier.msg cert.pem

Ajouter un signataire à un message existant :

 openssl smime -resign -in courrier.msg -signer nouvellesignature.pem \
        -out courrier2.msg

BOGUES

L’analyseur MIME n’est pas très intelligent : il semble traiter la plupart des messages essayés jusqu’à présent mais pourrait avoir des problèmes avec d’autres.

Le code ne peut actuellement écrire le certificat du signataire que vers un fichier : si le signataire a un certificat de chiffrement séparé, vous devrez l’extraire vous-même. Il devrait y avoir une heuristique pour déterminer le certificat de chiffrement adéquat.

Dans l’idéal, une base de données de certificats devrait être maintenue pour chaque adresse électronique.

Le code ne prend actuellement pas en compte les algorithmes de chiffrement symétrique permis tels que fournis dans l’attribut signé SMIMECapabilities. Cela signifie que l’utilisateur doit inclure lui-même l’algorithme de chiffrement correct. Il devrait conserver la liste des algorithmes de chiffrement permis dans une base de données et n’utiliser que ceux-là.

Aucune vérification de révocation n’est réalisée sur le certificat du signataire.

Le code actuel ne peut traiter que les messages S/MIME v2, les structures S/MIME v3 plus complexes peuvent provoquer des erreurs d’analyse.

HISTORIQUE

L’utilisation de plusieurs options -signer et la commande -resign ont été ajoutées pour la première fois dans OpenSSL 1.0.0

L’option -no_alt_chains a été ajoutée à OpenSSL 1.0.2b.

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.