2010-03-08 21 views
1

Je travaille sur un projet pour implémenter des signatures numériques de messages sortants et j'ai décidé d'utiliser M2Crypto pour cela.Comment signer numériquement un message avec M2Crypto en utilisant les clés dans un certificat au format DER

J'ai un certificat (au format DER) à partir duquel j'extrais les clés pour signer le message. Pour une raison quelconque, je continue d'obtenir une erreur de segmentation laide quand j'appelle la méthode "sign_update". Etant donné les exemples précédents que j'ai lus ici, il me manque clairement quelque chose.

Voici l'exemple, je travaille sur:

from M2Crypto.X509 import * 

cert = load_cert('certificate.cer', format=1) 
Pub_key = cert.get_pubkey() 
Pub_key.reset_context(md='sha1') 
Pub_key.sign_init() 
Pub_key.sign_update("This should be good.") 

print Pub_key.sign_final() 

Merci d'avance pour l'aide,

Pablo

Répondre

2

Une chose évidente saute à moi: vous dites que votre certificat est en DER format, mais vous passez format=0 à load_cert() ce qui signifie PEM. Voir X509 module variables. Peut-être pas ce qui cause votre problème, cependant (je m'attendrais à ce que vous obteniez une exception si vous mélangez le type de certificat). Après un peu plus de réflexion, je pense que vous essayez de faire la mauvaise chose ici, c'est pourquoi il plante (bien que, bien sûr, il ne devrait pas tomber en panne mais déclencher une exception). Vous ne pouvez pas signer un message à l'aide de la clé publique d'un certificat. Ce serait comme faire du faux numérique.

Pensez-y de cette façon. Vous recevez mon certificat, qui contient ma clé publique. Vous pouvez utiliser la clé publique pour crypter un message pour moi. Seulement je serai capable de déchiffrer en utilisant ma clé privée. Vous pouvez signer le message en utilisant votre clé privée, et je peux utiliser votre clé publique pour vérifier votre signature.

+0

Merci d'avoir signalé cela. Vous avez raison, ce n'est pas la cause du problème. J'ai oublié de changer ce morceau de code: je faisais quelques tests pour voir si en convertissant le certificat au format PEM j'ai réussi à contourner le problème - sans succès. –

+0

Nore sûr si vous recevrez l'avis édité, donc juste ajouter un commentaire ici afin que vous vous souviendrez de vérifier mon commentaire mis à jour :) –

+0

Salut, et merci pour la mise à jour. Oui, je pense que vous avez raison. On m'a dit que la clé privée se trouvait à l'intérieur de ce certificat, mais après vérification, nous avons découvert que le fichier de la clé privée avait été perdu et que personne ne l'avait sauvegardé. C'est pourquoi il plante, probablement: theres aucune clé privée à utiliser pour la signature. Merci pour votre réponse, il nous a aidé à voir le vrai problème =) Pablo –

0

Il n'y a pas de fichier de clé privée, c'est pourquoi il se bloque et que je ne peux pas le signer.