Ce module est EXPERIMENTAL. Cela signifie que le comportement de ces fonctions, leurs noms et concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS! Soyez-en conscient, et utiliser ce module à vos risques et périls.
Cette extension utilise les fonctions de
OpenSSL pour générer
et vérifier les signatures, ainsi que pour sceller (chiffrer)
et ouvrir (déchiffrer) les données. Vous avez besoin de
OpenSSL >= 0.9.5 pour utiliser ce module.
Cette extension supporte aussi la signature et le cryptage des
courrier éléctroniques. Il est aussi possible de
spécifier des couples clés/certificats d'un grand nombre de
cas, qui rendent le code PHP plus facile à lire. Ces
fonctionnalités sont disponibles en développement sur CVS, et
probablement avec PHP 4.0.6.
ATTENTION : cette extension est encore
expérimentale!
OpenSSL offre de nombreuses fonctionnalités qui ne sont pas
encore supportées par ce module. Elle seront ajoutées
ultérieurement.
Un bon nombre de fonctions OpenSSL demandent une clé et un certificat
comme paramètres. PHP 4.0.5 et plus récent utilisait
des clés ou certificats sous forme de ressource, retournée
par l'une des fonctions openssl_get_xxx(). Les versions ultérieures
utilisent l'une des méthodes suivantes :
Pour les clés publiques seulement : une ressource
X.509
Une chaîne avec le format :
file://path/to/file.pem.
Le fichier doit contenir une clé privé ou un certificat,
encodé au format PEM (il peut contenir les deux).
Une chaîne contenant une clé ou un certificat
encodé au format PEM
Pour les clés privées, vous pouvez aussi utiliser la
syntaxe array($key, $passphrase), où $key
représente une clé spécifiée par un
fichier ou une représentation textuelle comme
cité ci-dessus, et $passphrase représente une
chaîne contenant la passe-phrase de cette clé
privée.
Lorsque vous appelez une fonction qui va vérifier une signature ou
un certificat, le paramètre cainfo doit être un
tableau contenant les noms d'un dossier et d'un fichier contenant les
tiers de confiance. Si un dossier est spécifié, il doit être correct,
car openssl va l'utiliser.
Les fonctions S/MIME utilisent des flags qui sont spécifiés
par un champs de bits. Les valeurs valides sont :
Tableau 1. Constantes PKCS7
Constante
Description
PKCS7_TEXT
Ajoute le texte plein en clair dans les en-têtes du message
signé/chiffré. Lors du déchiffrement ou la vérification,
il supprime purement et simplement ces données. Si le
message chiffré ou signé n'est pas du type MIME, une erreur
surviendra.
PKCS7_BINARY
Normalement, le message est converti au format canonique
qui utilise effectivement des CR et LF comme fin de ligne,
comme demandé dans les spécification de S/MIME.
Lorsque cette option est activée, le message ne sera
pas converti. Cela sert lorsque vous manipulez des données
binaires qui ne sont pas au format MIME.
PKCS7_NOINTERN
Lors de la vérification d'un message, les certificats
(s'il y en a) inclus dans le message sont normalement
utilisé pour rechercher le certificat de signature. Avec
cette option, seul le certificat spécifié par le
paramètre extracerts de la fonction
openssl_pkcs7_verify() est utilisé.
Les certificats fournis peuvent toujours être utilisé,
avec un niveau de confiance réduit.
PKCS7_NOVERIFY
Ne vérifie pas les certificats des signataires d'un message
signé.
PKCS7_NOCHAIN
N'enchaine pas les vérifications des signataires de
certificats. C'est-à-dire, n'utilise pas les certificats
contenu dans le message.
PKCS7_NOCERTS
Lors de la signature d'un message, le certificat du signataire
est normalement inclus. Avec cette option, c'est
désactivé. Cela va réduire la taille du message,
mais le vérificateur devra avoir une copie local du certificat
du signataire (passée au paramètre
extracerts, avec la fonction
openssl_pkcs7_verify()).
PKCS7_NOATTR
Normalement, lorsqu'un message est signé, un jeu d'attributs
contenant l'heure de signature et l'algorithme symétrique
supporté, est inclus dans le message. Avec cette option,
il n'est pas inclus.
PKCS7_DETACHED
Lors de la signature d'un message, utilise la signature
en texte claire, avec le type MIME "multipart/signed".
C'est la valeur par défaut du paramètre
flags
pour la fonction openssl_pkcs7_sign().
Si vous annulez cette optoin, le message sera signé de
manière opaque, ce qui resiste mieux à la traduction
des relais mails (certains serveur mail anciens corrompent les
messages), mais empêche la lecture par les client mails qui ne
connaissent pas S/MIME.
PKCS7_NOSIGS
Ne vérifie pas les signatures d'une message
Note :
Ces constantes ont été ajoutées en PHP 4.0.6.