Index: phpdoc/fr/functions/openssl.xml +++ phpdoc/fr/functions/openssl.xml OpenSSL OpenSSL Cette extension utilise les fonctions de OpenSSL pour générer et vérifier les signatures, ainsi que pour sceller (crypter) et ouvrir (décrypter) les données. Vous avez besoin de OpenSSL >= 0.9.6 pour utiliser ce module. OpenSSL offre de nombreuses fonctionnalités qui ne sont pas encore supportées par ce module. Elle seront ajoutées ultérieurement. openssl_free_key Libère les ressources Description void openssl_free_key int key_identifier openssl_free_key libère les ressources associées à key_identifier. openssl_get_privatekey Prépare une clé privée au format PEM Description int openssl_get_privatekey string key string passphrase openssl_get_privatekey retourne un identifiant de clé positif, ou FALSE en cas d'erreur. openssl_get_privatekey analyse la clé privée key, au format PEM, et la prépare pour à être utilisée par d'autres fonctions. Le paramètre optionnel passphrase doit être utilisé si la clé est cryptée (protégée par un mot de passe). openssl_get_publickey Extrait une clé publique d'un certificat Description int openssl_get_publickey string certificate openssl_get_publickey retourne un identifiant de clé positif, ou FALSE en cas d'erreur. openssl_get_publickey extrait la clé publique du certificat certificate (format X.509), et la prépare à être utilisée ultérieurement. openssl_open Ouvre des données scellées Description bool openssl_open string sealed_data string open_data string env_key int priv_key_id openssl_open TRUE en cas de succès, et FALSE sinon. En cas de succès, les données décryptées sont placées dans open_data. openssl_open ouvre (décrypte) les données sealed_data en utilisant la clé prviée priv_key_id et la clé d'enveloppe env_key. La clé d'enveloppe est générée lorsque les données sont scellées, et ne peut être utilisée qu'avec la clé privée spécifique. Reportez vous à openssl_seal pour plus d'informations. Exemple avec <function>openssl_open</function> <?php // On suppose que $sealed et $env_key contiennent les données scellées // et la clé d'enveloppe, fournies par l'expéditeur // lecture de la clé privée dans un fichier $fp = fopen("/src/openssl-0.9.6/demos/sign/key.pem", "r"); $priv_key = fread($fp, 8192); fclose($fp); $pkeyid = openssl_get_privatekey($priv_key); // décryptage des données : elles sont placées dans $open if (openssl_open($sealed, $open, $env_key, $pkeyid)) echo "Voici les données décryptées : ", $open; else echo "Impossible de décrypter les données"; // libération des ressources openssl_free_key($pkeyid); ?> Voir aussi openssl_seal. openssl_seal Scelle des données Description int openssl_seal string data string sealed_data array env_keys array pub_key_ids openssl_seal retourne la longueur des données scellées en cas de succès, et FALSE sinon. En cas de succès, les données scellées sont placées dans le paramètre sealed_data, et les clés d'enveloppe dans env_keys. openssl_seal scelle (encrypte) les données data en utilisant l'algorithme RC4 avec une clé secrètre générée aléatoirement. La clé est encryptée avec chaque clé publique associée à pub_key_ids et chaque clé ainsi encryptée est retournée dans env_keys. Cela signifique que vous pouvez envoyez des données scellées à plusieurs destinataires (en supposant que chacun ait recu la clé publique). Chaque destinataire doit recevoir les données encryptées et la clé d'enveloppe, qui a été encryptée avec la clé publique du destinataire. Exemple avec <function>openssl_seal</function> <?php // On suppose que $data contient les données à sceller // lecture de la clé publique pour chaque destinataire $fp = fopen("/src/openssl-0.9.6/demos/maurice/cert.pem", "r"); $cert = fread($fp, 8192); fclose($fp); $pk1 = openssl_get_publickey($cert); // pour le deuxième destinataire $fp = fopen("/src/openssl-0.9.6/demos/sign/cert.pem", "r"); $cert = fread($fp, 8192); fclose($fp); $pk2 = openssl_get_publickey($cert); // scelle le message : seuls, les possessuers de $pk1 et $pk2 peuvent décrypter // le message $sealed avec les clés $ekeys[0] et $ekeys[1] (respectivement). openssl_seal($data, $sealed, $ekeys, array($pk1,$pk2)); // libère les clés de la mémoire openssl_free_key($pk1); openssl_free_key($pk2); ?> Voir aussi openssl_open. openssl_sign Signe les données Description bool openssl_sign string data string signature int priv_key_id openssl_sign retourne TRUE en cas de succès, et FALSE sinon. En cas de succès, la signature est placée dans signature. openssl_sign calcule la signature des données data en utilisant l'algorithme SHA1 (hashing) suivi du cryptage avec la clé privée priv_key_id. Notez que les données elles-mêmes ne sont pas encryptées. Exemple avec <function>openssl_sign</function> <?php // On suppose que $data contient les données à signer // lecture de la clé publique pour chaque destinataire $fp = fopen("/src/openssl-0.9.6/demos/sign/key.pem", "r"); $priv_key = fread($fp, 8192); fclose($fp); $pkeyid = openssl_get_privatekey($priv_key); // calcule de la signature openssl_sign($data, $signature, $pkeyid); // libère les clés de la mémoire openssl_free_key($pkeyid); ?> Voir aussi openssl_verify. openssl_verify Vérifie une signature Description int openssl_verify string data string signature int pub_key_id openssl_verify retourne 1 si la signature est correcte, 0 si la signature est incorrecte, et -1 en cas d'erreur. openssl_verify vérifie que la signature signature est correcte pour les données data, et avecd la clé publique pub_key_id. Cette clé doit être la clé publique correspondant à la clé privée utilisée lors de la signature. Exemple avec <function>openssl_verify</function> <?php // On suppose que $data et $signature contiennent les données à signer et // la signature // lecture de la clé publique depuis le certificat $fp = fopen("/src/openssl-0.9.6/demos/sign/cert.pem", "r"); $cert = fread($fp, 8192); fclose($fp); $pubkeyid = openssl_get_publickey($cert); // indique si la signature est correcte $ok = openssl_verify($data, $signature, $pubkeyid); if ($ok == 1) echo "Signature valide"; elseif ($ok == 0) echo "Signature erronnée"; else echo "Erreur de vérification de la signature"; // libère les clés de la mémoire openssl_free_key($pubkeyid); ?> Voir aussi openssl_sign.