comment signer numériquement un fichier en PHP
J'ai fait un utilisateur table dans ma DB avec des colonnes différentes pour la tenue des utilisateurs d'informations. J'ai également ajouté deux colonnes public_key et private_key.
Lorsqu'un utilisateur s'inscrit, son info sera insérée dans la table. en plus je suis en utilisant:
//Create the keypair
$res=openssl_pkey_new();
//Get private key
openssl_pkey_export($res, $privatekey);
//Get public key
$publickey=openssl_pkey_get_details($res);
$publickey=$publickey["key"];
pour créer une clé aléatoire de la paire et le donner à l'utilisateur, de sorte que chaque utilisateur possède une paire de clés.
Je veux que mes utilisateurs ont numériques-signature de la capacité, de sorte que quand ils téléchargent un fichier de signature.
J'ai décidé de signer un exemple de fichier(msg.txt) tout d'abord pour voir si je peux et puis continuez. Il a l'air tout droit vers l'avant:
openssl_pkcs7_sign("msg.txt", "signed.txt", "signing_cert.pem",
array("private_key.pem", "mypassphrase"),
array()
);
Le problème, c'est: quels sont signing_cert.pem et private_key.pem ? J'ai collé ma clé publique générée dans signing_cert.pem et le secteur privé dans private_key.pem, mais je vois cette erreur:
Warning: openssl_pkcs7_sign() [function.openssl-pkcs7-sign]: error getting
private key in /home/ofathian/public_html/msc/ebook/mine/assymetric-test.php
on line 40
Tout avis est le bienvenue.
OriginalL'auteur Omidoo | 2012-03-14
Vous devez vous connecter pour publier un commentaire.
Je suis venu à la conclusion d'pourquoi ne pas en faire ma propre signature numérique de la fonction.
algorithme de signature numérique fonctionne comme ceci:
d'abord le texte en clair est haché puis il est cryptées par la clé privée de l'utilisateur, alors le résultat
est concaténé avec le texte en clair.
pseudo-code:
Pour vérifier: l'Entrée est divisé en texte brut et signature. alors la signature est décrypté
à l'aide de la clé publique. Puis le résultat est comparé à la valeur de hachage de la plaine du texte et si ils
sont égaux, il signifie que la signature est vérifiée.
pseudo-code:
Maintenant que le véritable code PHP que j'ai testé et utilisant actuellement:
Intéressant, mais ce qui si
----SIGNATURE:----
apparaît dans les données?OriginalL'auteur Omidoo
signing_cert.pem et private_key.pem sont les certificats que vous utilisez pour vous connecter au fichier.
Donc, si vous les avez stockées dans la bd, vous avez besoin de les exporter dans des fichiers appelés signing_cert.pem et private_key.pem respectivelly.
L'erreur que vous obtenez est que openssl essaie de charger ces fichiers, et puisqu'ils n'existe pas alors qu'il prétend.
Si vous écrivez ces fichiers vers le disque dur de votre DB, plase PRENDRE EN compte:
Aussi, vous pouvez, au lieu d'avoir ces certificats en DB, les ont stockées dans un dossier pour chaque utilisateur, pour éviter le dumping à un fichier lors de la signature. Bien sûr, ce dossier ne doit pas être accessible à n'importe qui.
Plus d'infos: PHP openssl_pkc7_sign
signing_cert.pem ressemble: -----COMMENCER à CLÉ PUBLIQUE----- zzz...zzz... -----FIN de la CLÉ PUBLIQUE----- et private_key.pem ressemble: -----BEGIN RSA PRIVATE KEY----- ..z... -----END RSA PRIVATE KEY----- Dans le fichier de clé privée ne devrait-elle pas être DSA au lieu de RSA? (Signature Numérique Alg.)
Si vous venez de coller ces fichiers, puis vérifiez les autorisations de fichier (et pour la prochaine fois, le faire à l'extérieur racine WWW).
Malheureusement, je ne connais pas bien les clés pour répondre à votre dernier commentaire, à savoir si elle devrait ou non DSA, mais j'ai vu beaucoup de signatures RSA à cette fin, il devrait bien fonctionner avec le RSA.
J'ai changé la permission de les deux à 0777 mais sans succès
OriginalL'auteur StormByte